实验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开始的地址空间中



浙公网安备 33010602011771号