博客园
虽然痛苦,却依旧要快乐,并相信着未来。

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
统计
 

练习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
View Code
复制代码

  注意黄色区域,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
View Code
复制代码

  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
View Code
复制代码

此处的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
View Code
复制代码

  

  

  

和下面的图对比一下,是一摸一样的,说明该程序段起到了它该有的作用。

  

实验总结与体会:

  第一个实验:在8086PC芯片中,0~9FFFF是主要存储地址空间(RAM),A0000~BFFFF是显存地址空间,C0000~FFFFF是各类ROM地址空间。且在十六进制数前,如果是字母开头,一定要加区分符0区分。

  第二个实验:在8086进栈中,是从高地址单元到低地址单元,而且只能以字单元进行压栈,弹栈。

  第三个实验:代码段和数据并没有差别,只是在于你怎么读取,理解。CS:IP指向的数据,就是代码,DS:[bx]指向的就是数据。

posted on   砖猿  阅读(252)  评论(4编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
 
点击右上角即可分享
微信分享提示