知足、常乐 发表于 2011-6-12 10:01:36

零基础入门学习汇编语言010 - 寄存器(CPU工作原理)05 的问题

本帖最后由 loop 于 2011-6-19 01:00 编辑


他的

ax=0000

bx=0000

这么jmp之后会到10000

又不是到0000H那?

为什么

知足、常乐 发表于 2011-6-12 10:02:07

沙发等待中:D

再生缘 发表于 2011-6-12 10:20:58

jmp bx
的确是0000Hjmp bx是修改IP并没修改cs所以cs还是10001000H*16+IP(0000)就等于10000

知足、常乐 发表于 2011-6-12 10:54:49

再生缘 发表于 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 11:56:44

我学得还是重新看一下吧,你这个问题在视频里就有很好的说明

再生缘 发表于 2011-6-12 13:05:29

本帖最后由 再生缘 于 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 19:05:26

再生缘 发表于 2011-6-12 13:05 static/image/common/back.gif
你是问jmp bx为什么是修改IP的话 而不是修改CS吧
看这里
http://bbs.fishc.com/forum.php?mod=viewt ...

谢谢,明白啦

嗜血丨灵异狂 发表于 2011-6-12 19:31:01

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:08:37

本帖最后由 再生缘 于 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:00

本帖最后由 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]
查看完整版本: 零基础入门学习汇编语言010 - 寄存器(CPU工作原理)05 的问题