实验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到复制代码长度这一段内存空间的截图

 

 

 

posted @ 2021-10-22 16:01  风雨2  阅读(92)  评论(2)    收藏  举报