检测点10.5(2)

 题目:下面的程序执行后,ax和bx的值是多少?

解答:设s标号处的ip值为x,则call dword ptr ss:[0]后的nop指令对应的ip值则为x-1。

mov word ptr ss:[0],offset s后ss:[0]的值为x,mov ss:[2],ss:[2]的值就是cs的值(假设为y)。那执行call dword ptr ss:[0]指令相当于以下操作:push cs,push ip,jmp dword ptr ss:[0]。即把cs先入栈,即ss:[0eh]字单元存放的是cs的值,即y。接着把ip的值即(x-1)入栈,存放在ss:[0ch]字单元处。然后是执行jmp dword ptr ss:[0] ,这条指令是把ss:[2]字单元的值赋值给cs,把ss:[0]字单元的值赋值给ip,所以这里cs=y,ip=x。故接下来程序跳转到s处继续执行。

      mov ax,offset s这里offset s的值是从程序开始到s处的地址之差,也就是x了。这里一定要和转移时的偏移量区分开。

      sub ax,ss:[0ch]是用ax的值减去ss:[och]字单元的值(x-1),因为ax的值是x,所以执行完这条指令后ax=0001。

      mov bx,cx就是把cs的值个bx。所以这里bx=y

      sub bx,ss:[0eh]是把bx的值减去ss:[0eh]的值(y)。所以执行完这条指令之后bx的值为0

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值