实验1 8086汇编指令编码和调试
实验任务2
在debug中,使用d命令查看生产日期

使用e命令修改生产时期所在的内存单元,修改后,再次使用d命令查看

日期无法修改,在8086CPU中写入数据操作无效。
实验任务3
在debug中,使用e命令,向内存单元填写数据。 -e b800:0 03 04 03 04 03 04 03 04 03 04 从b800:0开始的内存单元开始,依次写入十六进制数据04 03,重复写5次。

在debug中,使用f命令,向内存单元批量填写数据。 -f b800:0f00 0f9f 03 04 把内存单元区间b800:0f00 ~ b800:0f9f连续160个字节,依次重复填充十六进制数据03 04。

尝试修改内存单元,或,数据后的效果截图

实验任务4
-a mov ax, 20 mov ds, ax mov ss, ax mov sp, 30 push [0] ; 执行后,寄存器(sp) = 002EH push [2] ; 执行后,寄存器(sp) = 002CH push [4] ; 执行后,寄存器(sp) = 002AH push [6] ; 执行后,寄存器(sp) = 0028H pop [6] ; 执行后,寄存器(sp) = 002AH pop [4] ; 执行后,寄存器(sp) = 002CH pop [2] ; 执行后,寄存器(sp) = 002EH pop [0] ; 执行后,寄存器(sp) = 0030H
问题1 :
逻辑地址0020:0030,物理地址00230H
问题2

问题3

问题4

实验任务5

问题1
在执行完mov ss,ax后继续执行了mov sp,30。
问题2
栈的使用并非简单依次压入数据,在实验中代码的偏移地址发生变化,由0108->010B->010C->010F->0110,
实验任务6

使用masm、link,汇编、链接,得到可执行文件task5.exe。运行程序。

查看task5.exe的程序段前缀

程序段前缀前两个字节是CD 20
实验任务7
assume cs:code code segment mov ax, 076ah mov ds, ax mov ax, 0020h mov es, ax mov bx, 0 mov cx, 200 s: mov al, [bx] mov es:[bx], al inc bx loop s mov ax, 4c00h int 21h code ends end
代码段的段地址为076aH,所以第一空为076ah,要把指令复制到0:200的连续内存单元要执行200次,所以第二空要把cx设为200
g命令运行到指定点和使用u命令反汇编0:200到复制代码长度这一段内存空间的截图



浙公网安备 33010602011771号