鱼C论坛

 找回密码
 立即注册
查看: 3329|回复: 2

实验8的问题

[复制链接]
发表于 2011-6-21 03:34:08 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 king嗜血法师 于 2011-6-22 04:02 编辑

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
这个代码段是把s2:中的jmp short s1复制到s:中,按照思路这条指令是IP+(-10),所以执行s:jmp short s1这条指令
ip+(-10)就跳到上面的mov ax,4c00H。但是到了检测点11.3又让我迷惑了。


             mov ax,0f00H
             mov ds,ax

             mov bx,0
             mov dx,0
             mov cx,32

       s:   mov al,[bx]
             cmp al,32
             jb s0
             cmp al,128
             ja s0
             inc dx

      s0:  inc bx
             loop s
按照第一个代码段的思路jb跳到s0"当前"IP=ip+(x)为偏移地址,那么ja也应该跳到“当前”ip=ip+(x)的偏移地址才对啊,为什么ja也会也会跳到s0?



想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-6-21 12:38:11 | 显示全部楼层
第一个例子你还是没能明白
首先要记住一点,跳转的是 IP+当前IP到目标的偏移值

说下第一个题
   s1 : mov ax,0
         int 21H
         mov ax,0
         
    s2 : jmp short s1
s2这条指令,在编译时,就已经把s2至s1的偏移算出来了,比如是-10,那在程序里,它表示为jmp -10
那当s2这条指令被复制到s处时,它的指令还是jmp -10,所以才能执行到mov ax,4c00H处

再看第二题
比如jb s0这条指令到s0的距离为10,ja s0这条指令到s0的距离为6
那它们的偏移值分别就是10和6,再加上它们各自的IP,所以都能跳到s0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-6-22 03:12:07 | 显示全部楼层
谢谢,弄明白了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-14 12:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表