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

由于上述操作指定了内存地址,所以需要利用r命令修改寄存器的内容
用T命令逐条执行

②用A命令的方式将指令写入内存

由于上述操作没有指定寄存器的地址,所以不需要修改
用T命令逐条执行

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

调试开始部分:

调试出正确结果部分:

·实验任务(3)
查看内存中的内容
PC机主板上的ROM中写有一个生产日期,在内存FFF00H-FFFFFH的某几个单元中,请找出这个生产日期并试图改变它。

试图改变生产日期

说明:改变失败。地址A000H-FFFFH的24KB空间为各个ROM的地址空间,内存单元中的内容不会被改变,而生产日期就储存在这些内存单元中,所以不能被改变。
·实验任务(4)
向内存从B8100H开始的单元中填写数据,如:
-e B810:0000 01 01 02 02 03 03 04 04
请读者先填写不同的数据,观察产生的现象;再改变填写的地址,观察产生的现象。

改变填写的数据:

说明:地址8000H-9FFFH的8KB空间为显存地址空间,地址B810属于显存地址空间,CPU向内存单元中写入数据,这个数据就被写入显存中,然后会被显卡输出到显存器上。
改变填写的地址:

说明:地址0-7FFFH的32KB空间为主随机存储器的地址空间,CPU向内存单元中写入数据,这个数据就被写入主随机存储器中。
2.教材实验2结论
·实验任务(1)
①使用e命令修改内存单元0022:0-0022:f中的数据及修改后查看是否正确写入的操作

说明:能够正确写入
②使用a命令输入的p74指令

③每一行指令单步调试



④实验前填写的结果:

说明:实验前填写的结果有一处错误,出栈时先出的是ACAA,而我没有意识到这一点,所以出现了错误。
·实验任务(2)
①使用a命令输入的7行指令,使用e命令修改2000:0-2000:f的值,及修改后查看的部分

②单步调试每一行汇编指令的截图。每一条指令单步调试后,都使用d命令查看2000:0-2000:f的值。观察每一条指令执行后相关寄存器值的变化,及2000:0-2000:f单元值的变化,并思考原因。



① 前3行汇编指令的功能,特别是,mov sp, 10意味着什么?初始时栈顶和栈底分别是?
汇编指令 功能
mov ax,2000 将数据2000写入寄存器ax中
mov ss,ax 设置栈的段地址,ss=2000H,不能直接向段寄存器ss中送入数据,所以用ax中转
mov sp,10 设置栈顶的偏移地址,因栈为空,所以sp=0010H
mov sp, 10意味着安排2000:0000-2000:000F为栈空间,初始时栈顶是2000:0010,栈顶是2000:0010
② 基于单步调试观察到的变化,给出你对此的思考及可能原因分析。
在debug中t命令在执行修改寄存器ss的指令时,会产生中断,将现场保护起来,下一条指令也会被执行。
CPU先将标志寄存器进栈,再把当前的cs的值进栈,最后ip值进栈。

浙公网安备 33010602011771号