四.实验结论
实验一:
综合使用 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 [bx],0403h add bx,2 loop s mov ax,4c00h int 21h code ends end
运行得到的结果:
是16个红色的爱心。
实验二
综合使用 loop,[bx],编写完整汇编源程序,实现向内存 0:200~0:23F 依次传送数据0~63(3FH)。
assume cs:code code segment mov ax,00020h mov ds,ax mov bx,0 mov cx,64 s: mov [bx],bx inc bx loop s mov ax,4c00h int 21h code ends end
利用debug进行调试,看是否符合题目要求:
用g命令先直接执行到loop语句,再单步执行,最后程序正常退出。
用d命令可观察到已存入。
实验三
程序源代码如下:
assume cs:code code segment mov ax,cs mov ds,ax mov ax,0020h mov es,ax mov bx,0 mov cx,17h s: mov al,[bx] mov es:[bx],al inc bx loop s mov ax,4c00h int 21h code ends end
在算循环次数的时候要用cx的值减去mov ax,4c00h和int 21h的所占的字节长度。
如图所示cx值为001c,而mov ax,4c00h和int 21h总共占5个字节。所以循环次数应为17h。
五.总结与思考
了解了bx以及loop的使用,并会在编译执行之后使用debug进行调试和查看。利用debug的逐步调试发现新的问题,并且在其中解决困惑。
需要注意的是循环次数的确定以及偏移地址的计算。