检测点10.4问题
题目:下面的程序执行后,ax中的数据是多少?view plaincopy
[*]内存地址 机器码 汇编指令
[*] 1000:0 b8 00 00 mov ax,0
[*] 1000:2 ff d0 call ax
[*] 1000:5 40 inc ax
[*]
[*] 1000:6 58 mov bp,sp
[*] add ax,
[*]怎么知道SP的值 的
同问,好心人给讲讲:handshake call ax ;这句为段内间接调用,其中ax是相对于当前代码段的偏移量,即6
;也就是说call ax 这句实际上是调用1000:6处的代码。但是cpu在执行1000:6处的代码之前会先将ip(下一条指令的偏移量,也就是5)入栈,以便能在call返回时找到执行call之前将要执行的下一条指令(即inc ax),然后再将6赋给ip(不过这点对此题没有影响)。
做完这些后,cpu开始执行1000:6处代码
mov bp,sp;栈顶指针保存至bp
add ax,;这句是将栈顶的数据与ax中的值相加然后放到ax中,由于整
个过程中只有在call 之前将 ip入栈,所以此时应该为5,ax最后为11 zhangleitj 发表于 2014-10-30 11:12
call ax ;这句为段内间接调用,其中ax是相对于当前代码段的偏移量,即6
;也就是说call ax 这句实际上是 ...
add ax,这句不应该是将ds:处的值与ax相加吗,为什么是ss:处的值? lqjstc 发表于 2014-11-9 16:53
add ax,这句不应该是将ds:处的值与ax相加吗,为什么是ss:处的值?
这个在百度上搜一下就知道了
页:
[1]