实验2 汇编源程序编写与汇编、调试
1. 实验任务1
使用任意一款文本编辑器,编写8086汇编源程序ex1.asm。源代码如下:
编写代码之后,对该文件进行汇编,链接,运行,使用debug工具调试可执行文件,结果如下:



使用d命令查看程序段前缀PSP所占的256个字节,得到结果如下:

由CX寄存器的值可知,程序段的空间为 076A:0000~076A:0031,使用u命令进行精确反汇编:

使用g命令执行到程序退出之前,结果如下:

2. 实验任务2
使用任意一款文本编辑器,编写8086汇编源程序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
使用masm、link对ex2.asm进行汇编、链接,得到可执行文件ex2.exe,运行,结果如下:


根据CX寄存器中的值,对ex2实行精确反汇编,得到结果如下:

对ex2进行调试,得到最终结果:

将代码段中的mov cx,4改为mov cx,8之后,再次汇编,链接,运行并观察结果:

结论:可以发现实验任务1和实验任务2的代码实现了相同的功能,但是在具体实现上有所不同:
实验任务1采用的是直接寻址的方式,对段空间进行写入;
实验任务2采用的是间接寻址的方式,并采用了循环结构对段空间进行写入;
3. 实验任务3
综合使用loop,[bx],编写完整汇编程序,实现向内存b800:07b8开始的连续16个字单元重复填充字数据 0237H。
代码如
1 assume cs:code 2 code segment 3 mov ax,0b800h 4 mov ds,ax 5 mov bx,07b8h 6 mov cx,16 7 mov ax,0237h 8 s: mov [bx],al 9 inc bx 10 mov [bx],ah 11 inc bx 12 loop s 13 mov ax,4ch 14 int 21h 15 code ends 16 code
汇编,链接,运行后,得到结果如下:

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

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

分析与结论:
通过上述实验,发现将0237h改为0239h后,屏幕上的字符由"7"变为"9",由此可得出低位存放的是ascll码值;
将0237h改为0437h后,屏幕上的字符颜色由绿色变为红色,由此可得出高位存放的是颜色信息。
4. 实验任务4
编写完整汇编源程序,实现向内存0:200~0:23F依次传送数据0~63(3FH)。
代码如下:
1 assume cs:code 2 code segment 3 mov ax,0h 4 mov ds,ax 5 mov bx,0200h 6 7 mov dx,0h 8 mov cx,40h 9 s: mov ds:[bx],dl 10 add dx,1 11 add bx,1 12 loop s 13 14 mov ax,4ch 15 int 21h 16 code ends 17 end
综合使用[bx]和loop,编写汇编源程序 灵活使用debug的t命令、g命令、p命令调试。在程序退出前,用d命令查看 0:200~0:23F,确认是否将0~3F传送至此段内存区域。

可见已将0~3F传送至此段内存区域。
5. 实验任务5
教材实验4(3)(P121)
代码如下:
1 assume cs:code 2 code segment 3 mov ax,cs 4 mov ds,ax 5 mov ax,0020h 6 mov es,ax 7 mov bx,0 8 mov cx,16 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
得到结果如下,可知完成功能;

由于程序的起始地址由CS:IP指定,因此 mov ax,__处填写CS;
mov cx,__处填写0016的原因:首先在edit编辑器中编写上述代码,并汇编,链接,使用debug工具进行调试;
使用r指令得到cx中的值为001c,并通过使用u指令精确反汇编得到mov ax,4c00h的地址为0017,由此可知要将
mov ax,4c00h之前的指令复制到0:200中,仅需将076a:0000~076a:0016的内容复制到里面即可。因此该处填
写0016h。

浙公网安备 33010602011771号