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

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


 

1. 实验任务1

此部分书写内容:

  • 给出ex1.asm源代码
  • 给出使用masmlink工具汇编、链接的命令行及运行结果截图
  • 给出使用debug调试的截图

  包括:

  1. 结合可执行文件加载后寄存器CX的值,使用u命令精确反汇编截图
  2. 查看PSP的命令及截图
  3. 使用g命令执行到line16退出执行之前,操作截图

结论:

  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 
15     mov ah, 4ch
16     int 21h
17 code ends
18 end 

  使用masmlink工具汇编、链接的命令行及运行结果截图:

   使用debug调试:

  查看PSP的命令及截图:

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


 

2. 实验任务2

此部分书写内容:

  • 给出ex2.asm源代码
  • 给出使用masmlink工具汇编、链接的命令行及运行结果截图
  • 给出使用debug调试的截图

  包括:

  1. 结合可执行文件加载后寄存器CX的值,使用u命令精确反汇编截图
  2. 灵活使用t命令、p命令、g命令,对ex2.exe进行调试的截图(不一定要单步,有些地方可以g命令,一次执行多行汇编指令)
  3. ex2.asmline9  mov cx, 4 改成  mov cx, 8 ,保存后重新汇编、链接、运行并观察结果。
  4. 结合上述实验和观察,分析、对比ex2.asmex1.asm,它们实现的是否是相同的功能和效果?在具体实现上有什么不同?

结论:

  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

  使用masmlink工具汇编、链接的命令行及运行结果截图:

 

  使用debug调试的截图:

  t、p、g命令调试:

  把cx改为8并重复之前步骤:

  对比ex2.asmex1.asm

  二者本质上都是通过往显存空间写入数据使之在屏幕上呈图形。区别在于处理方式,一种是循环写入,一种是直接写入。


 

3. 实验任务3

此部分书写内容:

  • 给出源代码
  • 给出运行结果截图
  • 基于以下实验操作的发现和文字说明

  包括:

  1. 把填充的字数据,从0237H改成0239H,再次保存后,汇编、链接、运行,观察结果。
  2. 把填充的字数据,从0237H改成0437H,再次保存后,汇编、链接、运行,观察结果。
  3. 猜测并分析,这个字数据中高位字节里存放的是什么信息,低位字节里存放的是什么信息。

结论:

  程序源码:

 1 assume cs:code
 2 code segment
 3 
 4     mov ax,0b800h
 5     mov ds,ax
 6     mov bx,07b8h
 7     mov cx,16
 8 s:     mov dx, word ptr 0237h
 9     mov ds:[bx],dx
10     add bx,2
11     loop s
12 
13     mov ax,4c00h
14     int 21h
15 
16 code ends
17 end

 

  运行结果:

 

  0237H改成0239H

  0237H改成0437H

 

  分析:高位02代表输出字符颜色为绿色,高位04代表输出字符颜色为红色;低位37代表数字字符“7”,低位39代表数字字符“9”;

  综上:高位控制输出颜色,低位控制输出内容。

 


 

4. 实验任务4

此部分书写内容:

  • 程序源代码
  • 汇编、链接无误后,灵活使用debugt命令、g命令、p命令调试,用d命令查看0:200~0:23F,确认是否将0~63传送至此段内存区域。这部分,要求有截图。

结论:

  程序源代码:

 

 1 assume cs:code
 2 code segment
 3 
 4     mov ax,0200h
 5     mov ds,ax
 6     mov cx,64
 7 s:    mov [bx],bx
 8     inc bx
 9     loop s
10 
11     mov ax,4c00h
12     int 21h
13 
14 code ends
15 end

 

  t、p、g命令调试:

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

 


5. 实验任务5

此部分书写内容:

  • 填空以后的源代码
  • 汇编连接后,灵活使用debugt命令、g命令、p命令调试,用d命令查看0:200之后的若干字节,观察是否将mov ax, 4c00h之前的指令复制到指定内存,这部分要求有截图,并以文字方式说明空白处填写依据。

结论:

  程序源代码:

 

 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     sub cx,5
 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

 

  调试查看:

 

   分析:

   本题要点在于分析好需要赋值的代码区间,通过反汇编可知复制部分长度比代码段总长度少5字节,故第二处填写 sub cx,5 。

 

posted @ 2020-10-29 10:42  max)  阅读(122)  评论(2编辑  收藏  举报