实验1 用机器指令和汇编指令编程

实验1

1、教材实验1

(1)实验任务1

使用E命令写入内存:

使用R命令观察寄存器情况,并使用T命令单步执行:

使用A命令写入内存:

使用R命令观察寄存器情况,并使用T命令单步执行:

 

(2)实验任务2

使用A命令写入内存:

使用T命令单步执行:

由于使用无条件跳转命令jmp,计算机在完成2^8的计算后仍将继续运算。

 

(3)实验任务3

使用D命令查看内存地址FFFF5H至FFFFCH的内容:

可见ROM芯片为1992年1月1日生产。

尝试使用E命令修改,并再次使用D命令查看:

可见E命令得到了执行,debug程序并不报错,但内存中的值并没有变化。这是由于该位置为ROM区,向其中写入数据是无效的。

 

(4)实验任务4

使用E命令向内存单元中填写数据:

可见屏幕右上角出现了特殊字符,并可改变颜色。这是由于B8100H为显存所映射的地址,E命令修改了显存中的数据,使显示发生变化。

 

2、教材实验2

(1)实验任务1

使用E命令将内存单元 0022:0 ~0022:7连续 8 个字节数据修改为 50H, 51H, 52H, 53H, 54H, 55H, 56H, 57H:

使用A命令将程序段写入内存:

使用R命令查看寄存器状况,并使用T命令单步执行:

 

可见:

mov ax,0022
mov ds,ax

mov ax,2200
mov ss,ax

mov sp,0100

mov ax,[0]        ;ax=5150
add ax,[2]        ;=A4A2
mov bx,[4]        ;bx=5554
add bx,[6]        ;bx=ACAA

push ax           ;sp=00FE;修改的内存单元的地址是2200:0100,内容为A4A2
push bx           ;sp=00FC;修改的内存单元的地址是2200:00FF,内容为ACAA
pop ax            ;ax=ACAA
pop bx            ;bx=A4A2

push [4]          ;sp=00FE;修改的内存单元的地址是2200:0100,内容为5554
push [6]          ;sp=00FC;修改的内存单元的地址是2200:00FF,内容为5756

 

(2)实验任务2

 使用A命令将代码写入内存中,并使用D命令查看2000:0到2000:F中的内容:

使用T命令单步执行,并使用D命令查看2000:0到2000:F中的内容:

 

 

 

 

可见,其中的内容在持续变化。

这是由于

mov ax,2000
mov ss,ax
mov sp,10

将栈顶设置为了2000:0010,即初始时栈顶与栈底均为2000:0010。而8086CPU中,栈是从高地址向低地址增长的,即2000:0000到2000:000F位于栈区中,因此,CPU会自动将其初始化,并使用一部分内存资源维护硬件栈。而当PUSH AX指令被执行时,AX寄存器中的值被压入栈中,栈顶元素即被修改为AX的值。

posted @ 2020-10-14 18:12  SpeakLessPoiMore  阅读(45)  评论(2编辑  收藏  举报