实验四
1.使用loop和[bx],实现向内存 b800:07b8 开始的连续 16 个字单元重复填充字数据 0403assume cs:code
code segment mov ax,0b800h mov ds,ax mov bx,07b8h mov cx,16 s: mov [bx],0403h inc bx
inc bx
loop s mov ax,4c00h int 21h code ends end
2. 综合使用 loop,[bx],编写完整汇编源程序,实现向内存 0:200~0:23F 依次传送数据0~63(3FH)。
assume cs:code code segment mov ax, 0 mov ds, ax mov bx, 200h mov cx, 64 s: mov [bx], ax inc ax inc bx loop s mov ax, 4c00h int 21h
code ends end
![]()
3.下面的程序的功能是将“mov ax,4c00h“之前的指令复制到哦内存0:200处,补全程序。上机调试,跟踪运行结果.
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
1.要复制代码的话从cs开始复制,所以吧cs给ds
2.一开始不太确定第二个空的长度,先反汇编一下
这里遇到了一个小问题,debug 53显示了Extended error 2
原因是没有加.exe,这样会导致反汇编错误,虽然前面没有加后缀名,但是这里要加嗷,所以建议还是都加后缀名比较好
修改了之后,就可以了。
发现mov ax,4c00h在0017这里。所以第二个空就是17h。
之后的就不用多说了嗷,g命令直接运行之后,用d命令看0000:0200,发现已经是机器码了。
实验总结:
对于bx+1用add bx,2会报错,所以要用inc bx
加深了各种操作的理解。