<汇编语言> 3. 寄存器(内存) | 检测点 & 问题
检测点 3.1
(1)在Debug中,用“d 0:0 1f”查看内存,结果如下。
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,写出每条汇编指令执行完后相关寄存器中的值。
检测点 3.2
(1)补全下面的程序,使其可以将10000H1000FH中的8个字,逆序复制到20000H2000FH中。逆 序复制的含义如图3.17(P70)所示(图中内存里的数据均为假设)。
mov ax, 1000H
mov dx, ax
// 栈段为 1000:00H ~ 1000:0FH
_push ax,1000H__
_PUSH ss,ax_____
// 栈顶指针为 0FH + 1 = 10H
_push sp,0010H__
push [0]
push [2]
push [4]
push [6]
push [8]
push [A]
push [C]
push [E]
(2)补全下面的程序,使其可以将10000H1000FH中的8个字,逆序复制到20000H2000FH中。
mov ax, 2000H
mov ds, ax
// 栈段为 栈段为 1000:00H ~ 1000:0FH
_push ax,1000H_
_push ss,ax____
// 栈底为 0000H
_push sp,0000H_
pop [E]
pop [C]
pop [A]
pop [8]
pop [6]
pop [4]
pop [2]
pop [0]
问题 3.7
编程, 将 10000H ~ 1000FH 做为栈,初始状态是空的,将AX,BX,DS 中的数据入栈。
# 初始化SS, SP ss=1000H [sp]=[0010] , 则 [ssss:sp] = [1000H:0010H]
mov ax,1000
mov ss,ax
# sp是指针,不是段寄存器,可以直接传数据,不用ax中转
mov sp,0010
push ax
push bx
push ds
问题 3.8
编程:
将 10000H ~ 1000FH 当做栈, 初始状态栈是空的
设置 ax=001aH, bx=001bH
ax,bx 数据入栈
ax,bx 清零
从栈中恢复 ax,bx 的值
mov ax,1000H
mov ss,ax
mov sp,0010H
mov ax,001a
mov bx,001b
push ax
push bx
# 将 ax 清零也可以用 sub ax,ax 机器码为 两个字节, mov ax,0 机器码为 3个字节
mov ax,0
mov bx,0
# 先进后出,先出栈的是 bx, 后出栈的是 ax
pop bx
pop ax
问题 3.9
编程
将 10000H ~ 1000FH 存储空间当作栈,初始为空
设置 AX=002AH, BX=002BH
利用栈,交换 AX,BX中的数据
mov ax,1000H
mov ss,ax
mov sp,0010H
mov ax,002a
mov bx,002b
push ax
push bx
pop ax
pop bx
问题 3.10
如果要在 10000H 处 写入字型数据 2266H, 可以用下的代码
mov ax,1000H
mov ds,ax
mov ax,2266H
mov [0],ax
补全下面的代码,使它完成同样的功能,在 10000H处写入字型数据 2266H. 要求不使用 "mov 内存单元,寄存器" 的指令
mov ax,1000H
mov ds,ax
mov sp,0002H
mov ax,2266H
# 使用栈,SP-1 [1000:1]->22H SP-1 [1000:0]->66H , SP最终为 0000H
push ax
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步