一、实验目的

1. 理解并掌握汇编源程序组成与结构
2. 掌握汇编语言源程序编写→汇编→链接→调试的工具和方法
3. 理解汇编源程序中地址表示、段寄存器的用法
4. 理解和掌握寄存器间接寻址方式[bx]
5. 通过汇编指令loop的使用理解编程语言中循环的本质

二、实验准备

1. 学习/复习第5章使用[bx]和loop实现循环的编程应用示例(教材5.5节,5.8节)
2. 复习第3章「栈」的知识
3. 结合第4章课件,复习完整汇编源程序编写→汇编→连接→运行→调试的方法
4. 复习8086汇编中内存单元地址的表示,以及段寄存器DS, SS, ES, CS的用途

三、实验结论

1.实验任务1

(1)给出ex1.asm源代码:

 1 ;ex1.asm
 2 assume cs:code 
 3 code segment 
 4     mov ax, 0b810h 
 5     mov ds, ax 
 6     mov byte ptr ds:[0], 1 
 7     mov byte ptr ds:[1], 1 
 8     mov byte ptr ds:[2], 2 
 9     mov byte ptr ds:[3], 2 
10     mov byte ptr ds:[4], 3 
11     mov byte ptr ds:[5], 3 
12     mov byte ptr ds:[6], 4 
13     mov byte ptr ds:[7], 4 
14     mov ah, 4ch
15     int 21h 
16 code ends 
17 end

(2)给出使用masm、link工具汇编、链接的命令行及运行结果截图

(3) 给出使用debug调试的截图

1)查看PSP的命令

2)使用u命令精确进行反汇编

3)使用g命令执行到line16退出执行之前

 

 2.实验任务2

(1) 给出ex2.asm源代码

 1 ; ex2.asm 
 2 assume cs:code 
 3 code segment 
 4     mov ax, 0b810h 
 5     mov ds, ax 
 6     mov bx, 0 
 7     mov ax, 101H 
 8     mov cx, 4 
 9 s:     mov [bx], ax 
10     add bx, 2 
11     add ax, 101H 
12     loop s
13     mov ah, 4ch 
14     int 21h 
15 code ends 
16 end

(2)给出使用masm、link工具汇编、链接的命令行及结果截图

(3)使用debug调试

 1)使用u命令精确进行反汇编

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

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

 

(4)回答问题:

ex2.asm和ex1.asm实现相同的功能,都出现了相同的图案。(修改后的ex2.asm,实现的图案不同.)

ex2.asm使用了loop循环,而ex1.asm没有。

3.实验任务3

(1)给出ex3.asm源代码

 1 ;ex3.asm
 2 assume cs:code
 3 code segment
 4     mov ax,0b800h
 5     mov ds,ax
 6     mov bx,07b8h
 7     mov ax,0237h
 8     mov cx,16
 9 s:  mov [bx],ax
10     add bx,2
11     loop s
12     mov ah,4ch
13     int 21h
14 code ends
15 end

(2)给出运行结果截图

 

 

 

(3)基于以下实验操作的发现和文字说明。

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

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

 

 3)猜测与分析,这个字数据中高位字节里存放的是什么信息,低位字节里存放的是什么信息。

第一次高位字节不变,改变低位字节,结果显示颜色不变,显示的内容改变;

第二次改变高位字节,低位字节不变,结果显示颜色改变,显示的内容不变。

可知,高位字节里存放的是颜色信息,低位字节里存放的是内容信息。

4.实验任务4

(1)综合使用[bx]和loop,给出ex4.asm源代码

 1 ;ex4.asm
 2 assume cs:code
 3 code segment
 4     mov ax,0h
 5     mov ds,ax
 6     mov bx,0200h
 7     mov cx,40h
 8 s:  mov [bx],ax
 9     add bx,1h
10     add ax,1h
11     loop s
12     mov ah,4ch
13     int 21h
14 code ends
15 end

(2)汇编、链接无误后,灵活使用debug的t命令、g命令、p命令调试,用d命令查看0:200~0:23F,确认是否将0~63传送至此段内存区域。

 

 

 

5.实验任务5

 下面的程序的功能是将“mov ax,4c00h”之前的指令复制到内存0:200处。

(1)填空ex5.asm源代码

 1 ; ex5.asm
 2 assume cs:code
 3 code segment
 4     mov ax, cs
 5     mov ds, ax
 6     mov ax, 0020H
 7     mov es, ax
 8     mov bx, 0
 9     mov cx, 0017H
10     s: mov al, [bx]
11     mov es:[bx], al
12     inc bx
13     loop s
14     mov ax, 4c00H
15     int 21h
16 code ends
17 end

(2)汇编连接后,灵活使用debug的t命令、g命令、p命令调试,用d命令查看0:200之后的若干字节,观察是否将mov ax,4c00h之前的指令复制到指定内存。

 mov ax,4c00h之前的指令复制到指定内存。

填写依据:

1.根据题目要求是复制汇编指令,到指定内存,所以应将汇编语句的保存段地址cs给ds。

2.loop指令的循环中每次复制一个字节的数据,先随便填入cx值,debug时进入利用r命令查看程序所占字节数,然后可知cx的值为17。

四、实验总结

1.在调试过程中,遇到不知道p命令和t命令区别的问题,通过查阅可知p命令类似t命令,不过遇到子程序调用的时候直接执行完子程序代码,不会进入子程序逐条执行。在遇到循环指令时,会直接执行到CX=0。

2.通过本次的实验,自己动手操作完成,能够熟悉并掌握完整汇编源程序编写→汇编→连接→运行→调试的方法。

posted on 2020-11-05 18:14  夏梦陆离  阅读(131)  评论(3编辑  收藏  举报