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

1、实验任务1

  编写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

 使用masm、link对ex1.asm进行汇编、链接,得到可执行文件ex1.exe:

 

  使用debug加载可执行文件ex1.exe后,使用d命令查看程序段前缀PSP所占的256个字节:

 

  使用r命令得到寄存器CX的值,然后使用u命令对ex1.exe进行精确反汇编:

 

  使用g命令执行到程序退出执行前:

 

2、实验任务2

  编写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

  使用masm、link对ex2.asm进行汇编、链接,得到可执行文件ex2.exe:

 

  使用r命令得到寄存器CX的值,然后使用u命令对ex2.exe进行精确反汇编:

 

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

 

  运行结果:

 

  将ex2.asm中line9 mov cx,4改成mov cx,8:

; ex2.asm
assume cs:code
code segment
               mov ax,0b810h
               mov ds,ax

               mov bx,0
               mov ax,101H
               mov cx,8
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:

 

  使用r命令得到寄存器CX的值,然后使用u命令对ex2.exe进行精确反汇编:

 

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

 

  运行结果:

 

问:结合上述实验和观察、分析、对比ex2.asm和ex1.asm,它们实现的是否是相同的功能和效果?在具体实现上有什么不同?

答:ex1.asm和ex2.asm实现的是相同的功能和效果。在具体的实现上,ex1.asm使用的是一次性全部输入的方法,而ex2.asm则使用loop循环的方法。

 

3、实验任务3

  编写ex3.asm源代码:

; ex3.asm
assume cs:code
code segment
               mov ax,0b800h
               mov ds,ax

               mov bx,07b8h
               mov ax,0237h
               mov cx,16
s:             mov [bx],ax
               add bx,2
               loop s

               mov ah,4ch
               int 21h
code ends
end

  使用masm、link对ex3.asm进行汇编、链接,得到可执行文件ex3.exe:

 

  直接运行得到运行结果:

 

  把填充的字数据,从0237H改成0239H:

; ex3.asm
assume cs:code
code segment
               mov ax,0b800h
               mov ds,ax

               mov bx,07b8h
               mov ax,0239h
               mov cx,16
s:             mov [bx],ax
               add bx,2
               loop s

               mov ah,4ch
               int 21h
code ends
end

  使用masm、link对ex3.asm进行汇编、链接,得到可执行文件ex3.exe:

 

  直接运行得到运行结果:

 

  将0237h改成0239h之后,运行结果中显示的图像由一串绿色的7变成一串绿色的9。

 

  把填充的字数据,从0237H改成0437H:

; ex3.asm
assume cs:code
code segment
               mov ax,0b800h
               mov ds,ax

               mov bx,07b8h
               mov ax,0437h
               mov cx,16
s:             mov [bx],ax
               add bx,2
               loop s

               mov ah,4ch
               int 21h
code ends
end

  

使用masm、link对ex3.asm进行汇编、链接,得到可执行文件ex3.exe:

 

  直接运行得到运行结果:

 

  将0237h改成0437h之后,运行结果中显示的图像由一串绿色的7变成一串红色的7。

 

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

答:根据这三个实验结果,我认为字数据中高位字节存放的是字节显示的颜色信息,低位字节里存放的是字节显示的内容信息。

 

4、实验任务4

  编写ex4.asm源代码:

; ex4.asm
assume cs:code
code segment
               mov ax,0h
               mov ds,ax

               mov bx,200h
               mov cx,40h
s:             mov [bx],ax
               add bx,1h
               add ax,1h
               loop s

               mov ah,4ch
               int 21h
code ends
end

  使用masm、link对ex4.asm进行汇编、链接,得到可执行文件ex4.exe:

 

  使用t命令、g命令、p命令对ex4.exe进行调试:

 

  使用d命令查看0:200~0:23F:

 

  已经将0~3F传送到此段内存区域。

 

5、实验任务5

  进行代码填空:

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

填写依据:根据mov al,[bx],知道ds中存入的应该是代码段的段地址,所以要将cs的值赋值给ds,所以第一个空应该填cs;第二个空因为反汇编后发现需要复制的长度为17h,所以需要将17h赋值给cx,作为循环次数。

 

  使用masm、link对ex5.asm进行汇编、链接,得到可执行文件ex5.exe:

 

  使用t命令、p命令对ex5.exe进行调试:

 

  调试完成后,使用u命令进行反汇编:

 

  使用d命令确认是否在指定内存中存入了相应的数据:

 

  根据上图可以看出在指定内存中正确存入了相应的数据。

posted @ 2020-11-05 01:00  腓腓  阅读(235)  评论(2)    收藏  举报