练习1:
综合使用 loop,[bx],编写完整汇编程序,实现向内存 b800:07b8 开始的连续 16 个 字单元重复填充字数据0403H。

1 assume cs:code
2 code segment
3 mov ax,0b800H
4 mov ds,ax
5 mov bx,07b8H
6 mov cx,16
7
8 a: mov [bx],0441H
9 inc bx
10 inc bx
11 loop a
12
13 mov ax,4c00H
14 int 21H
15 code ends
16 end
注意黄色区域,0b800H,中第一个0不能少。按规定以字母开始的十六进制数,应在其前面加上数字0以便汇编程序区分常数和符号。所以第一个零不能少,它只起区分作用。
cx=10H也可以写成十进制的cx=16.
将源代码程序中字数据0403H→修改为0441H,再次运行,截图显示运行结果。
练习2:
综合使用 loop,[bx],编写完整汇编源程序,实现向内存 0:200~0:23F 依次传送数据 0~63(3FH)。
(1)必做:综合使用loop, [bx], mov实现

1 assume cs:code
2 code segment
3 mov ax,0H
4 mov ds,ax
5 mov bx,0200H
6 mov cx,40H
7
8 z: mov [bx],al
9 inc al
10 inc bx
11 loop z
12
13 mov ax,4c00H
14 int 21H
15 code ends
16 end
debug 4_2.exe
用g命令执行到
(2)选做*:利用栈的特性,综合使用 loop,push 实现(限定仅使用 8086 中已学过 指令实现)

1 assume cs:code
2 code segment
3 mov ax,0
4 mov ss,ax
5 mov ax,3F3EH
6 mov sp,240H
7 mov cx,20H
8 a: push ax
9 add ax,-0202H
10 loop a
11 mov ax,4C00H
12 int 21H
13 code ends
14 end
此处的add ax,-2020H 也可以改成sub ax,0202H,效果是一样的。
练习3. 教材实验4(3)(P121)

1 assume cs:code
2 code segment
3 mov ax,cs
4 mov ds,ax
5 mov ax,0020h
6 mov es,ax
7 mov bx,0
8 mov cx,17h
9 s: mov al,[bx]
10 mov es:[bx],al
11 inc bx
12 loop s
13 mov ax,4c00h
14 int 21h
15 code ends
16 end
和下面的图对比一下,是一摸一样的,说明该程序段起到了它该有的作用。
实验总结与体会:
第一个实验:在8086PC芯片中,0~9FFFF是主要存储地址空间(RAM),A0000~BFFFF是显存地址空间,C0000~FFFFF是各类ROM地址空间。且在十六进制数前,如果是字母开头,一定要加区分符0区分。
第二个实验:在8086进栈中,是从高地址单元到低地址单元,而且只能以字单元进行压栈,弹栈。
第三个实验:代码段和数据并没有差别,只是在于你怎么读取,理解。CS:IP指向的数据,就是代码,DS:[bx]指向的就是数据。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现