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

目录


实验内容

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

要求:使用8086汇编程序编写、汇编、链接、运行、调试方法,对ex1.asm进行汇编、链接、运行,使
用debug工具调试可执行文件。
实验步骤

1
编写ex1.asm
1
编译ex1.asm
1
连接
1
查看psp
1
反汇编
1
g命令执行
1
p命令执行
1
ex1执行结果
如上图所示ex1.exe的执行结果是屏幕上出现三个字符。如果在debu中使用g命令调试,则可能看不到屏幕上出现的变换。这是因为屏幕滚动刷新显示的原因,当输入g命令之后,屏幕向下滚动三行,正好将显示的字符刷新掉,所以无法看到。

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

要求:

  • 使用8086汇编程序编写、汇编、链接、运行、调试方法,对ex2.asm进行汇编、链接、运行,使用debug工具调试可执行文件
    • 实验步骤

      1
      ex2.asm
      1
      ex2编译
      1
      ex2连接
      1
      反汇编
      1
      g命令调试
      1
      p命令调试
      1
      最后两步调试
      1
      ex2执行结果
      1
      修改后的ex2
      1
      修改后ex2执行结果
      对比ex1和未修改的ex2的执行结果,二者的结果一致,说明这两个程序通过不使用和使用loop实现了相同的结果。修改后的ex2只是显示的字符多了一些。 在代码书写上,ex1.asm采用顺序结构,ex2.asm采用循环结构。

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

      • 编写汇编源程序
      • 给出运行结果截图

      运行步骤

      1
      ex3.asm
      1
      ex3执行结果
      1
      把填充的字数据改成0239H
      1
      把填充的字数据改成0437H
      根据实验结果,猜测字数据的高位存储的是字符的颜色,低位存储的是字符的ASCII码。

      实验任务4

      • 编写完整汇编源程序,实现向内存0:200~0:23F依次传送数据0~63(3FH)。
      • 综合使用[bx]和loop,编写汇编源程序
      • 灵活使用debug的t命令、g命令、p命令调试。在程序退出前,用d命令查看
      • 0:200~0:23F,确认是否将0~3F传送至此段内存区域。
      1
      ex4.asm
      1
      ex4执行结果

      实验任务5
      该程序的功能是将 "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
      

      填空内容为:

      • mov ax,cs
      • mov cx,17h
      根据cx的值减去最后两行代码所占用的5个字节,能够得到赋给cx的值,即直到“mov ax,4ch”之前的指令的长度。
posted @ 2020-11-05 21:59  qylh  阅读(269)  评论(1)    收藏  举报