通过这个程序加深了JMP 标号 指令中保存的是相对位移而不是偏移地址.
assume cs:code
code segment
mov ax,4c00h
int 21h
start:mov ax,0 程序从这里开始
s:nop
nop
mov di,offset s 将S标号偏移地址赋DI
mov si,offset s2 将S2标号偏移地址赋SI
mov ax,cs:[si] 将代码S2处短跳转指令数据赋AX
mov cs:[di],ax 将AX数据赋代码S标号处,没运行之
前简单的理解为(jmp short s1),
以为下步跳转到S1处,因无正确返回指
令,不能返回;实际是向前跳转10字
节,正好执行start:前面的程序返回指令.
s0:jmp short s
s1:mov ax,0
int 21h
mov ax,0
s2:jmp short s1
nop
code ends
end start
- [tinyparticle] 不错,思路清晰 09/29 21:22
- [wsrf] 正确。 09/16 09:22
- [wsrf] 这个用DEBUG查看一下程序所占字节数就可以了,没有必要把每条指令所占字节数都记住,博主的做法是正确 09/16 08:22
- [tinyparticle] 取cx=0(cx取0-ffffh所占字节数是一样的),进debug查看程序总长度。提示:查看书P91 09/11 20:07
- [huibian2009] 呵呵,逻辑错误就是在编译的时候可以通过,但在执行的过程中会发生错误。 09/10 11:39
- [huibian2009] 呵呵,这道题考查的是对栈空时栈顶的设置,可以参考教程上关于栈的相关章节。这道题应该是选第1个。 09/09 08:37
- [911911] 谢谢已改正 09/08 15:51
- [wsrf] (1)说修改的内容的时候应该是从高字节到低字节写起。如内存单元220FE存储的字为5CCA,而不应该 09/08 08:53
- [911911] 改正了, 特意看了看前面章节的举例 才发现举的DEBUG操作时 数据是不加H的 写段程序指令时数据都 09/07 11:26
- [mywiil] debug下默认的就是16进制,所以不用加H,但是源代码中是需要加H的,因为源程序在编译的时候,数据 09/07 09:12