1. 教材实验1结论

  • 实验任务(1)

  使用Debug,将程序段写入内存,逐条执行,观察指令执行后CPU中寄存器中的内容变化。

  

  • 实验任务(2)

  将指令写入从2000:0开始的内存单元中,并使用指令计算2的8次方。

  

  继续使用T命令执行下去,0003单元中的指令共执行8次,0005单元中的指令执行7或者8次。共需执行16/17次T命令。

  • 实验任务(3)

  找出内存中的生产日期,尝试修改。

  

  修改后好像数据并没有发生变化,地址C0000~FFFFF是各类ROM的地址空间,向地址C0000~FFFFF的内存单元中写入数据相等于改写只读存储器中的内容所以操作是无效的。

  • 实验任务(4)

向内存从地址B8100H开始的单元中填写数据并观察产生的现象。

  

  向地址A0000~BFFFF的内存单元中写入数据,就是向显存中写入数据,这些数据会被显卡输出到显示器上。

  输入内容前面的表示形状,后面的表示颜色,一个形状对应一个颜色,前面内存地址的数值对应输出图形的具体位置,后面执行的指令会覆盖前面指令所进行的操作。

2. 教材实验2结论

  • 实验任务(1)

  

  

  

  

mov ax,0022
mov ds,ax

mov ax,2000
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;修改的内存单元的地址是220FF:220FE内容为A4A2
push bx                       ;sp=00FC;修改的内存单元的地址是220FD:220FC内容为ACAA
pop ax                        ;sp=00FE;ax=ACAA
pop bx                        ;sp=0100;bx=A4A2

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

  

  • 实验任务(2)

  

  前3行汇编指令的功能:

mov ax,2000            //将数值2000放入ax中
mov ss,ax                //设置栈的段地址,通过ax中转数据
mov sp,10                //设置栈顶的偏移地址

//栈底20000 栈顶20010

  两条指令执行后靠近栈顶的10个字节中值立即有了变化,是对定义栈段时部分运行环境变量进行暂存,靠近栈顶的10个字节中的暂存数据分别是SS、IP、 CS 等的值。

  因为在用T指令在进行调试时,会产生中断。而为了保护现场,CPU先把标志寄存器入栈,再把CS IP分别入栈。

 

  

posted on 2020-10-11 15:20  Nibelungenlied  阅读(114)  评论(3编辑  收藏  举报