微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 第6章 动手操作-DEBUG的使用2(X86汇编教程)

第6章 动手操作-DEBUG的使用2(X86汇编教程)

时间:12-01 来源:互联网 点击:
本章将真正开始教你一些汇编指令,也许你早就期待着了.好,首先说汇编指令的格式(看不懂的话不要纠结在这里,继续看,后边会进行讲解!):

[代码标号][:]<指令名>[空格][操作数1][,][操作数2]

打了尖括号的是每行汇编代码都必须有的,打方括号的是看情况决定有没有的,详解:

标号(这个暂时不用理解,先大概看看,以后讲到了再理解.):

之前说过,汇编代码是在内存中的,所以,每行代码都会在内存中占用一定字节,当然,也就有了个地址.有的时候我们可能会需要用到某行代码的地址,代码将会被放到内存的什么地方,一般在代码编译出来就会计算好.所以在代码中可以直接输入那行代码在内存中的地址.但是呢.假如修改了代码,那内存地址不就变了吗? 所以人们想了这么个办法:用一句文本代替数字地址,等编译器编译的时候计算出那行文本所代表的代码的地址再自动填写进引用到那句文本的地方.

":":

这个是跟在标号后边的,把标号和指令名区分开来(就算特殊情况标号后边没有任何东西也必须加":").

指令名:

汇编代码的指令,CPU根据指令知道要做什么事.

空格:

把指令和操作数区分开来.

",":

把2个操作数区分开来

操作数:

执行指令所需要的数据,比如我们在数学中要进行除法运算,需要被除数和除数这2个"操作数",在汇编里,汇编指令也需要相应的操作数才能进行计算,需要多少个操作数由指令决定,有些指令不需要操作数,有些需要1个,有些需要2个)

第一个指令

相信你已经从前边的内容中学会了汇编的语法格式.现在将教你1个指令,并教你在Debug中输入它进行测试.指令资料:


指令名:MOV

操作数数量:2

操作数用途:目标操作数,源操作数

指令用途:把一个数据从源操作数复制到目标操作数


我希望你能写一个笔记,把将来教的各种指令记录下来.这对学习有好处,指令手册什么的,只有手册作者的理解,无法写入你自己的理解.人家写的你不一定看的懂.

好了,接下来,在Debug里面试一下这个指令吧.打开DeBug,用A指令进入[汇编代码编辑模式](不要急着输入代码,先看讲解!!!)


汇编代码编辑模式讲解

根据上图,你会看到右边显示一个内存地址,你输入的代码将被转换成机器码放到这个地址.旁边有一个光标,这就是你输入汇编代码的地方了.在这里输入代码,按下回车,就会直接将该行代码转换成机器码,并计算出长度.如果输入的代码有错误,DeBug会在错误处下面显示:"Error"

DeBug并不是汇编编译器,所以对汇编代码是有限支持,标号是不给用的,只支持十六进制,至于二进制和十进制,反正我是没在这里用到过.

好了,来试试MOV指令吧,用MOV往寄存器AX里写入数据1234H.

把1234H写入AX,那么1234H就是"源操作数"了,AX就是"目标操作数"了,代码这么写(注意指令名和第一个操作数之间的空格,不要漏了!):

MOV AX,1234

输入指令后回车,你会看到DeBug还在代码编辑模式.在么退出代码编辑模式呢?直接空代码回车即可:


代码编辑成功,如何执行刚才输入的代码呢?不急,先看看寄存器内容吧,R指令:


首先看,AX寄存器.内容是0000,接着看内容的最下方.之前看不懂的一行.现在已经基本能看懂了.这里显示的是即将执行的代码(地址为:CS段寄存器:IP偏移寄存器)格式如下:

内存地址(段:偏移) 机器码(数字代码) 反汇编(汇编代码转机器码了,机器码转回汇编代码叫反汇编)

由上可见MOV AX,1234的机器码是B8 34 12(这个34 12就是第2个操作数了,至于为啥会反过来,这是高位低位排序原因,请自行翻阅之前的章节)好了,来执行代码看看吧(终于执行代码了TAT),在 DeBug中,用T指令可以执行一行代码.执行看看:

T 回车

好了执行完毕.看看AX寄存器的内容:


成功了,我们用汇编指令把一个数字写入到了AX寄存器里.

这一章就讲到这里,给个小作业,试试看把1234H写入BX寄存器,然后把BX寄存器的内容复制到AX寄存器,成功后把代码回复上来~


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top