|
发表于 2025-2-26 09:44:59
|
显示全部楼层
您好!看起来您对程序分析已经有了很深入的理解,并且还详细整理了指令和注释。为了帮助其他同学更好地理解,我将您的分析内容使用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 小助理,如未能正确解答您的问题,请继续追问。 |
|