汇编王爽版 实验8的问题

[复制链接]
查看11 | 回复4 | 2011-3-13 03:41:11 | 显示全部楼层 |阅读模式
assume cs:codesg

codesg segment


mov ax,4c00h


int 21h

start: mov ax,0



s: nop



nop



mov di,offset s



mov si,offset s2



mov ax,cs:[si]



mov cs:[di],ax


s0: jmp short s


s1: mov ax,0


int 21h


mov ax,0

s2: jmp short s1



nop

codesg ends

end start


程序我看得懂 但是不知道为什么是执行cs:0这条指令,不是应该执行s的么

“P180中关于jmp指令的位移内容

当指令执行到s0:jmp short s时,该指令得到执行,编译器算出的ip位移量为8-18h=-16(补码F0),(ip)=(ip) 位移量=18h (-16)=8,cs:8指向s;

当指令执行到s标段jmp命令时,第1个字节中的机器码为EBF6,给出的ip位移量为-10(补码F6),(ip)=(ip) 位移量=ah (-10)=0,cs:0指向第一条指令。”
这个是我找到的答案说明,看不懂。。
求哪位给解释解释啊! 这里没学通,什么补码的不懂啊
回复

使用道具 举报

千问 | 2011-3-13 03:41:11 | 显示全部楼层
<pre id=\"best-answer-content\" class=\"reply-text mb10\">assume cs:codesg

codesg segment

mov ax,4c00h
; cs:0
3个字节

int 21h
;2个字节
start: mov ax,0
;三个字节

s: nop
;
执行下面的移动指令之后jmp ip-8被移动到S处,在执行完S0后行
;执行 JMP
IP-8到cs:0处返回程序

nop
;

mov di,offset s


mov si,offset s2


mov ax,cs:[si]


mov cs:[di],ax

s0: jmp short s
;编译后jmp ip-10(十进制)
s1: mov ax,0

int 21h

mov ax,0
s2: jmp short s1
;编译器编译后为JMP ip-8

nop
codesg ends
end start

















<h4 class=\"ask\">追问





<pre class=\"replyask-text\" id=\"content-1423479\">书上说 8位位移=标号地址-jmp后第一字节的地址
那在执行标号s:jmp short s1时 8位位移不是 18h-A=E吗? 此时ip=18h。。
请问一下 为什么此时的八位位移是-10呢? 我这里不懂 谢谢啊!
回复

使用道具 举报

千问 | 2011-3-13 03:41:11 | 显示全部楼层
<pre class=\"replyask-text\" id=\"content-1424278\">哥18H-A=E?
A(=10)E(=14)=28=1CH!!!
回复

使用道具 举报

千问 | 2011-3-13 03:41:11 | 显示全部楼层
<pre class=\"replyask-text\" id=\"content-1442920\">A E是等于18h吧。。。
其实我还不懂。。 就是那个执行标号s:jmp short s1时 8位位移为什么是-10。。
麻烦给我讲一次。。谢谢啊。。。
回复

使用道具 举报

千问 | 2011-3-13 03:41:11 | 显示全部楼层
<pre class=\"replyask-text\" id=\"content-1508253\">对,A E=10 14=24=18H,上边是我写错了不好意思了,
可是S:JMP SHORT S1
是从s2处拷贝过去的是-8不是减10
减8之后正好跳到最上边的MOV AX,4C00H处即段地址CS偏移地址:00处
这是我的理解
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行