监测点10.5
答案中的 IP=11 是怎么算出来的 求解同问.......... 好久没看汇编,都不熟悉,错了见谅
call前面有5个赋值语句
每个占2字节(00 00);
call占2字节
偏移地址=5*2+2=12
起始地址=0 ;也就是从0开始数12个数
ip=11 血月 发表于 2014-11-1 09:41
好久没看汇编,都不熟悉,错了见谅
我知道了 但是 执行call指令后就跳到栈段货或DS段了,,为什么答案是3呢? 我 知道 为什么了在执行call的时候 就几经自动把IP加了此时的IP指向 INC AX用U指令查看 也就是11,
上面 几经吧 DS和SS指向了同一个 地方,执行CALL 前会PUSH ip 在 JMP S的。(不懂翻书,懒得打字),几经吧11压入栈中了,但是DS和SS指向同一地方,就算是共享吧,(语言表达能力不强),之后就跳了 结果就跳到11这里 也就是 INC AX 就是 ~~~~~~~ax=3 了 对
原栈顶=16
压入cs ip就变成14了; 我认为这个不是11,应该是ip=13。
B8670B mov ax,stack ip=0000
8ED0 mov ss,ax ip=0003
BC1600 mov sp,16 ip=0005
8ED8 mov ds,ax ip=0008
B80000 mov ax,0000 ip=000A
call时IP = 000A+3 =000D.
所以我认为IP=000D.
流行语 发表于 2014-11-1 10:48
我认为这个不是11,应该是ip=13。
B8670B mov ax,stack ip=0000
8ED0 mov ss,ax ip ...
-u
0C50:0000 B84F0C MOV AX,0C4F
0C50:0003 8ED0 MOV SS,AX
0C50:0005 BC1000 MOV SP,0010
0C50:0008 8ED8 MOV DS,AX
0C50:000A B80000 MOV AX,0000
0C50:000D FF160E00 CALL
0C50:0011 40 INC AX
0C50:0012 40 INC AX
0C50:0013 40 INC AX
0C50:0014 B8004C MOV AX,4C00
0C50:0017 CD21 INT 21
这是答案直接复制过来的 ,执行call时此时ip就自动加了啊。就是把0011 压入栈了,之后执行指令缓存器中的内容了我也说 不清 大概就是这个道理 就是执行CALL 时 下一句的IP就*****了。 所以IP就是 11了 。
Ъγ:_小ツ雨oο 发表于 2014-11-1 11:10
这是答案直接复制过来的 ,执行call时此时ip就自动加了啊。就是把0011 压入栈了,之后执行指令缓存器中 ...
你复制过来的汇编指令ip也是13啊,我而且也看内存了,确实是把13压进堆栈中了,不是11. 流行语 发表于 2014-11-1 11:54
你复制过来的汇编指令ip也是13啊,我而且也看内存了,确实是把13压进堆栈中了,不是11.
大哥 此题要求的 是 AX的值。 不要纠结IP~~~ 楼主可不可以把监测点的链接已经王爽的PDF发给我 好难 按语句的字节算啊 3+2+2+2+2+3=14,因为从零开始,所以为 ip为0eH=13,即跳到cs:13处执行AX三次自增,完成程序 支持一个哦 本帖最后由 god圣锋 于 2018-8-8 08:52 编辑
嘻嘻么看题号 路过学习 执行到call word ptr ds:
因为下一条指令的IP为 0011H,然后push ip,所以入栈0011H在栈底即栈段ss:sp=ss:000e中的内容为0011H
又因为栈段与数据段为同一段所以数据段的ds:中的内容也为0011H
所以jmp到的地址为ds:中的内容 0011H即cs:
然后执行三次 inc ax,得到ax=3
页:
[1]