实验2 汇编源程序编写与汇编、调试
四、实验结论
1. 实验任务1
使用任意一款文本编辑器,编写8086汇编源程序ex1.asm。源代码如下:
;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
进入edit:

使用masm、link工具汇编、链接的命令行及运行结果:

link:对生成的目标文件ex1.obj进行和库的连接,生成可执行文件

使用debug调试:

CX的值为0031H,使用u命令反汇编:

使用g命令执行到line16:

执行到结尾:

过程中,有生成图像:

2. 实验任务2
使用任意一款文本编辑器,编写8086汇编源程序ex2.asm。源代码如下:
;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
edit模式中:

使用masm、link工具汇编、链接的命令行及运行结果:


使用debug调试,CX的值为001CH,使用u命令反汇编:

使用t命令单步执行,直到loop时用p命令:



执行程序后可以看见右上角图片:

当将程序中mov cx,4改为 mov cx, 8 ,保存后重新汇编、链接、运行,可以看见右上角图片发生改变:

Q:ex2.asm和ex1.asm,它们实现的是否是相同的功能和效果?在具体实现上有什么不同?
A:可以得出它们所实现的功能和效果是相同的,都完成了图案的输出。
具体实现上,ex1.asm使用了byte ptr的形式直接填入了8个数,而ex2.asm使用了loop循环将值在相同的内存地址中存入数据。
3. 实验任务3
要求:
;ex2.asm assume cs:code code segment mov ax, 0b800h mov ds, ax mov bx, 07b8h mov ax, 0237H mov cx, 10h s: mov [bx], ax add bx, 2 loop s mov ah, 4c00h int 21h code ends end
运行结果:

更改一:填充字数据0239H:

运行结果:

更改二:填充字数据0437H:

运行结果:

得出猜想:高位字节里存放的是颜色信息,低位字节里存放的是内容信息。
4. 实验任务4
; ex4.asm
assume cs:code
code segment
mov ax, 0000H
mov ds, ax
mov al, 0000h
mov bx, 0200h
mov cx, 0040h
s: mov [bx], ax
add bx, 1
add ax, 1
loop s
mov ax,4c00h
int 21h
code ends
end


5. 实验任务5
教材实验4(3)(P121)
下面的程序的功能是将“mov ax,4c00h”之前的指令复制到内存0:200处,补全程序。上机调试,跟踪运行结果。
assume cs:code code segment mov ax,076Ah mov ds,ax mov ax,0020h mov es,ax mov bx,0 mov cx,0017h s: mov al,[bx] mov es:[bx],al inc bx loop s mov ax,4c00h int 21h code ends end
因为17H-0=23


用t命令单步执行:



用d命令查看0:200之后的字节:

观察到已复制到指定内存
五、实验总结
1.掌握了根据CX精确反汇编。
2.了解了填充字段到内存中,高位字段存放字颜色,低位字段存放字内容。
3.了解了loop循环可以用于简化任务,节省代码量,可用p命令进行一步完成。
部分问题:
4.实验一与实验二的那些图标有时不能保证完全显示,且在单步调试时通常未显示。

浙公网安备 33010602011771号