实验四:【bx】和loop的使用
实验1. 综合使用 loop,[bx],编写完整汇编程序,实现向内存 b800:07b8 开始的连续 16 个 字单元重复填充字数据 0403H。
1.源代码
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
进入环境编译
然后保存文件
2.masm编译 link链接 最后直接执行,得到实验结果截图
将源代码程序中字数据 0403H→修改为 0441H,再次运行,截图显示运行结果:
实验二
1.源代码
assume cs:code
code segment
mov ax,0020h
mov ds,ax
mov bx,0
mov ax,0
mov cx,64
s: mov [bx],al
add bx,1
add al,1
loop s
mov ax,4c00h
int 21h
code ends
end
2.汇编、链接无误后,灵活使用 debug 的 t 命令、g 命令、p 命令调试,用 d 命令 查看 0:200~0:23F,确认是否将 0~63 传送至此段内存区域
实验三
1.源代码
assume cs:code
code segment
mov ax,cs mov ds,ax
mov ax,0020h
mov es,ax
mov bx,0
mov cx,0
s: mov al,[bx]
mov es:[bx],al
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end
这段代码实际上是将[bx]中的数据传入到0:200处,ds中存放的是cs的值,所以将ds赋值为cs。
cx的值是loop循环的次数,在执行本实验时,指令的复制实际上是向内存单元写入数据,而程序段的长度决定了循环写入的次数,所以cx的值为程序段的长度。
2.用r命令查看一开始cx的值,再用u命令反汇编
3.修改cx的值为0017h: