第3章微机原理_第1页
第3章微机原理_第2页
第3章微机原理_第3页
第3章微机原理_第4页
第3章微机原理_第5页
已阅读5页,还剩71页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第3章80X86微处理器指令系统1NUIST主要内容寻址方式8086/8088指令系统32位处理器指令系统2隐含于机器指令内3.1寻址方式处理的数据在什么地方?要处理的数据有多长?操作码操作数……操作数指令的一般格式:33.1寻址方式操作码:指计算机所要执行的操作,是一种助记符。操作数在指令执行操作的过程中所需要的数据。该字段可以是操作数本身,也可以是操作数地址或是地址的一部分,还可以是指向操作数地址的指针或其它有关操作数的信息。

如何寻找操作数就是寻址方式4立即寻址汇编指令机器码用C语言描述MOVAX,10HB81000H(AX)=16MOVAL,28HB028H(AL)=40操作数直接放在指令中,紧跟在操作码后,与操作码一起放在代码段5寄存器寻址汇编指令机器码用C语言描述指令执行前数据的位置

MOVAX,BXB81000H(AX)=(BX)CPU内寄存器MOVAL,BLB028H(AL)=(BL)CPU内寄存器操作数包含在CPU的内部寄存器中,如寄存器AX、BX、CX、DX等。寄存器可以是8位或者16位。6直接寻址汇编指令机器码指令执行前数据的位置

MOVAX,[2]A10200H内存的DS:2~3单元MOVAL,[2]A00200H内存的DS:2单元MOVBX,ES:[2]8B1E0200H

内存的ES:2~3单元指令要处理的数据在内存中,地址为段地址(SA):偏移地址(EA)。7直接寻址MOVAX,[2]8直接寻址MOVAL,[2]9寄存器间接寻址操作数在内存中,操作数地址的16位EA包含在以下寄存器SI、DI、BP、BX中。分成两种情况:以SI、DI、BX间接寻址,则通常操作数在现行数据段区域中,此时(DS)×16+[REG]

为操作数的地址,REG表示寄存器可以是SI、DI、BX。以寄存器BP间接寻址,操作数在堆栈段中。即(SS)×16+(BP)作为操作数的地址。10寄存器间接寻址MOVSI,1000HMOVAX,[SI]11寄存器相对寻址操作数在存储器中,由指定的寄存器内容,加上指令中给出的8位或16位偏移量作为操作数的偏移地址。寄存器为四个寄存器SI、DI、BX、BP之一

寻址方式含义[BX+idata]/idata[BX]EA=(BX)+idata,SA=(DS)[SI+idata]/idata[SI]EA=(SI)+idata,SA=(DS)[DI+idata]/idata[DI]EA=(DI)+idata,SA=(DS)[BP+idata]/idata[BP]EA=(BP)+idata,SA=(SS)12寄存器相对寻址MOVBX,1000HMOVAX,[BX+1]

13基址加变址寻址操作数在存储器中其偏移地址由(基址寄存器)+(变址寄存器)形成基址寄存器——BX(数据段),BP(堆栈段)

变址寄存器——SI、DI

寻址方式含义[BX+SI]/[BX][SI]EA=(BX)+(SI),SA=(DS)[BX+DI]/[BX][DI]EA=(BX)+(DI),SA=(DS)[BP+SI]/[BP][SI]EA=(BP)+(SI),SA=(SS)[BP+DI]/[BX][DI]EA=(BP)+(DI),SA=(SS)14基址加变址寻址MOVBX,1000HMOVSI,1MOVAX,[BX+SI]

15相对基址变址寻址操作数在存储器中偏移地址:(基址寄存器)+(变址寄存器)+相对偏移量寻址方式含义[BX+SI+idata]/idata[BX][SI]EA=(BX)+(SI)+idata,SA=(DS)[BX+DI+idata]/idata[BX][DI]EA=(BX)+(DI)+idata,SA=(DS)[BP+SI+idata]/idata[BP][SI]EA=(BP)+(SI)+idata,SA=(SS)[BP+DI+idata]/idata[BX][DI]EA=(BP)+(DI)+idata,SA=(SS)16相对基址变址寻址MOVBX,1000HMOVSI,1MOVAX,[BX+SI+1]

17寻址方式小结从直接寻址方式开始的寻址方式中,操作数都存放在除代码段以外的内存区域中,通过求得操作数所在的有效地址,取得操作数。比较这几种寻址方式:

[idata]用一个常量来表示地址,可以用于直接定位一个内存单元;[BX]用一个变量来表示内存地址,可以用于间接定位一个内存单元;[BX+idata]用一个变量和常量来表示地址,可以在一个起始地址的基础上用变量间接定位一个内存单元;[BX+SI]用两个变量表示地址;[BX+SI+idata]用两个变量和一个常量表示地址。183.2指令系统数据传送指令1算术运算指令2逻辑运算指令3移位指令和循环移位指令4处理器控制指令5193.2指令系统数据传送指令1算术运算指令2逻辑运算指令3移位指令和循环移位指令4处理器控制指令5203.2.1数据传送指令MOV指令栈指令交换指令累加器专用传送指令地址传送指令标志位传送指令21MOV指令格式:MOVDST,SRC;(DST)←(SRC)说明:MOV是操作码,DST和SRC分别是目的操作数和源操作数。执行后,目的操作数改变,源操作数不变。指令格式举例MOVREG,idataMOVAX,8MOVREG,REGMOVBX,AXMOVREG,MEMMOVAX,[0]MOVMEM,REGMOV[0],AX22MOV指令格式:MOVDST,SRC;(DST)←(SRC)说明:MOV是操作码,DST和SRC分别是目的操作数和源操作数。执行后,目的操作数改变,源操作数不变。指令格式举例MOVSREG,REGMOVDS,AXMOVREG,SEGMOVAX,DSMOVSREG,MEMMOVDS,[0]MOVMEM,SREGMOV[0],DSMOVMEM,idataMOVBYTEPTR[0000H],01H23MOV指令存储器传送指令中,不允许对CS和IP进行操作;不允许两个存储器操作数之间直接进行信息传送两个段寄存器之间不能直接传送信息,也不允许用立即寻址方式为段寄存器赋初值目的操作数,不能用立即寻址方式;操作数类型要匹配,字对字,字节对字节传送。MOVIP,0010HMOVCS,AXMOV[1230H],[0010H]MOVAX,[0010H],MOV[1230H],AXMOVDS,SSMOVDS,1000HMOV1234H,AXMOVBX,AL24栈指令栈是一种具有特殊访问方式的存储空间,它的特殊性就在于,最后进入这个空间的数据最先出去(后进先出)1234在基于8086CPU编程的时候,可以通过指令将一段内存当作栈来使用。栈空间的使用是从高地址往低地址方向的。栈底栈顶25栈指令CPU如何知道哪一段内存空间作为栈空间使用?CPU如何知道栈顶的位置?

问题:回忆寄存器SS和SP的作用是什么任意时刻SS:SP指向栈顶元素。26栈指令PUSH和POP指令指令格式说明PUSHREG将一个寄存器中的数据入栈PUSHSREG将一个段寄存器中的数据入栈PUSHMEM将内存单元处的字入栈POPREG将栈顶的数据送入一个寄存器中POPSREG将栈顶的数据送入一个段寄存器中POPMEM将栈顶的数据送入内存单元两个操作都是以字为单位进行的27栈指令PUSHAX的执行过程(1)(SP)=(SP)

2,SS:SP指向当前栈顶前面的单元,以当前栈顶上面的单元为新的栈顶;(2)将AX中的内容送入SS:SP指向的内存单元处,此时SS:SP指向新栈顶。1234AX28栈指令POPBX的执行过程(1)将SS:SP指向的内存单元处的一个字数据送入BX中

;(2)(SP)=(SP)

+2,SS:SP指向当前栈顶下面的单元,以当前栈顶下面的单元为新的栈顶

1234BX29栈指令栈指令与MOV指令的区别PUSH和POP指令访问的内存单元地址不是在指令中给出的,而是由SS:SP指出的;CPU执行MOV指令只需要一步操作;而执行PUSH和POP指令则要分两步,先修改SP,然后向SS:SP传送,或先取SS:SP处的数据,后改变SP。30交换指令交换指令XCHG的作用是把一个字节或一个字的源操作数与目的操作数相交换

指令格式举例XCHGREG,REGXCHGCL,BLXCHGREG,MEMXCHGBX,[0]XCHGMEM,REGXCHG[0],BX31交换指令交换能在通用寄存器与累加器之间、通用寄存器之间、通用寄存器与存储器之间进行但段寄存器和立即数不能作为一个操作数,不能在累加器之间进行。如果需要交换两个内存操作数,需要使用一个寄存器作为临时存储容器,并把MOV指令和XCHG指令结合起来使用MOVAX,[0100H]XCHGAX,[1000H]MOV[0100H],AX

32累加器专用传送指令

IN指令从I/O端口输入数据至AL或AX指令格式含义INAL,port(AL)←(port)INAX,port(AX)←(port+1)(port)INAL,DX(AL)←((DX))INAX,DX(AX)←((DX+1),(DX))33累加器专用传送指令OUT指令将AL或AX中的内容传送到一个输出端口指令格式含义OUTport,AL(AL)→(port)OUTport,AX(AX)→(port+1)(port)OUTDX,AL(AL)→((DX))OUTDX,AX(AX)→(DX+1)(DX)若端口地址超过255时,则必须用DX保存端口地址,这样用DX作端口寻址最多可寻找64K个端口。34XLAT指令一般格式XLAT;(AL)=((DS)

×16+(BX)

+(AL))要求:①寄存器AL的内容作为一个256字节的表的下标;②表的基地址在BX中;③转换后的结果存放在AL中.35XLAT指令MOVAX,SEGTABLE; 取TABLE的段地址MOVDS,AXMOVBX,OFFSETTABLE; 取TABLE的偏移地址MOVAL,06HXLAT举例:0AL36地址传送指令

LEAREG,SRC功能:把源操作数SRC的地址偏移量传送至寄存器REG。要求:①源操作数的寻址方式不能是立即数和寄存器方式;②目的操作数必须是一个16位的通用寄存器,但不能是段寄存器。LEAAX,[SI+20H]MOVAX,[SI+20H]0120HAX01ABAX假设(SI)=0100H,(DS)=0200H37地址传送指令LDSREG16,SRC功能:将源操作数SRC的的段地址和偏移地址分别送入DS和指令所指出的寄存器REG16中要求:源操作数的寻址方式不能是立即数和寄存器方式;目的操作数是不能是段寄存器。LESREG16,SRC

这条指令除将地址指针的段地址部分送入ES外,与LDS类似38标志位传送指令LAHF

功能:(AH)←(FLAGS的低字节),即将标志寄存器的低字节送寄存器AH,即状态标志位SF、ZF、AF、PF、CF分别送AH的D7、D6、D4、D2、D0位,而AH的第D5、D3、D1位任意。39标志位传送指令SAHF

功能:(FLAGS的低字节)←(AH),即将寄存器AH送标志寄存器的低字节,即根据AH的D7、D6、D4、D2、D0位相应设置SF、ZF、AF、PF、CF标志。40标志位传送指令PUSHF功能:(SP)←(SP)−2,((SP),(SP)+1)←(FLAGS),即将标志寄存器的内容压入堆栈,同时栈顶指针SP减2。这条指令可用保护调用过程以前的标志寄存器的值。41标志位传送指令POPF功能:(FLAGS)←((SP),(SP)+1),(SP)←(SP)+2,即将栈顶字单元内容送标志寄存器,同时栈顶指针SP加2。该指令用于在过程返回以后恢复标志状态。423.2指令系统数据传送指令1算术运算指令2逻辑运算指令3移位指令和循环移位指令4处理器控制指令5433.2.2算术运算指令加法指令减法指令乘除法指令符号扩展指令十进制调整指令44加法指令:ADDADD指令ADDDST,SCR;(DST)←(DST)+(SCR)指令格式举例ADDREG,idataADDAX,8ADDREG,REGADDAX,BXADDREG,MEMADDAX,[0]ADDMEM,REGADD[0],ALADDMEM,idataADDWORDPTR[0000H],1234H

45加法指令:ADCADCDST,SCR;(DST)←(DST)+(SCR)+(CF)例:将存储在DS:0000处的4字节数12345678H与DS:0010处的4字节数00ABCDEFH相加,结果放在DS:0020处46加法指令:ADC47MOV AX,[0000H]ADD AX,[0010H];低2字节相加MOV [0020H],AX;低2字节相加结果送DS:0020H处MOV AX,[0002H];取高2字节数据ADC AX,[0012H];

高2字节相加MOV [0022H],AX;高2字节相加结果送DS:0022H处48加法指令:INCINCDST;(DST)←(DST)+1指令格式举例INCREG16INCAXINCREG8INCBLINCMEMINCVAR;VAR是变量49减法指令SUB指令SUBDST,SCR;(DST)←(DST)−(SCR)SBB指令SBBDST,SCR;(DST)←(DST)−(SCR)−(CF)

DEC指令DECDST;(DST)←(DST)−150减法指令NEG指令NEGDST;(DST)←0−(DST)CMP指令CMPDST,SCR;(DST)−(SCR)完成两个操作数相减,使结果反映在标志位上,但并不送回结果(即不带回送的减法)。比较指令主要用于比较两个数之间的关系。51乘法指令无符号乘法指令MUL

MULSRC①若SRC为字节,则默认被乘数在AL中,得到的16位积默认在AX中,即:

(AX)←(AL)×(SRC)②若SRC为字,则默认被乘数在AX中,得到的32位积默认在DX,AX中,即:

(DX,AX)←(AL)×(SRC)MUL指令影响CF位和OF位,若相乘后的结果中高16位(16位乘法)或高8位(8位乘法)均为0时,CF和OF均被置为0,否则CF和OF均被置为1。

52乘法指令带符号乘法指令IMUL

IMULSRC同MUL一样可以进行字节与字节、字和字的乘法运算。结果放在AX或DX,AX中。当结果的高半部分不是结果的低半部分的符号扩展(见CWB和CWD指令)时,标志位CF和OF将置位。53除法指令无符号数除法指令DIVDIVSRC①若SRC为字节,则默认被除数在AX中,得到的8位商在AL中余数在AH中,即:(AX)÷(SRC)→AL,AH②若SRC为字,则默认被除数在DX,AX中,得到的16位商在AX中余数在DX中,即:(DX,AX)÷(SRC)→AX,DX如果除数为零,或商的结果超出相应寄存器的范围,则在内部产生一个类型0的中断。54除法指令带符号数除法指令IDIVIDIVSRC执行过程同DIV指令,但IDIV指令认为操作数的最高位为符号位,除法运算的结果商的最高位也为符号位。55符号扩展指令应该将长度短的数扩展成与长度长的数位数相同后再计算。BX=0101H;+129AL=10H;-128字数据与字节数据之间的运算如何进行?问题的提出BX=0101H;+129AX=1110H;-128符号扩展56符号扩展指令字节扩展指令CBW该指令执行时将AL的符号扩展到AH,即若D7=0,则AH=0;否则AH=0FFH。字扩展指令CWD该指令执行时将AX的符号扩展到DX,即若D15=0,则DX=0;否则DX=0FFFFH。CBWADDAX,BXBX=0101H;+129AL=10H;-12857十进制调整指令

十进制数25D压缩BCD数25H非压缩BCD数0205H指令格式指令说明DAA压缩的BCD码加法调整DAS压缩的BCD码减法调整AAA非压缩的BCD码加法调整AAS非压缩的BCD码减法调整AAM乘法后的BCD码调整AAD除法前的BCD码调整58十进制调整指令举例AL=28H,BL=68HADDAL,BLDAAAL=90HAL=96HAL=07H,BL=09HAAMAX=003FHAX=0603H

MOVAX,0307HAADMOVBL,5DIVBL请分析以下指令的执行结果MULBL593.2指令系统数据传送指令1算术运算指令2逻辑运算指令3移位指令和循环移位指令4处理器控制指令5603.2.3逻辑运算指令AND指令OR指令XOR指令TEST指令NOT指令61AND指令ADDDST,SRC;(DST)←(DST)∧(SRC)

对源操作数SRC和目的操作数DST进行按位的逻辑“与”运算,结果送回目的DST。源操作数可以为立即数,通用寄存器和任一寻址方式所指定的内存单元;目的操作数可以为通用寄存器和任意寻址方式所指定的内存单元,但不允许是立即数;当源操作数不是立即数时,两个操作数中必须有一个是寄存器。MOVAL,01100011BANDAL,00110011B执行后(AL)=00100011B62AND指令AND指令可以将操作对象的相应位设为0,其他位不变。将AL的第3位设为0的指令是:ANDAL,11110111B将AL的第0位设为0的指令是:

ANDAL,11111110B将AL的低4位清零指令是:

ANDAL,0F0HAND指令提供了一种把小写字母转换成大写字母的简单方法。01100001=61H(’a’)01000001=41H(’A’)只要将任何字符与1101111相与,则第5位被清零,其他位不变。63OR

指令ORDST,SRC;(DST)←(DST)∨(SRC)

对源操作数SRC和目的操作数DST进行按位的逻辑“或”运算,结果送回目的DST。MOVAL,01100011BORAL,00110011B执行后(AL)=01110011

BOR指令可以将操作对象的相应位设为1,其他位不变。将AL的第3位设为1的指令是:ORAL,00001000B将AL的第0位设为1的指令是:

ORAL,00000001B将AL的低4位设为1的指令是:

ORAL,0FHOR指令可以把0~9之间的整数转换成对应的ASCII码数字字符,方法是把第4位和第5位置1。64XOR指令XORDST,SRC;(DST)←(DST)

(SRC)

对源操作数SRC和目的操作数DST进行按位的逻辑“异或”运算,结果送回目的DST。MOVAL,01100011BXORAL,00110011B执行后(AL)=01010000

BXOR指令可以将操作对象的相应位取反,其他位不变。将AL的第3位设为1的指令是:XORAL,00001000B将AL的第0位设为1的指令是:

XORAL,00000001B将AL的低4位设为1的指令是:

XORAL,0FH65TEST指令TESTOPR1,OPR2;(OPR1)∧(OPR2)对操作数OPR1和OPR2进行按位的逻辑“与”运算,结果只体现在标志位上,不改变操作数的值。TEST与AND的关系类似于CMP与SUB的关系。利用TEST可以测试操作对象的相应位是否为0。

测试AL的第3位是否为0:TESTAL,11110111B一般TEST指令后面会跟一个条件转移指令(见4.3.2节)。66NOT指令对操作数DST的各位按位取反

MOVAL,01100011BNOTAL执行后AL=10011100

BNOTDST;(OPR)←(OPR)673.2指令系统数据传送指令1算术运算指令2逻辑运算指令3移位指令和循环移位指令4处理器控制指令568移位指令SHL/SALDST,CNTSHRDST,CNTSARDST,CNT

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论