实验2 汇编源程序编写与汇编、调试
1.实验任务1
使用任意一款文本编辑器,编写8086汇编源程序ex1.asm。源代码如下:
assume cs:code code segment mov ax,0b810h mov ds,ax mov byte ptr ds:[0],1 mov byte ptr ds:[1],1 mov byte ptr ds:[2],2 mov byte ptr ds:[3],2 mov byte ptr ds:[4],3 mov byte ptr ds:[5],3 mov byte ptr ds:[6],4 mov byte ptr ds:[7],4 mov ah,4ch int 21h code ends end
使用masm、link工具汇编、链接的命令行:

使用d命令查看程序段前缀PSP所占的256个字节:
使用u命令对ex1.exe进行精确反汇编:

使用g命令执行到程序退出执行之前(即源码文件中line16之前):

2.实验任务2
使用任意一款文本编辑器,编写8086汇编源程序ex2.asm。源代码如下:
assume cs:code code segment mov ax,0b810h mov ds,ax mov bx,0 mov ax,101H mov cx,4 s: mov [bx],ax add bx,2 add ax,101H loop s mov ah,4ch int 21h code ends end
使用masm、link对ex2.asm进行汇编、链接,得到可执行文件ex2.exe:

结合可执行文件中寄存器CX的值,使用u命令对ex2.exe进行精确反汇编:

灵活使用t命令、p命令、g命令,对ex2.exe进行调试:


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


结论:ex2.asm和ex1.asm实现功能和效果相同,都是实现了累加,不同在于ex2.asm使用了loop循环而ex1.asm一条条执行
3.实验任务3
综合使用loop,[bx],编写完整汇编程序,实现向内存b800:07b8开始的连续16个字单元重复填充字数据0237H。
ex3.asm源程序:
assume cs:code code segment mov ax,0b810h mov ds,ax mov bx,07b8h mov cx,16 s: mov [bx],0437h add bx,2h loop s mov ax,4c00h int 21h code ends end
运行结果:

把填充的字数据,从0237H 改成0239H,再次保存后,汇编、链接、运行,观察结果:

把填充的字数据,从0237H 改成0437H,再次保存后,汇编、链接、运行,观察结果:

猜测:高位存放颜色信息,低位存放符号信息
4.实验任务4
编写完整汇编源程序,实现向内存0:200~0:23F依次传送数据0~63(3FH)。
ex4.asm源程序:
assume cs:code code segment mov ax,0 mov ds,ax mov cx,64 mov dl,0 s: mov [bx],dl inc dl inc bx loop s mov ax,4c00h int 21h code ends end
汇编、链接无误后,灵活使用debug的t命令、g命令、p命令调试,用d命令查看0:200~0:23F,确认是否将0~63传送至此段内存区域:

5.实验任务5
assume cs:code code segment mov ax,0 mov ds,ax mov bx,200h mov cx,64 mov dl,0 s: mov [bx],dl inc dl inc bx loop s mov ax,4c00h int 21h code ends end
首先第一空填cs/code,获得程序段地址,第二空先任意填,然后编译程序,查看得知程序长度cx=1c,减去程序返回指令字节数得到cx=17h,因此第二空填17h
实验总结:
在进行汇编、连接、运行时可以简化;
使用g命令+地址可以直接跳到要执行的命令处;
使用p命令执行循环或执行最后一条命令并退出。

浙公网安备 33010602011771号