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

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

四、实验结论

1. 实验任务1

  1. 创建ex1.asm

  2. 进行编译链接运行

  3. 使用debug工具对程序进行调试

    • 使用d命令查看程序段前缀PSP所占的256个字节

    • 结合可执行文件中寄存器CX的值,使用u命令对ex1.exe进行精确反汇编
      CX寄存器中值为31,表示程序的长度

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

2. 实验任务2

  1. 进行编译链接运行

  2. 使用debug工具对程序进行调试

    • 使用u命令对ex2.exe进行精确反汇编

    • 灵活使用t命令、p命令、g命令,对ex2.exe进行调试


    • 修改后重新编译链接运行

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

      修改后的功能不一样,原来修改8个内存单元,修改后变为修改16个内存单元。
      具体实现上,ex1是使用手动制定每个内存单元复制,ex2使用loop循环赋值,并且每次操作两个内存单元。

3. 实验任务3

  1. 汇编源程序
; 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
  1. 运行结果截图

  1. 把填充的字数据,从0237H 改成0239H,再次保存后,汇编、链接、运行,观察结果。

  1. 把填充的字数据,从0237H 改成0437H,再次保存后,汇编、链接、运行,观察结果。

  1. 结论
    高字节存放着显示字符的样式属性,低字节存放着字符本身ascii码。

4.实验任务4

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

必做

源代码:

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

    mov bx, 0200H
    mov al, 0H
    mov cx, 40H
s:  mov [bx], al
    add bx, 1
    add al, 1
    loop s
    mov ah, 4ch
    int 21h
code ends
end

选做

源代码:

; ex4_2.asm
assume cs:code
code segment
    mov ax, 0H
    mov ss, ax
    mov ax, 240H
    mov sp, ax
    mov cx, 20H
    mov bx, 3F3EH
s:  push bx
    sub bl, 2
    sub bh, 2
    loop s
    mov ah, 4ch
    int 21h
code ends
end

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, 18
s:  mov al, [bx]
    mov es:[bx], al
    inc bx
    loop s
    mov ax, 4c00h
    int 21h
code ends
end

运行结果:
0:200处数据与代码段处相同

第一空是需要将数据段指向代码段所在段位置
第二空是通过mov ax, 4c00h与程序头的内存地址段差值决定的

posted @ 2020-11-05 23:15  openseem  阅读(175)  评论(3)    收藏  举报