实验1 8086汇编指令编码和调试
实验任务二
PC机主板上的ROM中有一个生产时期,在内存FFF00H ~ FFFFFH的某几个单元中,请找到这个生产时期,并试图修改它。
在debug中,使用d命令查看生产日期
使用e命令修改生产时期所在的内存单元,修改后,再次使用d命令查看

结论:发现尝试修改ROM的生产日期时操作是无效的,原因是ROM芯片是只读不可写的,固然无法更改其中的生产日期。
实验任务三
在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。

实验任务四
(1) 单步执行,在执行push指令和pop指令时,观察并记录栈顶偏移地址的寄存器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) push [6] 指令执行结束后, pop [6] 指令执行结束前,使用d命令 d 20:20 2f 查看此时栈空间的数据。

(3) pop [0] 指令执行结束后,使用d命令 d 20:0 7 查看此时数据空间内的数据是否有变化。

汇编指令执行完之后,内存空间的数据没有发生变化。
(4) 如果把最后四条指令改成截图中的顺序, pop [6] 指令执行结束后,使用d命令 d 20:0 7 查看此时数据空间内的数据是否有变化。

在改变顺序之后,顺序发生了改变,因为出栈的顺序发生了改变。
实验任务五

(1)没有暂停,mov ss,ax和mov sp,30 继续执行。
这里涉及到了中断,原本在第二次t命令之后,cs:ip指向的命令是mov ax,2010,而不是原本的mov sp,30。ss的内容送入之后,sp的内容也立刻被送入。
(2)08 01 为偏移地址。3F 07 为程序段地址,作为暂存地址,在该程序中存在中断机制,需要暂存原程序的入口,故存了下来。
实验任务六
task6经过masm、link、运行结果如下

最终结果输出了0123456789
查看PSP内容

程序的前两个字节是CD 和20
实验任务七
(1)代码补全后为
1 assume cs:code 2 code segment 3 mov ax, cs 4 mov ds, ax 5 mov ax, 0020h 6 mov es, ax 7 mov bx, 0 8 mov cx, 23 9 s: mov al, [bx] 10 mov es:[bx], al 11 inc bx 12 loop s 13 14 mov ax, 4c00h 15 int 21h 16 code ends 17 end
程序将要完成的功能是复制部分自身代码至内存0:200开始的连续内存单元。此代码实现的功能是将内存单元ds:[bx]处开始的数据复制至内存单元es:[bx]处。因此第一空填cs,将程序段首地址信息送入段寄存器ds中;第二空的数字即复制字节的循环次数,使用debug调试程序知被复制代码的长度为23字节,因此填23。
(2)用g命令运行部分代码和使用u命令反汇编0:200处内存空间数据:

确定代码复制到了目标空间

浙公网安备 33010602011771号