实验1 用机器指令和汇编指令编程
1、教材实验1
(1)使用debug,将下面的程序段写入内存,逐条执行,观察每条指令执行后CPU中相关寄存器中内容的变化。
机器码 汇编指令
b8 20 4e mov ax,4E20H
05 16 14 add ax,1416H
bb 00 20 mov ax,2000H
01 d8 add ax,bx
使用e命令:

使用a命令:

(2)将下面3条指令写入从2000:0开始的内存单元中,利用这3条指令计算2的8次方。
mov ax,1
add ax,ax
jmp 2000:0003


(3)查看内存中的内容。
PC机主板上的ROM中写有一个生产日期,在内存FFF00H~FFFFFH的某几个单元中,请找到这个生产日期并试图改变它。
使用d命令查询内存FFF00H~FFFFFH,查询到日期为1992-01-01:

使用e命令修改相应内存单元,修改失败:

分析原因:地址为C0000H~FFFFFH的内存单元是ROM的地址空间,而ROM是只读存储器,所以向其写入数据的操作是无效的。
(4)向内存从B8100H开始的单元中填写数据,如:
-e B810:0000 01 01 02 02 03 03 04 04
请读者先填写不同的数据,观察产生的现象;再改变填写的地址,观察产生的现象。
输入题目中给定的数据:

改变数据:


改变地址:

结论:改变数据会改变图形的颜色以及形状,改变地址会改变图形的位置。
2、教材实验2
(1)使用Debug,将下面的程序段写入内存,逐条执行,根据指令执行后的实际运行情况填空。
mov ax,0022
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;修改的内存单元的地址是2200:00FE,内容为A4A2
push bx ; sp=00FC;修改的内存单元的地址是2200:00FC,内容为ACAA
pop ax ; sp=00FE;ax=ACAA
pop bx ; sp=0100;bx=A4A2
push [4] ; sp=00FE;修改的内存单元的地址是2200:00FE,内容为5554
push [6] ; sp=00FC;修改的内存单元的地址是2200:00FC,内容为
使用a命令输入相应程序段:

使用t命令进行单步指令执行:




结论:理论答案与实践结果一致。
(2)仔细观察图3.19中的实验过程,然后分析:为什么2000:0~2000:f中的内容会发生改变?




前3行汇编指令的功能,特别是mov sp,10意味着什么?初始时栈顶和栈底分别是?
mov ax,2000 表示将段地址2000H存入常用寄存器ax中。
mov ss,ax 表示将常用寄存器ax中的值存入栈的段寄存器ss中作为栈的段地址。
mov sp,10 表示将10存入栈指针寄存器sp中作为栈的偏移地址。
初始时栈顶为:2000:0010
初始时栈底为:2000:0010
栈内容变化的原因分析:
可能是因为使用t命令单步执行时,会将某些重要的数据暂存到栈中,而有些值会在执行入栈的操作时会将该相应地址的值变为入栈的值,将CS和IP向前移动。

浙公网安备 33010602011771号