首页
社区
课程
招聘
[旧帖] 为什么内存中8位数据不能加到16位的通用寄存器? 0.00雪花
发表于: 2014-4-16 12:58 8861

[旧帖] 为什么内存中8位数据不能加到16位的通用寄存器? 0.00雪花

2014-4-16 12:58
8861
王爽的《汇编语言》112页中说道:计算ffff:0--ffff:b单元中的数据的和,结果存在在dx中。
  他说,ffff:0--ffff:b中的数据是8位的,不能直接加到16位的寄存器dx中。
   但是前面他有过例题说:
mov ax,[0]
mov dx,[1]                        
mov dl,[1] 

他也说过,可以这么做,将8位寄存器的内容加到16位寄存器当中去。如:
mov ax,bl;将8位寄存器赋值到16位寄存器中去 

那么为什么就不可以直接:赋值呢?

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 2143
活跃值: (720)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
2
符号扩展,像movzx这样的
2014-4-16 15:40
0
雪    币: 1010
活跃值: (165)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
楼主你的问题好蛋疼...

八位数据不是不可以加到十六位寄存器当中去,但是不能直接用八位和十六位进行运算;

你可以这样做

列如:mov bl,1
         mov ax,0
         add al,bl   ;如果需要赋值用MOV
结果:  AX=0001

估计你没有看懂那个题的意思,仔细看一下那题吧!

你都说了,计算单元中的数据和。一个内存单元可以存放8位二进制数(即一个字节)。在解决这道问题中不能直接用直接用八位与十六位运算,那样结果就不对了。

你把程序抄下来用十六位与十六位运算,八位与八位运算,然后看看DX中的数据,估计你就明白了。

索引内存单元的位数由寄存器来决定

MOV AX,[0]   ;由AX来决定   16位 (两个字节)

MOV AH,[0]  ;由AH来决定    8位(一个字节)

至于为什么不能直接用八位和十六位赋值,这个问题你要去问CPU他爸。

本人菜菜菜鸟一个,说的不对的地方请大牛多多包涵。
2014-4-16 16:00
0
雪    币: 16
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
好嘛,已经再次看了此题。。
  重新理解一下。
2014-4-16 16:38
0
游客
登录 | 注册 方可回帖
返回
//