实验1 用机器指令和汇编指令编程
教材实验1结论:
(1)
首先用e命令用机器码写入指令,然后用u命令进行反汇编,查看内存中的命令是否如我们所希望的那样,然后用t命令进行单步运行,这里需要注意的是使用t命令时一定要小心的CS:IP的指向,这里我是直接将0:200赋值上去。


运行的结果中:
1)第一步中改变了ax的值,还有IP进行自动的增加;
2)第二步中将ax的值加上1416H,还有IP进行自动的增加;
3)第三步中改变了bx的值,还有IP增加;
4)第四步将ax与bx中的值相加,并且赋值给ax,IP增加;
用a命令使用汇编指令的格式写入,并且用t命令进行单步运行。

(2)
下图是使用a命令在指定的区域2000:0进行命令的写入以及使用t命令进行单步运行的开始部分,这里也需要注意CS:IP值的指向。

下图为计算2^8的最终结果

只需要不断的用t单步执行,第二行和第三行的命令形成了一个循环,这个循环每循环一次就将ax的值乘上2,因此最终需要循环上8次即可计算2^8,
这里的结果显示为0100H,转化为十进制即为256。
(3)
首先在题目要求的FFF00H~FFFFFH中使用d命令进行查询,查询到生产日期为1992年1月1日。

然后我试图用e命令对其进行修改,但并没有成功修改,因为这个操作类似于改写只读存储器的数据。

(4)
按照题目要求用e指令向指定的位置写入数据,发现出现了彩色的符号,这是因为这是向显存中写入数据,写入的数据会直接显示在显示器上。

这里我更换写入的数据会显示出不同的彩色符号

教材实验2结论:
(1)
用e命令修改内存单元0022:0~0022:f的数据,并用d命令查看修改后是否正确。

使用a命令进行命令的输入

下面是每一行指令的单步调试,其中mov ss, ax指令会带动下面的mov sp, 0100一起执行



下面是填空的结果,与设想的一致
mov ax, 0022 mov ds, ax mov ax, 2200 mov ss, ax mov sp, 0100 mov ax, [0] ax=5150 mov ax, [2] ax=A4A2 mov ax, [4] bx=5554 mov ax, [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; ax=A4A2 push [4] sp=00FE; 修改的内存单元的地址是2200:00FE内容为5554 push [6] sp=00FC; 修改的内存单元的地址是2200:00FC内容为5756
(2)
用a命令输入题目中的指令

使用e命令修改指定区域的值,并用d命令查看

下面是单步调试每一条指令,并且用d命令来查看2000:0~2000:f之间的值的变化情况


问题一:前三行指令中,mov ax, 2000是将ax赋值为2000,将ss赋值为ax,(利用ax中转对ss进行赋值),最后将sp赋值为10。
mov sp, 10是初始化栈顶偏移地址为10,初始的栈顶和栈底都是2000:10
问题二:单步调试中发现在未对2000:0~2000:f进行操作的时候,其中的值却发生了变化。我认为和执行mov ss, ax时带动mov sp, 10一起执行有关,可能会导致一些数据存储到该段内存空间中。
浙公网安备 33010602011771号