汇编语言学习(二)用机器指令和汇编指令编程

一、Debug知识补充

此处再补充一些Debug的知识:

(1)关于D命令:

从上次实验中我们知道D命令用来查看内存单元当中的内容,如:d 段地址:偏移地址 的格式。
在这次实验之前,我们又再次了解到,段地址存放在段寄存器中,在d后直接给出段地址,是Debug提供的一种直观的操作方式。
D命令是由Debug来执行的,则Debug在执行“d 1000:0”时,也会先将1000H送入段寄存器中。
debug又靠什么来执行D命令呢?
当然是程序。
谁来执行程序?
当然是CPU。
CPU访问内存单元又从何处得到内存单元的段地址?
是段寄存器。
所以,debug在处理d命令的程序段中,必须有将段地址送入段寄存器的代码。
又想到,8086PC机中,段寄存器有四个,分别是:DS/SS/CS/ES。
首先肯定不是CS,因为CS:IP要指向debug处理d命令的代码;也不能是SS,因为SS:SP必须时刻指向栈顶。
则只剩下DS/ES,应该放到哪个呢?
我们知道DS是存放欲访问数据的段寄存器,如"mov ax,[0]",则当debug在执行“d 段地址:偏移地址”时,此时将段地址送入ds比较方便。
而d命令也提供了一种符合CPU机理的格式:
如下:

查看从1000:0开始的内存区间中的内容
在这里插入图片描述
查看1000:10~1000:18中的内容
在这里插入图片描述
查看当前代码段的内容
在这里插入图片描述
查看当前栈段的内容(初始SS和CS一致)
在这里插入图片描述

(2)在E、A、U命令中使用段寄存器

在1000:0开始内存区间中写入数据
在这里插入图片描述
以汇编指令的形式,显示当前代码段中的代码
在这里插入图片描述
以汇编指令的形式,向从1000:0开始的内存单元中写入指令
在这里插入图片描述

(三)下一条指令是否执行?

用a命令写入一段程序:
在这里插入图片描述
在这里插入图片描述
我们可以发现本来在执行mov ss,ax之后,应该执行mov sp,10,怎么跳了一步?
我们再仔细观察sp,发现它由00FD变为了0010,说明mov sp,10确确实实被执行了。
除此之外,我们还发现"mov ss,bx" “mov ss,[0]” "pop ss"等指令都会发生上面的情况,而它们的共性就是,都与SS寄存器有关系。

现在我们还难以彻底说明其中的原理,这部分需要我们深入地学习中断机制原理,这里我们只需要知道t命令执行修改ss寄存器时,下一条指令也紧跟着被执行。

二、实验任务

发布了21 篇原创文章 · 获赞 1 · 访问量 1563

猜你喜欢

转载自blog.csdn.net/qq_33566628/article/details/104042222