汇编语言 王爽 第四版 第三章 检测点3.1

本文详细介绍了在DEBUG环境下查看内存数据的过程,并通过一系列汇编指令展示了AX、BX寄存器的值变化。在特定内存布局下,CPU执行指令序列,改变了CS、IP、DS、AX和BX寄存器的值,探讨了数据和程序的区分以及如何识别内存中的数据和程序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

汇编语言 王爽 第四版 课后检测点 课后实验 持续更新~~

检测点3.1

1

在DEBUG中,用 d 0:0 lf查看内存,结果如下:

0000:0000 70 80 F0 30 EF 60 30 E2-00 80 80 12 66 20 22 60 
0000:0010 62 26 E6 D6 CC 2E 3C 3B-AB BA 00 00 26 06 66 88 

下面的程序执行前,AX=0,BX=0,写出每条汇编指令执行完后相关寄存器中的值

指令 结果
mov ax,1
mov ds,ax
mov ax,[0000] ax= 2662H
mov bx,[0001] bx= E626H
mov ax,bx ax= E626H
mov ax,[0000] ax= 2662H
mov bx,[0002] bx= D6E6H
add ax,bx ax= FD48H
add ax,[0004] ax= 2C14H
mov ax,0 ax=0000H
mov a
### 关于汇编语言第四版检测点2的内容解答 #### 修改中断处理程序安装过程以防止潜在问题 在设置新的 `INT 9` 中断向量时,存在一个时间窗口,在此期间如果发生键盘中断将会导致 CPU 跳转到错误位置执行代码。为了避免这种情况的发生,应当使用 `CLI`(清除中断标志) 和 `STI`(设定中断标志) 指令来保护这段关键区域。 修改后的代码如下所示: ```assembly cli ; 清除IF位,阻止外部硬件中断请求被响应 mov word ptr es:[9*4], offset int9 ; 设置新中断例程入口地址低字(偏移) mov word ptr es:[9*4+2], cs ; 设置新中断例程入口地址高字(段址) sti ; 设定IF位,允许接收外部硬件中断请求 ``` 上述改动确保了当更新中断向量表项时不会受到意外中断的影响[^1]。 对于另一个涉及堆栈操作的程序片段,其目的是利用堆栈机制将特定内存范围内的数据复制到另一处。为了完成这一目标并遵循题目给定条件,空白部分应填写为: ```assembly assume cs:codesg codesg segment dw 0123H,0456H,0789H,0abcH,0defH,0fedH,0cbaH,0987H dw 0,0,0,0,0,0,0,0,0,0 start: mov ax,cs ; 将当前代码段寄存器CS值传送给AX mov ss,ax ; 把AX里的值赋给SS作为新的栈底所在段基址 mov sp,36 ; SP指向栈顶偏移地址,即从0:36开始算起 mov ax,0 ; AX清零准备访问绝对地址0:0的数据源 mov ds,ax ; DS设成0以便通过BX间接寻址方式读取指定单元内容 mov bx,0 ; BX初始化为0用于循环计数及索引目的 mov cx,8 ; CX加载次数计数值8次 s: push [bx] ; 取出由DS:BX指示的位置上的双字压入堆栈顶部 pop cs:[bx] ; 弹出刚才压进去的那个值覆盖掉原位置上旧有的东西 add bx,2 ; 更新BX指向下一对待处理的目标存储单元 loop s ; 循环直到CX减至0为止 mov ax,4c00h ; DOS功能调用号置入AX表示正常退出应用程序 int 21h ; 发送软中断信号触发DOS服务例程工作 codesg ends end start ; 定义结束标签表明整个模块定义完毕 ``` 这里的关键在于正确配置好堆栈环境以及合理运用 `PUSH`/`POP` 对指令配合实现所需的数据传输逻辑[^2]。
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值