编程论坛
注册
登录
编程论坛
→
汇编论坛
求指教为什么运行MOV AX, 87H 值为B8 87?
水浙江雪
发布于 2015-01-04 18:28, 4640 次点击
为什么运行MOV AX, 87H 值为B8 87 ?
求大神指教
6 回复
#2
zklhp
2015-01-04 19:21
什么值?
#3
水浙江雪
2015-01-04 20:02
回复 2楼 zklhp
AX的值,①MOV AX, 87H ②MOVSX AX, 87H ③MOVZX AX, 87H
①就是我请教的问题,我不知道之后AX的值是多少
②AX = 0FF87H
③AX = 0087H
请教一下①是什么情况?谢谢
#4
zklhp
2015-01-04 20:11
以下是引用
水浙江雪
在2015-1-4 20:02:29的发言:
AX的值,①MOV AX, 87H ②MOVSX AX, 87H ③MOVZX AX, 87H
①就是我请教的问题,我不知道之后AX的值是多少
②AX = 0FF87H
③AX = 0087H
请教一下①是什么情况?谢谢
mov 高位不填充 直接赋值
movsx 用符号填充高位
movzx 用0填充
因为87H也就是二进制的
1000 0111
符号位是1 则movsx后是②的情况 其他两种情况都是③的情况
如果你学过高级语言 那么 这里就好比字节转换为字 是否保留符号位 movsx是保留符号位的
如果你看不懂 建议你认真看书
[
本帖最后由 zklhp 于 2015-1-4 20:12 编辑
]
#5
水浙江雪
2015-01-04 20:34
回复 4楼 zklhp
谢谢,知道了
#6
取名字
2015-04-29 21:37
以下是引用
zklhp
在2015-1-4 20:11:07的发言:
mov 高位不填充 直接赋值
movsx 用符号填充高位
movzx 用0填充
因为87H也就是二进制的
1000 0111
符号位是1 则movsx后是②的情况 其他两种情况都是③的情况
如果你学过高级语言 那么 这里就好比字节转换为字 是否保留符号位 movsx是保留符号位的
如果你看不懂 建议你认真看书
对于“mov 高位不填充 直接赋值”这一说法不正确。因为“MOV”命令不存在将字节扩展成字的功能,所以也就不存在“高位不填充”一说。
应该说,在“MOV AX,87H”这条指令中,AX寄存器告诉计算机现在进行的数据传送以字为单位,所以计算机将87H也看成是一个字,“87H”是这个字的低位字节值,高位字节值就是“00H”,传送到AX寄存器中AX的值就是“0087H”。
[
本帖最后由 取名字 于 2015-4-29 21:43 编辑
]
#7
wmf2014
2015-04-29 21:45
mov ax,87h的机器码为:b8 87 00,可见是把一个16位的立即数0087送进ax的,不可能什么高位自动填充的问题。
1