实验1 用机器指令和汇编指令编程
实验1 用机器指令和汇编指令编程
1. 教材实验1结论
实验任务(1)
先使用e指令写入4条机器码指令,其中地址随便弄的(1000:0),然后通过r命令查看了当前各个寄存器的值,此时AX、BX的值均为0,CS:IP指向为 073F:0100。为了使之前输入的指令能被当即执行,所以通过r修改了当前的CS:IP的指向。修改后,通过r命令查看了当前各个寄存器的值,此时CS:IP指向为 1000:0000,且CPU下一步要执行的指令变成了“MOV AX, 4E20”,也就是机器码“b8 20 4e”对应的汇编指令。



接着使用t命令完成单步调试。

实验任务(2)
然后用a命令写入指令,由于之前已经将当前CS:IP地址改为 2000:0000,所以 a 后面的地址可以省略。

接着不断使用 t 命令进行单步执行。

在执行过 8 次“ADD AX, AX”指令后可以求得 2 的 8 次方(即:0100),最后结果如下图所示
实验任务(3)
接着使用 e 命令修改FFFF5开始的 8 个内存单元中的内容并再次使用 d 命令查看FFF00H~FFFFFH内存单元中的内容,发现生产日期并没有被改变,依旧是 01/01/92。
原因应该是日期信息位于内存ROM区,无法对其进行写入修改。
实验任务(4)
接着修改前六个数据:-e B810:0000 07 12 24 27 66 66 04 04 ,前面三个图案有变化,最后一个没有变化。
最后修改填写的地址:-e 1000:0000 01 01 02 02 03 03 04 04 ,屏幕上不再出现任何图案。

说明:在8086PC机的内存中,从A0000~BFFFF的内存单元是显存地址空间,所以向 B810:0000 开始的内存单元写数据就是向显存写数据,这些数据转换成ASCLL码后又会被显卡输出到显示器上,在屏幕对应位置显示相应的图案。
2. 教材实验2结论
教材实验2中「2. 实验任务」(P74)实验任务(1)
② 截图记录:使用 a 命令输入的 p74 指令

③ 截图记录:每一行指令单步调试(如单步调试步骤多,可分屏截图,但不要有遗漏)




mov ds,ax
mov ax,2200
mov ss,ax
mov sp,0100
mov ax,[0] ;ax=5150
add ax,[2] ;ax=A4A2
mov bx,[4] ;bx=5554
add bx,[6] ;bx=ACAA
push ax ;sp=00FE ;修改的内存单元的地址是0022:00FE 内容为A4A2
push bx ;sp=00FC ;修改的内存单元的地址是0022:00FC 内容为ACAA
pop ax ;sp=00FE ;ax=ACAA
pop bx ;sp=0100 ;bx=A4A2
push [4] ;sp=00FE ;修改的内存单元的地址是0022:00FE 内容为5554
push [6] ;sp=00FC ;修改的内存单元的地址是0022:00FC 内容为5756
经检验,理论分析与实验结果一致
实验任务(2)

1、从 MOV AX, 3123 这条指令开始 2000:0 ~ 2000:f 中的值就发生了变化,出现了不需要的数字。
2、在栈顶所在位置的 SP-2 的内存单元中存放的始终是AX 中的值。
3、虽然栈底的位置在 20012H,但是入栈时却是从 20015H 开始存数据的。
我觉得出现以上情况的原因可能是 因为 MOV SP, 10 这条由于中断机制被自动执行的指令。

浙公网安备 33010602011771号