無涯 发表于 2013-3-9 16:24:29

jmp段间转移

assume cs:code
code segment
start: mov ax,0
jmp 1449H:0003H
mov ax,1
s: inc ax
code ends
end start

今天看了jmp指令这章的视频,想总节一下jmp指令的用法,发现在编译器里有jmp 段地址:偏移地址会报错,
left operand must have segment 如果我直接在debug了输入这条指令就可以运行,百度了一下,网上没有人
问这样的问题=。=求大神赐教。。。

-搁浅的回忆 发表于 2013-3-9 16:55:37

start: mov ax,1449H
      mov ds,ax
      mov ax,0
      mov bx,0003h
      jmp ds:
在编译器中这样不会报错,效果是一样的
编译器和debug还是有区别的···

無涯 发表于 2013-3-9 22:56:22

-搁浅的回忆 发表于 2013-3-9 16:55 static/image/common/back.gif
start: mov ax,1449H
      mov ds,ax
      mov ax,0


大神, 不对啊,我试了一下,编译时不报错,可是结果转移的不是我给他的数值
assume cs:code
code segment
start:       
                mov ax,2000H
                mov ds,ax
                mov bx,0100H
                jmp ds:
               
               
                mov ax,1
        s:        inc ax
code ends
end start
执行完cs 没变,ip=b605不知道哪来的数值

-搁浅的回忆 发表于 2013-3-9 23:05:30

無涯 发表于 2013-3-9 22:56 static/image/common/back.gif
大神, 不对啊,我试了一下,编译时不报错,可是结果转移的不是我给他的数值
assume cs:code
code segm ...

assume cs:code
code segment
start:      
                mov ax,2000H
                mov ds,ax
                mov bx,0100H
                jmp ds:
               
               
                mov ax,1
      s:      inc ax
code ends
end start
这是程序的全部代码吗?我怎么看不出来你想干什么?
这也不对啊,没有程序返回啊···
mov ax,4c00h
int 21h

無涯 发表于 2013-3-10 00:54:05

-搁浅的回忆 发表于 2013-3-9 23:05 static/image/common/back.gif
assume cs:code
code segment
start:      


没打算干嘛 就是了解一下jmp指令的用法

↓《 发表于 2013-3-10 09:49:55

把书翻翻,查查段间转移的执行过程吧,貌似段间转移时是用标号所对应的段地址和偏移地址修改cs和ip的,记得不大清楚了,错了莫怪!

無涯 发表于 2013-3-10 11:25:55

↓《 发表于 2013-3-10 09:49 static/image/common/back.gif
把书翻翻,查查段间转移的执行过程吧,貌似段间转移时是用标号所对应的段地址和偏移地址修改cs和ip的,记得 ...

段间转移有很多种方式的,

dAb 发表于 2013-3-26 04:07:27

無涯 发表于 2013-3-9 22:56 static/image/common/back.gif
大神, 不对啊,我试了一下,编译时不报错,可是结果转移的不是我给他的数值
assume cs:code
code segm ...

这样啊地址0100保存的是什么值,JMP就跳到这个值的位置 加 [ ]就是取内存地址里面的值了
不加[ ]就能是跳到0100      JMP这个指令很好理解的,不必纠结,因为以后的保护模式不能乱跳了{:5_109:}
页: [1]
查看完整版本: jmp段间转移