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

本文详细解析了如何使用汇编语言在10000H-1000FH和20000H-2000FH之间逆序拷贝8个字节的数据,涉及DS和SS段寄存器设置,栈空间管理以及指令推入和弹出操作。

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

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

检测点3.2

1

补全下面的程序,使其可以将10000H-1000FH中的8个字,逆序拷贝到20000H-2000FH中。

mov ax,1000H
mov ds,ax

mov ax,2000H 
mov ss,ax    
mov sp,10h   

push [0]
push [2]
push [4]
push [6]
push [8]
push [A]
push [C]
push [E]


我们可以看到给出了ds段寄存器的值,那么后面是push,所以我们应该将20000H2000FH设置成栈空间,所以那三行就是用来设置栈空间,设置sssp寄存器的值的

即:
mov ax,2000H
mov ss,ax
mov sp,0010H

因为栈如果有一个元素,那么栈顶是2000EH,所以,2000EH+2就是20010H,去掉ss就是0010H

不懂的可以看看问题3.11,不过不完全一样

2

补全下面的程序,使其可以将10000H-1000FH中的8个字,逆序复制到20000H-2000FH中。

mov ax,2000H
mov ds,ax

mov ax,1000H
mov ss,ax   
mov sp,0    

pop [E]
pop [C]
pop [A]
pop [8]
pop [6]
pop [4]
pop [2]
pop [0]


同上,我们要设置ss和sp的值

mov ax,1000H
mov ss,ax
mov sp,0000H(因为栈满在0000H处)

### 关于汇编语言第四版检测点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]。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值