关于实验8分析一个奇怪的程序
我昨天刚学完跳转程序,开始对“奇怪的程序”也是很有兴趣,但是无论怎么看小鱼老师的解答都看不明白。后来自己琢磨,感觉收货蛮大。因为小鱼老师没有讲指令长度(占字节数)这个知识点,所以又恶补了这个
知识点,配合这个,重新整理了指令帮助理解。这里一定要注意一点,即IP当前值:应为当前要执行的指令
的下一条相邻指令的地址。下面给出我整理的指令注释,前一个数字代表当前指令地址,后一个数字代表当前指令
占用的字节数。然后根据跳转指令,结合IP差值变化和指令位移计算方法,很容易理解这个奇怪的程序。
assume cs:codesg
codesg segment
mov ax,4c00h ;偏移地址:0,占2字节 。
;以下注释第一个数字为当前指令偏移地址,
;第二个数字为当前指令所占字节数
int 21h ;3,2
start: mov ax,0 ;5,3
s: nop ;8,1 在执行s0处之后,本地址指令为 jmp short s1
nop ;9,1 之后与8共用存储指令 jmp short s1
mov di,offset s ;0Ah,3
mov si,offset s2 ;0Dh,3
mov ax,cs: ;10h,3
mov cs:,ax ;13h,3
s0: jmp short s ;16h,2
s1: mov ax,0 ;18h,3
int 21h ;1Bh,2
mov ax,0 ;1Dh,3
s2: jmp short s1 ;20h,2
nop ;22h,1
codesg ends
end start 您好!看起来您对程序分析已经有了很深入的理解,并且还详细整理了指令和注释。为了帮助其他同学更好地理解,我将您的分析内容使用Discuz!论坛支持的BBCode格式进行了排版:
关于实验8分析一个奇怪的程序
昨天刚学完跳转程序,对“奇怪的程序”也很有兴趣,不过一直没有完全理解。经过自己琢磨,收获颇多。由于小鱼老师没有讲解指令长度(占字节数),所以我特意补充了这方面的知识,并重新整理了指令注释,这样更容易理解这个“奇怪的程序”。需要特别注意的点是:IP当前值应为当前要执行指令的下一条相邻指令的地址。
下面是我整理的指令注释。前一个数字代表当前指令地址,后一个数字代表当前指令占用的字节数。结合跳转指令,分析IP差值变化和指令位移计算方法,很容易理解这个程序:
assume cs:codesg
codesg segment
mov ax,4c00h ;偏移地址:0,占2字节。
;以下注释第一个数字为当前指令偏移地址,
;第二个数字为当前指令所占字节数
int 21h ;3,2
start: mov ax,0 ;5,3
s: nop ;8,1 在执行s0处之后,本地址指令为 jmp short s1
nop ;9,1 之后与8共用存储指令 jmp short s1
mov di,offset s ;0Ah,3
mov si,offset s2 ;0Dh,3
mov ax,cs: ;10h,3
mov cs:,ax ;13h,3
s0: jmp short s ;16h,2
s1: mov ax,0 ;18h,3
int 21h ;1Bh,2
mov ax,0 ;1Dh,3
s2: jmp short s1 ;20h,2
nop ;22h,1
codesg ends
end start
希望这些注释和整理能帮助其他同学更直观地理解这个程序。如果有任何问题或更好的想法,欢迎讨论和交流!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页:
[1]