实验一 综合使用 loop,[bx],编写完整汇编程序,实现向内存 b800:07b8 开始的连续 16 个字单元重复填充字数据 0403H。
代码实现
assume cs:code
code segment
mov ax,0b800h
mov ds,ax
mov bx,07b8h
mov cx,16
s: mov ax,0403h
mov [bx],al
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end
编译连接运行结果
0403h-->0401h,图形颜色不变,改变了形状。
改为0402h
改变了是否填充,具体原因在我的实验三博客中详细解释过
实验二 综合使用 loop,[bx],编写完整汇编源程序,实现向内存 0:200~0:23F 依次传送数据
0~63(3FH)。
源码
编译连接无错误
-p命令调试
d命令查看(200-23f已成功修改)
实验三
assume cs:code
code segment
mov ax,cs ;cs是指向程序代码段的地址
mov ds,ax ;赋给代码段地址
mov ax,0020h
mov es,ax ;20h赋拓展段地址
mov bx,0
mov cx,0;不确定占了多少字节,先把cx赋值为0;
s: mov al,[bx]
mov es:[bx],al
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end
由于不确定指令占用多少字节,现在将 cx 的值设为 0 并编译、连接,然后使用 debug 中的 u 命令反汇编,查看指令占用了17h内存,如下图所示:
由此可知,循环了17次,因此 第8 行的空格填 17h,并将 cx 的值设置为 17h,重新编译、连接和反汇编,如图
-g命令调试运行,-d查看
由机器码可知已把mov ax, 4c00h
之前的指令复制到指定内存。
小结
程序中所有数据不能以字母开头,如果是字母开头的 16 进制数,需要在前面补 0。
makrkdown真好用,写博客必备
多实验,学会查资料是好习惯