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

实验结论:

  1. 实验任务1

源代码

;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

汇编、链接、运行调试操作:

 

结合可执行文件加载后寄存器CX的值,使用u命令精确反汇编截图:

 

查看PSP的命令及截图:

 

使用g命令执行到line16退出执行之前,操作截图:

 

 

该实验单步调试不能显示符号,但最后运行可以显示,可能是单步调试出现了屏幕刷新数据覆盖的问题。

 

  1. 实验任务2

源代码:

; 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工具汇编、链接的命令行及运行结果截图:

 

 

 

结合可执行文件加载后寄存器CX的值,使用u命令精确反汇编截图:

 

 

使用t命令执行到结束之前,对ex2.exe进行调试的截图:

 

修改CX后使用g命令执行到结束之前,对ex2.exe进行调试的截图:

 

 

 

该实验与实验任务一出现相同的问题。

ex1.asm和ex2.asm实现相同的功能,但是实验一将所有的指令都写出来进行赋值,而实验二是利用loop循环来实现,相较而言实验二的方法更方便。

  1. 实验任务3

源代码:

;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

运行结果:

 

0239h运行结果:

 

0437h运行结果:

 

据结果猜测,高位字节里存放的是数值信息,低位字节里存放的是显示颜色信息。

  1. 实验任务4

源代码:

; ex4.asm

assume cs:code

code segment

       mov ax, 0

       mov ds, ax

       mov bx, 200h

       mov ax, 0

       mov cx, 64

s:    mov [bx], ax

       add bx, 1h

       add ax, 1h

       loop s

 

       mov ah, 4ch

       int 21h

code ends

end

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

 

 

  1. 实验任务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, ds:[bx]

       mov es: [bx], al

       inc bx

       loop s

 

       mov ax, 4c00h

       int 21h

code ends

end

首先要给ax赋值时是确定复制开始的位置,根据分析,开始是选择当前要读取指令的地址,且为段地址,即选择cs;

然后第二空确定多少个字节时先随便给cx赋值,然后进行编译、连接、调试反汇编后确定准确需要复制的字节数。

 

 

 

 

查看复制前相关内存数据信息:

 

 

 

查看复制后的内存数据信息:

 

 

 

可见已经复制成功。

实验总结:

  1.     通过本次实验我具体掌握了汇编语言源程序编写、汇编、链接、调试的工具和方法。
  2.      我更加深刻地认识到[bx]间接寻址正确用法和loop循环指令带来的方便之处。
  3.     我再一次熟悉了段地址和偏移地址的灵活运用。
  4.     学会了如何将汇编源程序存储为外部文件的时候,对内存地址单元的数据存放在寄存器中而不是将地址存放。
  5.     学会了如何将指定的指令复制到内存中去
  6.   新发现了实验中单步调试不能显示符号,但最后运行可以显示,是因为屏幕刷新数据覆盖的问题。
posted @ 2020-11-01 16:05  有女孩说要娶我  阅读(155)  评论(2)    收藏  举报