汇编基础问题(王爽的第九章)
在王爽前面所说的两个数相加应当两个数所占的位数相同,图中是王爽的<<汇编语言>>的第九章(180页)可见ip是16位寄存器+8位的位移,两个数的位数都不相同何来相加呢,如...
在王爽前面所说的两个数相加应当两个数所占的位数相同,图中是王爽的<<汇编语言>>的第九章(180页)可见ip是16位寄存器+8位的位移,两个数的位数都不相同何来相加呢,如果加的是正数没关系,但如果位移是个-3(11111101b),假设ip为10(0000000000001010b),0000000000001010+11111101=0000000100000111(263)不是想要的值。
展开
4个回答
展开全部
你的理解错了。。这不是真正意义上的16位的IP寄存器加上8位的数值~~
不知道你在学到这里的时候,你用debug试过没有.
现在举个例子,假如你的汇编文件里有这样的一组指令片段
jmp short k
mov ax,4
mov bx,3
k:
mov cx,3
当你编译后用debug打开,或者直接在debug里用a输入这些指令。用u反汇编你会看见这几条指令都各占两个字节,因此mov cx,3的首地址与jmp short k之间相隔8各字节,同时你会看见jmp short k的机器指令为EB06,那个06就是位移,它是指令相对于jmp short k的下条指令相对位移的字节数,我相信你已经懂这个了,因为王爽的书上比我说的更清楚~~,因此你问题中的八位位移实际上就是这个机器码中的高位字节所能表示的范围,EB表示jmp short,而06这样的数值由于占一个字节所以只能表示8位~
不知道你在学到这里的时候,你用debug试过没有.
现在举个例子,假如你的汇编文件里有这样的一组指令片段
jmp short k
mov ax,4
mov bx,3
k:
mov cx,3
当你编译后用debug打开,或者直接在debug里用a输入这些指令。用u反汇编你会看见这几条指令都各占两个字节,因此mov cx,3的首地址与jmp short k之间相隔8各字节,同时你会看见jmp short k的机器指令为EB06,那个06就是位移,它是指令相对于jmp short k的下条指令相对位移的字节数,我相信你已经懂这个了,因为王爽的书上比我说的更清楚~~,因此你问题中的八位位移实际上就是这个机器码中的高位字节所能表示的范围,EB表示jmp short,而06这样的数值由于占一个字节所以只能表示8位~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
问题的关键就是你题目中的“-3”。
8位位移:=标号处的地址-jmp指令后的第一个指令的地址(这两个地址都是16位的)
重点看一下:附注3:汇编编译器对jmp指令的相关处理
计算这两个相同位数的地址后,根据计算结果输出相应的机器码。有错误则提示。
计算结果分两种:[-128,127]和[-32768,32767]
8位位移:=标号处的地址-jmp指令后的第一个指令的地址(这两个地址都是16位的)
重点看一下:附注3:汇编编译器对jmp指令的相关处理
计算这两个相同位数的地址后,根据计算结果输出相应的机器码。有错误则提示。
计算结果分两种:[-128,127]和[-32768,32767]
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
没怎么看懂题目和回答,但是实际用的时候,貌似不用关心这个具体数值吧,用标号就是了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
8位位移可以扩展成16位的前面补零
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询