零基础入门学习汇编语言010 - 寄存器(CPU工作原理)05 的问题
本帖最后由 loop 于 2011-6-19 01:00 编辑他的
ax=0000
bx=0000
这么jmp之后会到10000
又不是到0000H那?
为什么
沙发等待中:D jmp bx
的确是0000Hjmp bx是修改IP并没修改cs所以cs还是10001000H*16+IP(0000)就等于10000
再生缘 发表于 2011-6-12 10:20 static/image/common/back.gif
jmp bx
的确是0000Hjmp bx是修改IP并没修改cs所以cs还是10001000H*16+IP(0000)就等于10000
那他为什么不修改CS 要修改IP
我学得还是重新看一下吧,你这个问题在视频里就有很好的说明 本帖最后由 再生缘 于 2011-6-12 13:13 编辑
知足、常乐 发表于 2011-6-12 10:54 http://bbs.fishc.com/static/image/common/back.gif
那他为什么不修改CS 要修改IP
你是问jmp bx为什么是修改IP的话 而不是修改CS吧
看这里
http://bbs.fishc.com/forum.php?mod=viewthread&tid=2334&extra=page%3D1
再生缘 发表于 2011-6-12 13:05 static/image/common/back.gif
你是问jmp bx为什么是修改IP的话 而不是修改CS吧
看这里
http://bbs.fishc.com/forum.php?mod=viewt ...
谢谢,明白啦 jmp可以直接修改寄存器和IP的值 既然指定的是cs:20000H ip:0000H 那么第一条指令是mov ax,6622H
第二条指令肯定是下边的Jmp 1000:3 这个是物理地址=段地址*16+偏移地址就是10003H 左边的第二个mov ax,0000 然后继续下去左边第三个指令mov bx,ax 继续下去Jmp bx 既然上一条指令时mov ax,bx (就是AX的值放进BX那就是0000H)但是前面的内容有一张我记得是jmp bx就是说CS和BX的值不发生改变 改变的是IP地址 既然都是0 那么CS的值还是20000H BX=0000HIP=0000H 那么合起来的物理地址还是20000H所以又跳到右边第一条去执行 就是一个死循环过程让你找不到出口;P 本帖最后由 再生缘 于 2011-6-12 20:19 编辑
嗜血丨灵异狂 发表于 2011-6-12 19:31 http://bbs.fishc.com/static/image/common/back.gif
jmp可以直接修改寄存器和IP的值 既然指定的是cs:20000H ip:0000H 那么第一条指令是mov ax,6622H
...
你上面说的“那么CS的值还是20000H BX=0000HIP=0000H ”这里是错的
执行到左下角最后一到指令 jmp bx ,这里是修改IP的值,CS是没变 ,但在一开始第二道指令的时候(也就是右上角第二道指令)jmp 1000:3 时,CS已经被修改为1000,所以你说的“那么cs的值还是2000”这句话是错的
jmp bx执行这个指令后cs是1000ip是0000(因为上道指令是把ax发送到bx,那么继续往上道指令看ax的值是把0000发送到ax,这样一来ip就被修改为0000 ),cs1000 ip0000得出的物理地址就是10000所以继续执行mov ax,0123H,也就是左上角第一道指令。这样无止境的循环下去!
本帖最后由 Miller01001 于 2011-6-18 19:26 编辑
jmp跳转指令啊,1000:3直接执行到段地址为10003的位置,因为段地址1000*16H+偏移地址3=物理地址嘛
比如你程序前面都加了一些加密的壳啊或者垃圾代码,如果你知道程序的真正入口,你直接用JMP跳转到程序的真正入口main函数, 这程序就你的啦!
10000H|a2
10001H|b2
10002H|
10003H|
10004H|
mov ax,a2
jmp 1000:3
下句指令执行什么呢?
总之就是jmp可以跳转到任何物理地址,其实就是修改了CS:IP的地址!
页:
[1]