yu457001 发表于 2014-1-23 16:32:34

关于CS,IP 和jmp

小甲鱼老师的教程第二章第十一小节修改cs和ip中的数据这里,有个例题

当指令执行到jmp bx 时他是怎么跳到cs=1000h ip=0000h的位置的呢?能给详细解说一下吗?其他的都能明白,就这个想不通也看不懂。
谢谢各位大神们{:1_1:}

yu457001 发表于 2014-1-23 16:33:56

最开始的时候cs=20000h ip=0000h

牡丹花下死做鬼 发表于 2014-1-23 17:08:56


mov ax,0000
mov bx,ax
这样bx不就是0000了
jmp bx 就是jmp 1000:0000

至于cs为毛是1000看了下 一开始cs = 2000(你在二楼多打了个0) iP = 0 所以执行的是 20000h所在的代码
也就是 mov ax,6622h
然后当执行到jmp 1000:3 的时候 cs就变成了1000 ip 变成了3
就去执行mov ax,0000了

yu457001 发表于 2014-1-23 17:25:24

牡丹花下死做鬼 发表于 2014-1-23 17:08 static/image/common/back.gif
mov ax,0000
mov bx,ax
这样bx不就是0000了


这里我知道,我是不懂 jmp bx之后为什么跳到cs=1000h,ip=0000h这里,为什么不是跳到这之后的其他步骤上呢?
另一个也是关于 jmp的
监测点2.3中的题,说下面三条指令cpu几次修改ip?都在什么时候
mov ax,bx
sub ax,ax
jmp ax
前三步修改都知道,第四步jmp ax之后跳到第一行指令,运行完就结束了。我有两点不懂,
第一,jmp ax这为什么会跳到第一行指令而不是第二行呢?
第二 跳过去之后为什么只执行了一步就不继续执行了呢

牡丹花下死做鬼 发表于 2014-1-23 18:01:16

yu457001 发表于 2014-1-23 17:25 static/image/common/back.gif
这里我知道,我是不懂 jmp bx之后为什么跳到cs=1000h,ip=0000h这里,为什么不是跳到这之后的其他步骤上呢 ...

cs = 1000 啊 jmp 0 不是跳到1000:0 跳去哪??
第二个问题 题目你没说清楚撒~~

yu457001 发表于 2014-1-23 19:09:50

牡丹花下死做鬼 发表于 2014-1-23 18:01 static/image/common/back.gif
cs = 1000 啊 jmp 0 不是跳到1000:0 跳去哪??
第二个问题 题目你没说清楚撒~~

监测点2.3中的题,说下面三条指令cpu几次修改ip?都在什么时候
mov ax,bx
sub ax,ax
jmp ax

这个就是完整的题目了。

yu457001 发表于 2014-1-23 23:18:40

牡丹花下死做鬼 发表于 2014-1-23 17:08
mov ax,0000
mov bx,ax
这样bx不就是0000了


突然想起来,为什么第一个jmp跳转会成一个死循环,而第二个jmp跳过去就执行一句就停止了呢,关于这个跳转后的结果是书上说的,我看不出来到底哪一句是继续哪一句是停止

yu457001 发表于 2014-1-24 10:54:37

牡丹花下死做鬼 发表于 2014-1-23 18:01 static/image/common/back.gif
cs = 1000 啊 jmp 0 不是跳到1000:0 跳去哪??
第二个问题 题目你没说清楚撒~~

谢谢你的解答,又仔细看了一遍,明白了jmp为什么去执行ip0000了。但是为什么一个jmp跳过去执行了全部的指令成为一个死循环,而另一个跳过去执行了一步就停止了呢?能帮我说说这里吗?{:1_1:}

牡丹花下死做鬼 发表于 2014-1-24 11:25:57

yu457001 发表于 2014-1-24 10:54 static/image/common/back.gif
谢谢你的解答,又仔细看了一遍,明白了jmp为什么去执行ip0000了。但是为什么一个jmp跳过去执行了全部的指 ...

这个的话跳转到1000:0之后就会执行
mov ax,0123h
mov ax,0000
mov bx,ax
然后又是
jmp bx
又跳回去了所以是死循环 你说的另一个是什么???

yu457001 发表于 2014-1-24 13:12:42

牡丹花下死做鬼 发表于 2014-1-24 11:25 static/image/common/back.gif
这个的话跳转到1000:0之后就会执行
mov ax,0123h
mov ax,0000


另一个就是这个,为什么这个没有一直循环下去,而是跳过去执行完那一句就停止了呢
监测点2.3中的题,说下面三条指令cpu几次修改ip?都在什么时候
mov ax,bx
sub ax,ax
jmp ax

这个就是完整的题目了。

牡丹花下死做鬼 发表于 2014-1-24 13:33:02

yu457001 发表于 2014-1-24 13:12 static/image/common/back.gif
另一个就是这个,为什么这个没有一直循环下去,而是跳过去执行完那一句就停止了呢
监测点2.3中的题,说下 ...


sub ax,ax
这时候就是把ax变成0是吧
然后是跳到cs:0是吧
你自己打开debug 输入 u 0看看
第一行代码是不是 int 20
就是中断

yu457001 发表于 2014-1-24 13:46:51

牡丹花下死做鬼 发表于 2014-1-24 13:33 static/image/common/back.gif

sub ax,ax
这时候就是把ax变成0是吧


:mad:谢谢你哈,刚才搜了一下sub是无借位减法指令,昨天忘记搜了。呵呵,但是还有个问题我还没解决,今天把它解决掉。我还不知道那个汇编软件怎么样法。在汇编软件中编写的指令,会不会直接对我的电脑起作用呢?还是说汇编软件其实是个模拟环境,或者是个和真实电脑分开的容器呢?呵呵,白痴的问题,但是真的还是不明白。

牡丹花下死做鬼 发表于 2014-1-24 13:48:59

yu457001 发表于 2014-1-24 13:46 static/image/common/back.gif
谢谢你哈,刚才搜了一下sub是无借位减法指令,昨天忘记搜了。呵呵,但是还有个问题我还没解决,今天 ...

debug是虚拟的 所以没关系的 怎么样都没事的 单cmd 或 你用masn编译的就不是虚拟的了啊

lpppl 发表于 2014-2-1 23:41:47

我只是路过打酱油的。
页: [1]
查看完整版本: 关于CS,IP 和jmp