汇编语言检测点10.5

汇编语言检测点10.5


建议先自己思考问题的答案,不懂则返回看书

1、下面的程序执行后,AX的值为 3
解析: 关键是对call word ptr ds:[0EH]的执行分析, 关键 ds:[0EH]就是push进去的IP的位置
执行 call word ptr ds:[0EH] 的过程:

  1. CPU取该指令 : (call word ptr ds:[0EH])
  2. ip自增,指向了下一条指令 (inc ax)
  3. 开始执行 call word ptr ds:[0EH] 指令。 push ip ; 将 ip 压入栈, jmp ds:[0EH] ,即程序从 ds:[0EH] 中取出数据赋值给 ip
    所以ds:[0EH]就是刚才push进去的IP的位置
  4. 执行三个 inc ax
  5. 因此最终 ax 值为 3
assume cs:code,ss:stack
stack segment
    dw 8 dup(0)
stack ends
code segment
    start:
        mov ax, stack
        mov ss, ax
        mov sp, 0010H
        mov ds, ax		;ds与ss值相同,指向同一段内存空间
        call word ptr ds:[0EH]
        inc ax
        inc ax
        inc ax
code ends
end start

2、下面的程序执行后,AX的值为 1,BX中的值为 0

assume cs:code,ds:data
data segment
    dw 8 dup(0)
data ends
code segment
    start:
        mov ax, data
        mov ss, ax
        mov sp, 16
        mov word ptr ss:[0], offset second
        mov ss:[2], cs
        call dword ptr ss:[0]
        nop
    second:
        mov ax, offset second
        sub ax, ss:[0CH]
        mov bx, cs
        sub bx, ss:[0EH]
code ends
end start

解析: 打字太麻烦,直接看笔记截图。关键是nop占一个字节,CS值没有改变。
在这里插入图片描述

  • 31
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值