实验结论
1. 综合使用 loop,[bx],编写完整汇编程序,实现向内存 b800:07b8 开始的连续 16 个 字单元重复填充字数据0403H
代码如下
对其进行编译链接
运行这个程序,结果如下图
将源代码程序中字数据0403H→修改为0441H
对其进行编译链接后,结果如下
2. 综合使用 loop,[bx],编写完整汇编源程序,实现向内存 0:200~0:23F 依次传送数据 0~63(3FH)
代码为:
对其进行编译连接
运行这个程序,先查看0:200开始的64个内存里初始值,以做比较
用t命令单步执行
(部分截图)
用g命令运行
最后再用d命令查看内存单元,以检验
(3)下面的程序功能是将“mov ax,4c00h"之前的指令复制到内存0:200处,补全程序。上机调试,跟踪运行结果。
assume cs:code
code segment
mov ax, 1 ;
mov ds,ax
mov ax,0020h
mov es,ax
mov bx,0
mov cx, 2 ;
s: mov al,[bx]
mov es:[bx],al
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end
1答案为:cs(该程序目的是复制“mov ax,4c00h"之前的指令,数据段要与代码段相同,所以应该将cs赋值给ax)
2答案为:17h(各指令所占字节之和为23,所以复制的代码段长度为17h)
运行该程序,并对其u命令反汇编为
使用g命令将其执行,并查看0:200开始内存单元的内容
最后用u命令反汇编从0:200开始的内存单元,从图中可见,程序已复制成功
总结与体会
1)在书写源代码时,注意十六进制的h,漏加多加会导致编译出错
2)注意loop中设置cx的次数
3)cx在载入程序后会保留程序的长度
3)数据和代码对CPU来说是没有去别的,只要CS:IP指向的就是代码