Java教程

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

本文主要是介绍实验1 8086汇编指令编码和调试,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
实验任务2 (1)在debug中,使用d命令查看生产日期 (2)使用e命令修改生产时期所在的内存单元,修改后,再次使用d命令查看   重启debug,可见未发生变化 结论:ROM内存单元是只读的,不可以修改。

实验任务3

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

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

 

输入指令进行单步跟踪

-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]前

  

3. pop[0]执行结束后

4. 最后4条指令翻转后,会变成70 80 50 60 30 40 10 20

 

实验任务5

输入如下内容

 

 

 

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

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 161F :0000处确实为CD 20,以及程序名在161F:0080

实验任务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汇编指令编码和调试的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!