您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 其它行业文档 > 计算机原理_3 寻址方式和指令系统
第三章寻址方式和指令系统第一节基本概念第二节寻址方式第三节指令系统附录DEBUG软件的使用说明第一节基本概念指令控制与存储程序是计算机的基本特征CPU根据指令的要求执行相应的操作,指令从存储器中获取。程序:使计算机完成一个任务的一组命令或指令序列。指令:使计算机执行某一特定操作的二进制编码。(为了记忆和表示的方便,通常使用助记符来表示)指令系统:CPU所能够执行的指令的全集。机器语言:二进制指令编码汇编语言:用指令助记符和伪指令组成高级语言:接近于自然语言,使用方便(汇编语言和高级语言都需要使用编译器,翻译成机器语言,才能够被计算机识别并执行)寻址方式操作码:规定所要执行的操作类型指令操作数:所要处理的数据或数据的位置信息在操作数部分通常不是直接给出操作数的数据本身,而是给出该数据的位置信息,我们把如何获得数据的方式称为寻址方式。例如:指令MOVAX,1234H在这条指令里有两个操作数,按照指令中所处的位置,将前者称为目的操作数,后者称为源操作数。该指令的作用是把数据1234H传送到AX中。源操作数是“立即”寻址方式,目的操作数是“寄存器”寻址方式。第二节寻址方式8086微处理器指令系统中有133条指令,寻址方式灵活多样。通常可以分为两大类:数据的寻址和程序的寻址。一、数据的寻址方式(一)固定寻址指令中已经默认对微处理器中的某寄存器进行操作,不用在指令中指明使用的寄存器。例如:AAA指令,只有操作码,没有操作数,但是已经规定是进行BCD码加法运算以后对AL进行调整。(二)立即寻址操作数直接写在指令中,在指令译码执行时,可以立即得到,同时把操作数也称为“立即数”。(三)寄存器寻址操作数放在微处理器内部的寄存器中,在指令中直接指出寄存器的名字。立即寻址和寄存器寻址的例子在前面已经举过。这三种寻址方式直接在处理器内部获得数据,操作速度快。(四)存储器操作数的寻址方式操作数存放在存储器中,指令执行时必须通过总线在存储器中存取操作数。EU根据指令中给出的寻址方式计算出16位的偏移量,称为有效地址(EA)送到BIU,经过地址加法器生成20位实际物理地址后对存储器进行操作。一般在表示EA时,用[操作数]表示。计算EA要费时,进行总线操作较慢,所以存储器操作数寻址比前三种要慢。1、直接寻址MOVAX,[1234H];在源操作数中直接给出EA。在上例中,默认使用的是数据段,如果要使用其它段,可以使用段超越前缀声明。例如:MOVAX,ES:[1234H]在指令中,有四个段超越前缀:CS、DS、ES、SS2、间接寻址MOVAX,[BX];在源操作数中给出一个表示EA的寄存器名。可以表示EA的寄存器有4个BX、SI、DI、BP。BP默认使用堆栈段BXSI默认使用数据段DI3、相对寻址MOVAX,[BX+1000H];在源操作数中给出的是寄存器和立即数,EA是它们的和。有时也写成:MOVAX,BX[1000H]或MOVAX,1000H[BX]基址寄存器变址寄存器在C语言中常使用的全局数组,一般写成x[0],x[1],x[2]等形式,实际上x在编译的时候就换成具体的在数据段中分配的位置,例如是1000H。那么就是1000H[BX]这种形式。4、基址变址寻址MOVAX,[BX+SI];用基址寄存器和变址寄存器的和表示EA。5、相对基址变址寻址MOVAX,[BX+SI+1000H]用基址寄存器、变址寄存器和立即数的和表示EA。在对存储器中操作数寻址中,如果表示的EA中有BP,默认使用堆栈段;否则默认使用数据段。也可以使用段超越前缀来指明要使用的段。(五)I/O端口操作数的寻址方式操作数存放在I/O端口中,指令执行时必须通过累加器(AX或AL)存取操作数。在8086中端口地址是独立编址的,需要使用专门的指令来进行操作。共有2条:输入指令IN和输出指令OUT。1、直接寻址INAL,60H;在端口寻址时,地址不需要加[]。当端口地址可以用一个字节表示时,可以使用直接寻址。2、间接寻址MOVDX,1000HOUTDX,AL;实际上就是用DX来间接表示端口地址。比较:MOVDX,AX;把寄存器AX中的数据传送到寄存器DX中。OUTDX,AL;把寄存器AL中的数据输出到DX所表示的I/O端口上去。二、程序的寻址方式(一)段内直接寻址短跳转:把IP的内容加上一个字节补码数作为新的IP。近调转:把IP的内容加上二个字节补码数作为新的IP。(二)段内间接寻址用寄存器或是存储器操作数的内容赋给IP。(三)段间直接寻址直接在指令中给出新的CS和IP内容。(四)段间间接寻址用存储器操作数的内容赋给CS和IP寄存器。第三节指令系统8086微处理器指令系统中有133条指令,根据指令的操作性质可分为六大类。1、传送类指令2、运算类指令3、逻辑类指令4、转移类指令5、串操作指令6、控制类指令8086指令系统详细介绍请参见——8086指令教程(指令系统.HTM)附录DEBUG软件的使用说明DEBUG软件是DOS系统下的汇编语言调试分析工具。在DOS下,执行DEBUG.EXE程序,出现提示符-,进入到DEBUG调试环境。在该环境默认使用十六进制数据,并不加后缀H;地址一般由段地址和偏移量组成;如果在命令中不指明段地址,默认使用数据段段地址(DS)。进入DEBUG环境后,可以按Q退出,或按?察看帮助。命令介绍1、汇编命令A一般用法:—A从当前地址输入汇编源程序—A地址从指定位置输入汇编源程序2、反汇编命令U一般用法:—U从当前位置将机器码反汇编成源程序—U地址从指定位置将机器码反汇编成源程序—U地址1地址2按照指定位置将机器码反汇编成源程序执行A命令后所见到的画面:执行U命令后所见到的画面:即时编译,发现语法错误马上指出段地址和偏移量指令的机器码反汇编得到的指令输入指令以回车结束自动分配的地址3、显示内存命令D一般用法:—D从当前地址开始显示128字节的内容—D地址从指定位置开始显示128字节的内容—D地址1地址2显示指定位置内存单元的内容4、修改内存单元命令E一般用法:—E地址显示指定地址的内存单元的内容并修改—E地址数据修改指定地址的内存单元的内容多个数据可以用空格隔开;可以用回车完成修改。5、显示并修改寄存器命令R一般用法:—R显示所有寄存器的内容—R寄存器名显示并修改指定寄存器的内容段地址和偏移量可显示的ASCII码字符16个字节的十六进制形式的数据执行D命令后所见到的画面每8个数据之间用-隔开标志寄存器内容的说明:在DEBUG环境中用一些符号表示其中标志位的内容:标志名取逻辑真取逻辑假OFOVNVDFDNUPIFEIDISFNGPLZFZRNZAFACNAPFPEPOCFCYNC*DEBUG中不提供TF标志的说明。6、执行命令G一般用法:—G从当前IP指示的地址开始执行程序—G=起始地址从指定的地址开始执行程序—G=起始地址断点地址从指定的地址开始执行程序,并且执行到断点地址处暂停。7、单步执行命令T和PT:跟踪进入子程序P:不跟踪进入子程序一般用法:—T执行一条指令—Tn执行n条指令8、其他命令N(定义名字)、W(写磁盘)、L(从磁盘装入)1、写汇编程序—AMOVDX,10CMOVAH,9INT21MOVAH,4CINT212、写数据—E10C‘Hello!’7‘$’3、运行程序—G=1004、取程序名字—Nhello.com取名字5、设置程序长度—RBX设置程序长度:064K的倍数—RCX设置程序长度:20字节数6、写入磁盘—W存盘7、执行—G=100或:退出后,在DOS下执行Hello.com8、装入程序—Nhello.com—L综合举例:在屏幕上显示Hello!并响铃。1、首先在调试环境下写好程序、存盘。并记下程序的地址区间和数据的地址区间。2、把DEBUG命令写成文本文件TEMP。每个命令占一行,最后用Q退出DEBUG。例如:Nhello.comLU10010B命令文件D10C113Q生成办法:(1)EDITTEMP或(2)COPYCONTEMP3、利用DOS的重定向命令生成文本文件LIST.TXT。方法:(1)DEBUGTEMPLIST.TXT(2)TYPETEMP¦DEBUGLIST.TXT综合举例:反汇编并生成文本文件。(1)INT3断点指令(2)MOVAH,4CINT21程序结束调试环境下一些习惯用法(3)—D0察看DOS管理的RAM空间的最高段地址。
本文标题:计算机原理_3 寻址方式和指令系统
链接地址:https://www.777doc.com/doc-3675245 .html