实验2 汇编源程序编写与汇编、调试

一、实验结论

实验过程中使用到的盘符注明为v。

实验一:

实验任务(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

编写过程使用到的是自带的记事本

 

 

 进入Dos虚拟机,注册盘符为V并且对ex1.asm进行汇编

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

 

 

运行生成的可执行文件ex2.asm,可以发现屏幕上靠右的地方出现了本来不存在的图标(蓝绿笑脸和蓝色心和红色方块)

生成的相关文件截图如下

 

 

下面开始调试Debug

首先使用-r命令查看寄存器的相关内容,可以看到CX对应的值

需要查看PSP的值,需要使用到-d命令,因为一次性默认查看128个字节,而需要的是256个字节,因此需要制定查看范围直接到00ff

根据之前的查看寄存器结果,可知寄存器CS的值是076A,而IP的值是0000,CX的值是0031,因此范围是0-30,所以精准反汇编的范围如下

 

 

第16行是mov ah,4c。根据上图所示,目标所在处的偏移地址是002D

 

 

 似乎并没有显示出对应的之前的图像,这可能是屏幕被刷新了。

  实验任务(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

编写过程同样使用记事本

 

 

对ex2.asm进行汇编,得到对应的目标文件ex2.obj

 

 

继续把目标文件和库文件连接,得到对应的可执行文件ex2.exe

 

 

执行可执行文件ex2.exe,屏幕的同样的上方靠右的位置出现了一组和实验任务一种完全相同的图案

具体的生成文件截图如下

开始调试Debug,使用-r命令查看各个寄存器的值

 

 

这时CS的值是076A,IP的值是0000,CX的值是001C,因此,精确反汇编的范围是0:1B

 

执行单步调试,使用-p和-t和-g命令,对于loop指令和int中断指令进行不同的调试对比

在loop指令之前都是不需要注意的,可以一起执行,不需要单步调试

 

 

现在执行到了LOOP指令之前,所在地址是076A:0016,现在使用-p调试

 

然后回到之前的地方,这一次使用-t调试

 

 

区别在于使用-p执行时直接执行到下一条指令,但是使用-t单步调试时,会跳转到CS:000E的地址,因为两个面向的对象是不同的,-t是针对语句,-p是针对整个任务。

现在需要调试到执行int中断指令之前,地址是076A:0018。

同样首先使用-p进行调试

 

 

 

 

 

之后使用-t单步调试

 

 

用-p命令自动执行,形成一个指令循环

更改mov cx,4到mov cx,8之后

 

 

 重新汇编连接

 

 

重新执行之后

 

 

 在同样的开始的地方生成了更多的图标,观察可知,前面四个图标和之前是完全相同的。

重新调试,执行到中断指令之前

 

 

和之前进行对比,AX和BX的值发生了变化,整体是一个次数的翻倍,因为循环次数从4变成了8,是一个2倍关系

实验任务一和实验任务二做下来之后的总结是,两个实现的效果应该是一致的,但是ex2.asm使用到了loop指令,循环执行,我觉得整体上可能更加高效,在处理更多的数据填入的情况下ex2.asm的代码更具有泛用性

实验任务(3):综合使用loop,[bx],编写完整汇编程序,实现向内存b800:07b8开始的连续16个字单元重复填充字数据 0237H。

编写汇编源程序 给出运行结果截图 如程序编写正确,预期结果如图所示。

首先编写程序

;ex3.asm
assume cs:code
code segment
    mov bx,0b800h
    mov ds,bx
    mov cx,16
    mov ax,0237h
    mov bx,07b8h
s:  mov [bx],ax
    add bx,2
    loop s
    mov ax,4c00h
    int 21h
code ends
end

同样使用的是记事本

 

 

进行汇编连接

 

 

执行结果应该符合之前的要求 

 

 

生成的文件相关

 

 

 

 更改成0239H

 

 

 

 

 

 这次使用了cls清屏

显示的是绿色的9,颜色相同,数字不同

 

 

更改成0437的场合

重新进行汇编连接

 

 

 

 

清屏之后运行

 

 

 

显示的是红色的7,数字相同,颜色不同

 

 可以很清楚地看到,前面两个字段控制的是显示的颜色,后面两个字段控制的是显示的内容,即高位存放字体颜色,低位存放文字内容

实验任务(4):

编写完整汇编源程序,实现向内存0:200~0:23F依次传送数据0~63(3FH)。 

先编写程序

; ex4.asm 
assume cs:code 
code segment 
    mov bx,0000h 
    mov ds,bx 
    mov ax,0000H
    mov bx,0200h 
    mov cx,0040h 
s:  mov [bx],ax
    inc bx
    inc ax
    loop s
    mov ax,4c00h 
    int 21h 
code ends 
end

使用记事本

 

汇编连接

 

生成的相关文件

 

 运行生成的可执行文件,并且进行调试,使用-d命令查看对应内存空间的内容

 

先查看CX的值

 

 得到目标地址为076A 0000:0018,进行精确反汇编

 

使用-t进行调试

 

使用-p进行调试

 

根据之前的结果可知,数据已经按照要求存入了指定的内存空间。

实验任务(5):

教材实验4(3)(P121) 

下面的程序的功能是将“mov ax,4c00h”之前的指令复制到内存0:200处,补全程序。上机调试,跟踪运行结果。

assume cs:code
code segment
    mov ax,_____
    mov ds,ax
    mov ax,0020h
    mov es,ax
    mov bx,0
    mov cx,_____
s:  mov al,[bx]
    mov es:[bx],al
    inc bx
    loop s
    mov ax,4c00h
    int 21h
code ends
end
;exn.asm
assume cs:code
code segment
    mov ax,code
    mov ds,ax
    mov ax,0020h
    mov es,ax
    mov bx,0
    mov cx,0018h
s:  mov al,[bx]
    mov es:[bx],al
    inc bx
    loop s
    mov ax,4c00h
    int 21h
code ends
end

填写如上

 

连接汇编 

 

运行测试,开始Debug

 

 

 根据CX CS IP的值进行反汇编

 

调试到LOOP指令之前

 

 -p调试一步

 

-t调试

 

-d查看0-200内存

 

和之前相对比,可以发现程序已经装入了内存之中。

第一空填写code的原因是要把代码装入内存当中,代码和数据源是同源的。

第二空填写0018h是因为所需要装入的数据量,即指令经过-u命令查看后发现占了24个字节,而CX的初始值为001D,因此填入0018H

二、实验总结

(1)本次实验后掌握了根据CX精确反汇编,和使用g命令断点调试。

(2)填充字段到内存中,高位字段存放字颜色,低位字段存放字内容。

(3)实验中遇到的问题是那些图标单步调试未显示,可能是刷新了的原因。

(4)loop循环可以用于简化任务,节省代码量。

 

posted @ 2020-11-03 23:46  无口赤红  阅读(128)  评论(2编辑  收藏  举报