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

一、实验目的

  1. 掌握8086CPU、寄存器、内存(包括栈空间)的基础知识

  2. 掌握汇编源程序组成与结构

  3. 理解和掌握寄存器间接寻址方式[bx]

  4. 掌握汇编指令mov, add, sub, jmp, push, pop,loop的用法,理解高级语言的表达和抽象机制

  5. 熟练掌握使用debug工具编写和调试x86汇编命令的方法

  6. 掌握汇编语言源程序编写→汇编→链接→调试的工具和方法

二、实验结论

  实验任务2:

使用d命令查看生产时期

无法修改生产日期

 

 实验任务3:

使用e命令修改内存单元后的情形

 f命令批量填充内存单元后的情形

尝试向其他字节填充指令:

  实验任务4:

(1)

栈顶逻辑地址:0020:30

栈顶物理地址:00230H

观察并记录栈顶偏移地址的寄存器sp值的变化情-a

mov ax, 20 
mov ds, ax 
mov ss, ax 
mov sp, 30 
push [0] ; 执行后,寄存器(sp) = _002E_ 
push [2] ; 执行后,寄存器(sp) = _002C_ 
push [4] ; 执行后,寄存器(sp) = _002A_ 
push [6] ; 执行后,寄存器(sp) = _0028_ 
pop [6] 	; 执行后,寄存器(sp) = _002A_ 
pop [4] 	; 执行后,寄存器(sp) = _002C_ 
pop [2] 	; 执行后,寄存器(sp) = _002E_ 
pop [0]		; 执行后,寄存器(sp) = _0030_
(2)

 (3)

汇编指令执行完之后,内存空间的数据没有发生变化。

 (4)

在改变顺序之后,顺序发生了改变,因为出栈的顺序发生了改变。

   实验任务5:

问1:

    答:不是. mov sp ,30 在 mov ss,ax 执行完后及跟着执行。

问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

  

 

 

 

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

  (1)cs 17h

    由于是复制当前程序,当前程序的程序段地址存储在CS中,因此将CS中的数据移至DS寄存器作为数据段,所以第一空填cs。而第二空17h则是通过先编译程序后观察程序的大小决定,如下图:

可以看到程序到mov ax, 4c00h指令之前共占用了17h个字节,因此需要循环17h次。

 

(2)

 已经正确复制到了0:200开始的地址空间中



  

 
posted @ 2021-10-25 21:12  Panzerkampfwagen  阅读(81)  评论(3编辑  收藏  举报