1. 实验任务1
使用任意一款文本编辑器,编写8086汇编源程序ex1.asm。
1 assume cs:code 2 code segment 3 mov ax, 0b810h 4 mov ds, ax 5 mov byte ptr ds:[0], 1 6 mov byte ptr ds:[1], 1 7 mov byte ptr ds:[2], 2 8 mov byte ptr ds:[3], 2 9 mov byte ptr ds:[4], 3 10 mov byte ptr ds:[5], 3 11 mov byte ptr ds:[6], 4 12 mov byte ptr ds:[7], 4 13 mov ah, 4ch 14 int 21h 15 code ends
使用masm、link对ex1.asm进行汇编、链接,得到可执行文件ex1.exe,运行并观察结果。 

 
使用debug工具对程序进行调试使用debug加载可执行文件ex1.exe后,使用d命令查看程序段前缀PSP所占的256个字节。
 
结合可执行文件中寄存器CX的值,使用u命令对ex1.exe进行精确反汇编使用g命令执行到程序退出执行之前(即源码文件中line16之前),观察结果。
 
 
 
2. 实验任务2
使用任意一款文本编辑器,编写8086汇编源程序ex2.asm。
1 assume cs:code 2 code segment 3 mov ax, 0b810h 4 mov ds, ax 5 mov bx, 0 6 mov ax, 101H 7 mov cx, 4 8 s: mov [bx], ax 9 add bx, 2 10 add ax, 101H 11 loop s 12 mov ah, 4ch 13 int 21h 14 code ends 15 end



 
把ex2.asm中line9mov cx, 4改成mov cx, 8,保存后重新汇编、链接、运行并观察结果。

 
在debug模式下,由于单步调试上滚所以显存刷新没有被显示出来。退出之后执行程序。

改变的cx寄存器改变了循环的次数,第一次循环4次,改变后循环八次。增加了写进显存的数据
两个实验实现的是相同的功能和效果。但在具体是实现上实验一是直接写入,而实验二使用了loop循环的方式,简化了重复代码。
3. 实验任务3
1 assume cs:code 2 code segment 3 mov ax,0b800h 4 mov ds,ax 5 mov bx,07b8h 6 mov cx, 10h 7 s: mov [bx],0237h 8 add bx,2 9 loop s 10 mov ah,4ch 11 int 21h 12 code ends 13 end
在汇编,链接之后,运行:



猜测低位字节存放的的是显示的文字内容,高位字节存放的是字体格式颜色等附加的信息。
4. 实验任务4
1 assume cs:code 2 code segment 3 mov ax,0h 4 mov ds,ax 5 mov bx,200h 6 mov cx,40h 7 s: mov ds:[bx],bl 8 inc bx 9 loop s 10 mov ah,4ch 11 int 21h 12 code ends 13 end
进行汇编,链接

使用debug命令之后反汇编
 
使用g命令调试,使用d命令查看0:200~23F是否准确传送数据:

1 assume cs:code 2 code segment 3 mov ax,20h 4 mov ss,ax 5 mov sp,40h 6 mov bh,3fh 7 mov bl,3eh 8 mov cx,20h 9 s:push bx 10 sub bh,2 11 sub bl,2 12 loop s 13 mov ah,4ch 14 int 21h 15 code ends 16 end
编写程序结束,进行汇编链接调试

 
查看内存写入数据是否正确:
 
5. 实验任务5
教材实验4(3)(P121)
将mov ax,4c00h之前的指令复制到内存0:200处,补全程序。
1 assume cs:code 2 code segment 3 mov ax,cs 4 mov ds,ax 5 mov ax,20h 6 mov es,ax 7 mov bx,0 8 mov cx,17 9 s: mov al,[bx] 10 mov es:[bx],al 11 inc bx 12 loop s 13 mov ax,4c00h 14 int 21h 15 code ends 16 end

根据mov ah,4ch之前的偏移量是17, 说面前面的指令长度是17-0=17,可知代码中应该填17。复制的循环次数17。

和上图对比,发现对于内存中存储的数据反汇编后得到和代码反汇编的结果一样,证明复制成功!
五、实验总结
本次实验了解并且可以熟练操作对于程序的编译连接调试,可以灵活的运用debug调试功能。单步调试t命令是详细的,单步调试p命令是不进入子程序,g命令可以多步调试。在程序中,如果代码有大段重复的可以考虑使用loop循环来简化代码,cx寄存器中存储的是循环的次数,每循环一次,cx减一。
原文:https://www.cnblogs.com/zzzzero/p/13929378.html