实验1 8086汇编指令编码和调试

一、实验目的

  1. 掌握8086CPU、寄存器、内存(包括栈空间)的基础知识
  2. 掌握汇编源程序组成与结构
  3. 理解和掌握寄存器间接寻址方式[bx]
  4. 掌握汇编指令mov, add, sub, jmp, push, poploop的用法,理解高级语言的表达和抽象机制
  5. 熟练掌握使用debug工具编写和调试x86汇编命令的方法
  6. 掌握汇编语言源程序编写汇编链接调试的工具和方

 

二、实验结果

实验任务2:

生产时期:

实验1 8086汇编指令编码和调试_程序段

修改后的生产时期:

实验1 8086汇编指令编码和调试_寄存器_02

结论:无法修改,因为ROM地址空间内的内容无法修改,向该地址中写入数据等于改写只读存储器中的内容。

 

 

实验任务3:

修改内存单元:

实验1 8086汇编指令编码和调试_出栈_03

批量填充内存单元:

实验1 8086汇编指令编码和调试_程序段_04

修改内存单元:

实验1 8086汇编指令编码和调试_入栈_05

 

 

实验任务4:

-a
mov ax, 20
mov ds, ax
mov ss, ax
mov sp, 30
push [0]    ; 执行后,寄存器(sp) = __2E__
push [2]    ; 执行后,寄存器(sp) = __2C__
push [4]    ; 执行后,寄存器(sp) = __2A__
push [6]    ; 执行后,寄存器(sp) = __28__
pop [6]     ; 执行后,寄存器(sp) = __26__
pop [4]     ; 执行后,寄存器(sp) = __24__
pop [2]     ; 执行后,寄存器(sp) = __22__
pop [0]     ; 执行后,寄存器(sp) = __20__

问题一:栈顶的逻辑地址:20:30,物理地址:230H。

问题二:

实验1 8086汇编指令编码和调试_源程序_06

 

 问题三:

实验1 8086汇编指令编码和调试_入栈_07

 

 问题四:

 实验1 8086汇编指令编码和调试_寄存器_08

 

 

 实验任务5:

问题一:不是,与mov ss, ax一起执行

问题二:8086CPU的出栈与入栈操作都是以字为单位进行的。ss:sp指向栈顶,入栈时会对是sp-2,出栈是sp+2。

 

 

实验任务6:

程序源码:

assume cs:code
code segment
start:
    mov cx, 10
    mov dl, '0'
 s: mov ah, 2
    int 21h
    add dl, 1
    loop s
    mov ah, 4ch
    int 21h
code ends
end start

对程序进行汇编链接:

实验1 8086汇编指令编码和调试_源程序_09

实验1 8086汇编指令编码和调试_源程序_10

 运行结果:

实验1 8086汇编指令编码和调试_出栈_11

 程序段前缀:前两个字节为CD 20

 实验1 8086汇编指令编码和调试_出栈_12

 

 

实验任务7:

assume cs:code
code segment
    mov ax, __cs___  ;程序段的起始地址
    mov ds, ax
    mov ax, 0020h ;vvg
    mov es, ax
    mov bx, 0
    mov cx, __17h___  ;在mov ax, 4c00h之前的字长度
s:  mov al, [bx]
    mov es:[bx], al
    inc bx
    loop s
    mov ax, 4c00h
    int 21h
code ends
end

实验1 8086汇编指令编码和调试_寄存器_13

 

 实验1 8086汇编指令编码和调试_源程序_14