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

实验任务2 (1)在debug中,使用d命令查看生产日期 实验1 8086汇编指令编码和调试 (2)使用e命令修改生产时期所在的内存单元,修改后,再次使用d命令查看   实验1 8086汇编指令编码和调试 重启debug,可见未发生变化 实验1 8086汇编指令编码和调试 结论:ROM内存单元是只读的,不可以修改。

实验任务3

(1)在debug中使用e命令修改内存单元

实验1 8086汇编指令编码和调试 (2)在debug中使用f命令批量填充内存单元 实验1 8086汇编指令编码和调试  A0000~BFFFF的内存单元为显存地址空间,写入其中的数据会被显示卡输出到显示器上 A0000h - AFFFFh是图形模式(Graphic Mode)的显存
B0000h - B7FFFh是黑白文字模式(Mono Text Mode)的显存
B8000h - BFFFFh是彩色文字模式的显存 实验任务4 已知内存单元00201H~00207H中数据如下,用作栈空间: 实验1 8086汇编指令编码和调试

 

输入指令进行单步跟踪

-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

问题:

1. 逻辑地址:0020:30H 物理地址:00230H

2. 执行到pop[6]前

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

3. pop[0]执行结束后

实验1 8086汇编指令编码和调试 4. 最后4条指令翻转后,会变成70 80 50 60 30 40 10 20 实验1 8086汇编指令编码和调试

 

实验任务5

输入如下内容

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

 

 

 

1. 程序没有暂停,所有对ss寄存器进行值修改的指令执行后,都紧接着执行其下一行指令的修改,所以紧接着执行mov sp 30,debug的单步调试就是一种中断,而CPU在此期间不响应中断

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

2.  0108是偏移地址IP,150F是程序段地址CS,因为中断时需要保存原来程序的入口

 

实验任务6

 

使用masm、link,汇编、链接,得到可执行文件task5.exe。运行程序。结合程序运行结果,理解程序功能。

 

在debug中,使用d命令,查看task6.exe的程序段前缀,观察这256个字节的内容,验证前两个字节是否是CD 20

 

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
输出 结果为0123456789 实验1 8086汇编指令编码和调试 161F :0000处确实为CD 20,以及程序名在161F:0080 实验1 8086汇编指令编码和调试

实验任务7

下面程序的功能是,完成自身代码的自我复制:把 mov ax, 4c00h 之前的指令复制到内存0:200开始的 连续的内存单元。 补全程序,并在debug中调试验证,确认是否正确实现了复制要求

assume cs:code
code segment
mov ax, cs
mov ds, ax  ;数据段就是程序段
mov ax, 0020h
mov es, ax
mov bx, 0
mov cx, cx; cxw为程序长度
s: mov al, ds:[bx]
mov es:[bx], al
inc bx
loop s
mov ax, 4c00h
int 21h
code ends
end
复制成功 实验1 8086汇编指令编码和调试
上一篇:鲲鹏服务器SP进不去满屏刷ERROR


下一篇:IBM X3650 M3/M4的服务器装系统