您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 建筑材料 > 微机原理与接口技术第4章
第4章指令系统•4.1概述•4.280486寻址方式•4.380486标志寄存器•4.4汇编语言语法规则之一•4.580486基本集指令4.1概述1.指令:通知CPU执行某种操作的“命令”,CPU全部指令的集合,称为指令系统2.指令的书写格式目标指令(机器指令):用一串0,1代码书写注意:硬件只能识别,存储,运行目标指令符号指令:用规定的助记符,规定的书写格式书写的指令80486符号指令与机器指令对照表操作80486符号指令80486机器指令1234H→AXMOVAX,1234HB83412AX+BX→AXADDAX,BX03C3CX-DX→CXSUBCX,DX2BCA返回调用程序RETC3MOV:MOVE传送ADD:加SUB:减RET:RETURN返回指令的组成:操作码+操作数操作码——告诉计算机要执行的操作是什么,如:加、减、逻辑与等。操作数——执行操作过程所要操作的数,如加运算的两个加数。3.指令的组成4.目标程序的生成汇编源程序编辑、编译、链接可执行的机器指令程序(目标程序)5.指令长度486指令长度(机器指令长度)为1~16字节规定:多字节指令占用连续的内存单元,存放指令第一字节的内存地址,称为“指令地址”。CPU只能识别,存储,运行目标指令,而用机器指令编程非常困难。于是早期的专家们发明了符号指令,再经过软件把符号指令→机器指令。图示如下:6.指令存放如:12345H单元中有一条指令MOVAX,6789H67H89HB8H12345H:操作码操作数6789HMOVAX,6789H先写操作码,再写操作数。多字节操作数连续存放。存放规律:低位字节存放在低地址单元,高位字节存放在相邻的高地址单元8.符号指令的书写格式标号:操作码助记符空格操作数助记符;注释如:NEXT:ADDAX,BX;AX+BX→AXINCSI;SI+1→SI标号:以字母开头,后跟字母,数字,下划线,长度≤31字符标号又称符号地址,代表该指令的逻辑地址。可有可无,设置是为了程序的转向注解:以“;”开头,不执行,打印程序清单时照原样打印,“系统保留字”不能做标号。4.280486寻址方式操作数是指令的操作对象,寻址方式与地址码有密切关系.形成操作数地址码的过程就是寻址。“寻址方式”:通俗的讲,就是通知CPU本条指令的操作数在哪儿?或者说用什么方式才能得到操作数。操作数存在方式在微型计算机中,操作数可能以以下三种方式存在:•操作数包含在指令中——即指令的操作数部分就包含着操作数本身。MOVAX,1234H;ADDAL,2•操作数包含在CPU的某一个内部寄存器中——这时指令中的操作数是CPU内部的某一个寄存器MOVDS,AX•操作数在内存的数据区中——这时指令中的操作数包含着此操作数的地址MOVAX,DS:[2000H];MOVBUF,AL80486有3类7种寻址方式立即寻址方式:获得立即数寄存器寻址方式:获得寄存器操作数存储器寻址方式:获得内存操作数(存储器操作数))学习重点:怎样在符号指令中,正确的描述各种寻址方式1.立即寻址方式这种寻址方式所提供的操作数直接放在指令中,紧跟在操作码的后面,与操作码一起放在代码段区域中。立即数可以是8、16、32位.操作数是指令的一部分,完整地取出该条指令,也就获得了操作数。操作码34H12H代码段低高DXDLDHDX3412例:MOVDX,1234H015立即寻址方式示意图如:MOVEAX,12345678HMOVBL,10101010B;AAH→BLMOVCL,–4;FCH→CLMOVDL,’A’;41H→DLADDAL,0C8HMOVSI,3*5;15→SI上例源操作数即为立即寻址,立即数书写规定:立即数以数字开头,以A~F开头的16进制数,必须前缀0。程序员可以按自己的习惯书写立即数,各种合法的立即数经汇编后,一律自动转换成等值的二进制数,负数用补码表示。立即数的数制用后缀表示,B表示二进制数,H表示十六进制数,D或缺省为十进制数,单引号括起来的字符编译成相应的ASCII码。可以用+–*/组成立即数表达式2.寄存器寻址操作数在CPU的某个寄存器中,符号指令中直接写出寄存器名称。如:MOVAX,DS;DS内容→AXINCSI;SI+1→SI(Increase增量)DECDI;DI–1→DI(Decrease减量)如:下述6条指令,目标操作数即为寄存器寻址MOVEAX,12345678HMOVBL,10101010B;AAH→BLMOVCL,–4;FCH→CLMOVDL,’5’;35H→DLADDAL,0C8HMOVSI,3*5;15→SI3.存储器操作数寻址方式重申:在读写内存操作数之前,CPU必须知道相关存储单元的物理地址。程序员的责任仅在于正确的书写逻辑地址表达式,然后由CPU自动运算以求出物理地址。由于CPU对存储器采用分段管理,因此指令格式中只能写出存放操作数的内存单元的“逻辑地址”。操作系统将程序调入内存时才给段寄存器赋实际值。此时,计算出的20位地址才是实际的物理地址程序员给出的逻辑地址形式段寄存器:偏移地址偏移地址可以由以下各种情况构成:•直接地址——包含在指令中的16位地址偏移量。•间接地址——由CPU内部某个16位寄存器的内容决定,如BX、BP、SI、DI。•基址——基址寄存器BX或BP加上指令中包含的8位或16位位移量。•变址——变址寄存器SI或DI加上指令中包含的8位或16位位移量。•基址加变址——由一个基址寄存器BX或BP加上一个变址寄存器SI或DI,再加上指令中包含的8位或16位位移量。(1)直接寻址①地址表达式的格式1:段寄存器:[偏移地址]②地址表达式的格式2:段寄存器:变量名用变量名代表存储单元的有效地址如:MOVAL,ES:[2CH]从ES附加段偏移地址为2CH的单元取数→AL如:MOVAX,DS:[2000H]从数据段偏移地址为2000H的单元取一字→AX这种格式很少使用,∵通常情况下,程序员不知道某单元的偏移地址操作码34H12H50H30H代码段低高DS0050AXALAH例:MOVAX,DS:[1234H]直接寻址方式示意图50000H050000H+1234H51234H51234H数据段设数据段XX字节单元的内容为11HES附加段YY字单元的内容为2233HMOVAL,DS:XX;取数据段XX字节单元的内容→AL或MOVAL,XX;∴AL=11HMOVAX,ES:YY;取ES附加段YY字单元的内容→AX或MOVAX,YY;∴AX=2233H说明:汇编语言允许为某单元起一个“名字”,这个名字就称为该单元的“变量名”,经汇编之后,变量名有段基址和偏移量两种属性。变量名是唯一的,程序中不能有重复的变量名,∴“段寄存器:”可以省略。(2)寄存器间接寻址寄存器间接寻址又称间接寻址,间址什么是间接寻址?操作数在内存单元,该单元的段基址在段寄存器中,有效地址在间址寄存器中,CPU首先进行地址计算①间接寻址的地址表达式段寄存器:[间址寄存器]某单元的物理地址=段寄存器内容×16+间址寄存器②访问约定的逻辑段,间接寻址的地址表达式简化为:[间址寄存器]某单元的物理地址=约定的段寄存器内容×16+间址寄存器③间址寄存器和约定访问的逻辑段486规定:间址寄存器约定访问的逻辑段BP堆栈段16位寻址方式BX,SI,DI数据段EBP,ESP堆栈段32位寻址方式EAX~EDX,ESI,EDI数据段操作码30H代码段低高DS500030例:MOVAX,[BX]间接寻址方式示意图50000H051000H数据段1000HH51000HBX+50H50AX④举例:设数据段BUF字节单元的内容为55H,取出该数→AL解1:用BX间址MOVDS,数据段段基址MOVBX,BUF单元的有效地址MOVAL,DS:[BX];AL=55H等价于:MOVAL,[BX]由于BX间址,约定访问的是数据段,∴“DS:”可省解2:用BP间址MOVDS,数据段段基址MOVBP,BUF单元的有效地址MOVAL,DS:[BP];AL=55H不能写成:MOVAL,[BP]由于BP间址约定访问的是堆栈段,∴“DS:”不可省解3:用变量名直接寻址MOVDS,数据段段基址MOVAL,BUF;AL=55H(3)基址寻址该寻址方式的有效地址由两部分组成。一部分在基址寄存器中,另一部分为常量。①基址寻址的地址表达式:段寄存器:[基址寄存器+位移量]物理地址=段寄存器内容×16+基址寄存器+位移量②访问约定的逻辑段,简化的地址表达式:[基址寄存器+位移量]物理地址=约定的段寄存器内容×16+基址寄存器+位移量③基址寄存器和约定访问的逻辑段基址寄存器约定访问的逻辑段BP堆栈段16位寻址方式BX数据段EBP,ESP堆栈段32位寻址方式EAX~EDX,ESI,EDI数据段操作码30H代码段低高DS5000AL例:MOVAL,[BX+2]基址寻址方式示意图50000H051002H数据段1000HH51002H+BX02H02+H④举例设数据段BUF单元依次有:78H,56H,34H,12H则:MOVDS,数据段段基址MOVBX,BUF单元有效地址MOVDH,[BX+1];DH=56HMOVDX,[BX+2];DX=1234H12H34H56H78HBUF(4)变址寻址①有比例因子的变址寻址其地址表达式为段寄存器:[比例因子*变址寄存器+位移量]物理地址=段寄存器×16+比例因子×变址寄存器+位移量②没有比例因子的变址寻址其地址表达式为:段寄存器:[变址寄存器+位移量]访问约定的逻辑段可简化为:[变址寄存器+位移量]物理地址=约定的段寄存器×16+变址寄存器+位移量③变址寄存器与约定访问的逻辑段变址寄存器约定访问的逻辑段适用于……SI,DI数据段无比例因子,16位寻址EBP堆栈段有比例因子,32位寻址EAX~EDX,ESI,EDI数据段操作码30H代码段低高DS5000AL例:MOVAL,[SI+2]基址寻址方式示意图50000H051002H数据段1000HH51002H+SI02H02+H说明:比例因子只能是1、2、4、8因此:MOVAL,[8*SI+15];非法,16位寻址不能使用比例因子MOVAL,[10*ESI+5];非法指令,比例因子错了MOVAL,ES:[SI];访问附加段MOVAL,[SI];访问数据段(5)基址加变址寻址存储单元的有效地址由3部分组成有比例因子的基址加变址的地址表达式为:段寄存器:[基址寄存器+比例因子*变址寄存器+位移量]访问约定逻辑段其地址表达式简化为:[基址寄存器+比例因子*变址寄存器+位移量]②无比例因子基址加变址地址表达式:段寄存器:[基址寄存器+变址寄存器+位移量]访问约定逻辑段:[基址寄存器+变址寄存器+位移量]基址加变址寻址是基址寻址和变址寻址的组合,要求★基址寄存器和变址寄存器都是16位或都是32位,否则(16位寻址和32位寻址混合使用)是非法指令★默认的段寄存器不一致,这样的组合虽然是合法,但容易出错操作码30H代码段低高DS5000AL例:MOVAL,[BX+SI+0250H]基址+变址寻址方式示意图50000H053250数据段2000HH53250H+SI50H0250+H1000H+BX02H寻址方式的学习要点:1.指令中的操作数有3种:立即数,寄存器数,内存操作数访问立即数叫立即寻址方式;访问寄存器数叫寄存器寻址方式;访问内存操作数由5种寻址方式:直接寻址、间址、基址、变址、基址加变址不同的寻址方式是为了程序员在写指令时通过不同的手段提供操作数.2.关于16位寻址和32位寻址16位寻址:采用16位间址、基址、变址、基址加变址32位寻址:采用32位间址、基址、变址、基址加变址3.在实模式下,一个逻辑段的体积最大为64K,存储单元的有效地址为16位,不可能超过FFFFH,∴在实模式下运行的程序通常采用16位寻址4.关于段约定和段超越在用间址、基址、变址、基址加变址寻址内存操作数时,其地址表达式都有2种书写格式有段前缀和无段前缀①如用BP、EBP、ESP参
本文标题:微机原理与接口技术第4章
链接地址:https://www.777doc.com/doc-3358131 .html