实验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值进栈。

 

posted @ 2020-10-12 21:40  北暮  阅读(190)  评论(4)    收藏  举报