第3章0x86的指令系统和寻址方式

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第3章80x86的指令系统和寻址方式1.教学目的:掌握微机寻址方式和8086微处理器指令系统及Debug的使用2.教学要求:①掌握8种寻址方式②熟悉指令系统的六大类指令,要求结合上机实践熟练掌握常用指令。③结合指令举例逐步熟悉和掌握汇编语言程序的格式,以及典型程序段。④会熟练使用Debug调试程序3.教学重点:①寻址方式②8086微处理器指令系统4.掌握难点:①寄存器的应用②存储器的结构5.教学进程安排:P35~1066.教学方法:课堂讲授7.教学内容摘要:3.1指令系统概述机器指令:用二进制代码表示的指令汇编指令:用助记符表示的指令一般格式:操作码操作数[,操作数]如:incsiaddax,bx操作数的类型:立即数:存放在指令中的操作数。寄存器操作数:存放在寄存器中的操作数。存储器操作数:存放在内存中的操作数。3.28088/8086CPU的寻址方式寻找和获得操作数或操作数存放地址或指令转移地址的方法称为寻址方式。8088/8086CPU的寻址分为两类,即数据寻址和指令寻址。3.2.1数据寻址方式1、立即寻址方式源操作数:为立即数(常数),源操作数长度与目的操作数长度一致(立即数可是8位或16位,386及后继机型可是8位或32位)例:MOVAL,0FFHMOVAX,1234H2、寄存器寻址源操作数:在寄存器中,因操作数在寄存器中,不需访问存储器,因而速度较快。例:MOVAX,BXMOVAL,BLEA=基址+(变址×比例因子)+位移量3、直接寻址方式源操作数:是地址或符号地址。EA=位移量。例:假设TABLE是在数据段定义的一个字节数组的首地址标号(变量名),其偏移地址为1000H,则指令MOVAL,TABLE或MOVAL,[TABLE]或MOVAL,[1000H]4、寄存器间接寻址方式EA=基址寄存器内容(或变址寄存器内容)例:MOVAX,[BX]MOVAX,[SI]例:MOVAX,[BX]如果(DS)=3000H,(BX)=1010H,(31010H)=12H,(31011H)=24H。则操作数的20位物理地址=30000H+1010H=31010H,操作的示意图如图3.1所示。指令执行完以后,(AX)=2412H。图3.1寄存器间接寻址操作图例:MOVAX,ES:[BX]5、寄存器相对寻址EA=基址寄存器(或变址寄存器)的内容+位移量。例:TABLE是在数据段定义的一个字节数组的首地址标号(也称变量名),则:MOVSI,5MOVAL,TABLE[SI];可以写为:MOVAL,[TABLE+SI]ABCEQU5LEASI,TABLE;LEA是取偏址指令,本句是TABLE偏址→SIMOVAL,ABC[SI];可以写为:MOVAL,[ABC+SI]如:[BX+6]、[BP-100H]、[SI+OFFSETTABLE]都是寄存器相对寻址方式。例:TABLE是数据段中定义的一个变量,假设它在数据段中的偏移地址为0100H,有指令:MOVAX,TABLE[SI]6、基址变址寻址EA=基址寄存器内容+变址寄存器内容。例:MOVAX,[BX][SI]或写为:MOVAX,[BX+SI]例:MOVAX,[BX][SI](或写为MOVAX,[BX+SI])若(DS)=2000H,(BX)=0500H,(SI)=0010H则偏移地址=0500H+0010H=0510H20位物理地址=20000H+0510H=20510H如(20510H)=12H,(20511H)=34H,操作的示意图如图3.2所示:31010H存储器AX30000H12H24H数据段图3.2基址变址寻址操作示意图7、相对基址变址寻址EA=基址寄存器内容+变址寄存器内容+位移量例:MOVAL,TABLE[BX][SI]例:TABLE是数据段中定义的一个符号地址,假设它在数据段中的偏移地址是1000H。MOVAX,TABLE[BX][DI]若(DS)=2000H,(BX)=0100H,(DI)=0020H则偏移地址=1000H+0100H+0020H=1120H20位物理地址=20000H+1120H=21120H如(21120H)=12H,(21121H)=34H,操作的示意图如图3.3所示。执行完指令以后,(AX)=3412H。图3.3相对基址变址寻址操作示意图8、比例变址寻址方式(80386及其后继机型)EA=比例因子×变址寄存器的内容+位移量对于元素大小为2,4,8字节的数组,可在变址寄存器给出数组元素下标,由寻址方式控制直接用比例因子把下标转换为变址值。例:MOVEAX,COUNT[ESI*4]或MOVEAX,[ESI*4+COUNT]设(ESI)=3COUNT12345678910111213141516A41254899、基址比例变址寻址方式(80386及其后继机型)EA=比例因子×变址寄存器的内容+基址寄存器内容例:MOVECX,[EAX][EDX*8]10、相对基址比例变址寻址方式(80386及其后继机型)EA=比例因子×变址寄存器的内容+基址寄存器内容+位移量20510H存储器AX20000H12H34H数据段代码段位移量TABLE数据段代码段21120H存储器AX20000HOP00H10H12H34HOP元素0元素1元素2元素3例:MOVEAX,TABLE[EBP][EDI*4]3.3传送类指令3.3.1数据传送指令注:1.不影响标志位;2.两个操作数中必须有一个是寄存器(源操作数是立即数除外);3.段地址必须通过寄存器送到DS寄存器。CSDS、SS、ES通用寄存器AX、BX、CX、DX、SI、DI、BP、SP立即数存储器数图3.4MOV指令的九种形式例:1.MOVAX,DATA_SEGMOVDS,AX2.MOVAL,‘E’注:把‘E’的ASCⅡ码送到AL寄存器中。3.MOVBX,OFFSETTABLE注:OFFSET为属性操作符,把TABLE的偏移地址送入到BX中;3.3.2进栈指令PUSH及出栈指令POP格式:PUSHSRC结果:(SP)←(SP)-2((SP)+1,(SP))←(SRC)格式:POPSRC结果:(SRC)←((SP)+1,(SP))(SP)←(SP)+2例:MOVAX,1234HPUSHAX设执行前(SS)=2000H,(SP)=00FEH指令执行过程如图3.5所示。执行后(SS)=2000H,(SP)=00FCH注:1.SP或ESP的内容任何时候都指向栈顶;(SP)→2000:0000H2000:0001H2000:00FEH2000:00FFH2000:00FCH2000:00FDH┋(SP)→2000:0000H2000:0001H2000:00FEH2000:00FFH34H12H指令执行前情况指令执行后情况图3.5压栈操作示意图2.只允许作字或双字操作;3.不允许POP使用立即数寻址方式。3.3.3地址传送指令LEA:有效地址送寄存器;LDS:指针送寄存器和DS;LES:指针送寄存器和ES;LFS:指针送寄存器和FS;LGS:指针送寄存器和GS;LSS:指针送寄存器和SS;1.LEA:有效地址送寄存器格式:LEAREG,SRC结果:(REG)←SRC例:设(BX)=0400H,(SI)=003CH,(DS)=2000H,(2139EH)=12ABHLEABX,[BX+SI+0F62H](BX)=?MOVBX,[BX+SI+0F62H](BX)=?2.LDS,LES,LFS,LGS,LSS:指针送寄存器和段寄存器格式(以LDS)为例:LDSREG,SRC注:其它指令格式与上同,仅指定的段寄存器不同结果:(REG)←(SRC)(SREG)←(SRC+2)(REG)←(SRC)(SREG)←(SRC+4)例:设(DS)=B000H,(BX)=080AH,(0B080AH)=05AEH,(0B080CH)=4000HLESDI,[BX]?(DI),(ES)3.3.4交换指令和换码指令1.XCHG:交换指令格式:XCHGOPR1,OPR2结果:(OPR1)←→(OPR2)例:设(BX)=AB20H,(BP)=0200H,(SI)=0046H,(SS)=2F00H,(2F246H)=4154HXCHGBX,[BP+SI]2.XLAT换码指令格式:XLATOPR或:XLAT结果:16位指令:(AL)←((BX)+(AL))32位指令:(AL)←((EBX)+(AL))注:OPR位表格的首地址(一般为符号地址),只为提高程序的可读性,指令执行时只使用预先已存入BX或EBX中的表格首地址。3.3.5标志寄存器传送指令1.LAHF:标志送AH;格式:LAHF结果:(AH)←(FLAGS的低字节)2.SAHF:AH送标志寄存器;格式:SAHF结果:(FLAGS的低字节)←(AH)3.PUSHF/PUSHFD:标志进栈;格式:PUSHFPUSHFD结果:PUSHF:(SP)←(SP)-2((SP)+1,(SP))←(FLAGS)PUSHFD:(SP)←(SP)-4((ESP)+3,(ESP)+2,(ESP)+1,(ESP))←(EFLAGSAND0FCFFFFH)4.POPF/POPFD:标志出栈(不影响VM,RF,IOPL,VIF,VIP位)格式:POPFPOPFD结果:POPF:(FLAGS)←((SP)+1,(SP))(SP)←(SP)+2POPFD:(EFLAGS)←((ESP)+3,(ESP)+2,(ESP)+1,(ESP))(ESP)←(ESP)+43.4算术运算指令3.4.1加法指令1.ADD:加法指令格式:ADDDST,SRC结果:(DST)←(SRC)+(DST)2.ADC:带进位加法指令格式:ADCDST,SRC结果:(DST)←(SRC)+(DST)+CF3.INC:加1指令(不影响CF位)格式:INCOPR结果:(OPR)←(OPR)+1例:两个双字数据相加0067F000HDXAX+00025432H+CXBX006A`4432HDXAXmovdx,0067hmovax,0f000hmovcx,0002hmovbx,5432haddax,bxadcdx,cx程序执行后:dx=006ahax=4432h3.4.2减法指令1.SUB:减法指令格式:SUBDST,SRC结果:(DST)←(DST)-(SRC)2.SBB:带借位减法指令格式:SBBDST,SRC结果:(DST)←(DST)-(SRC)-CF3.DEC:减1指令(不影响CF标志位)格式:DECOPR结果:(OPR)←(OPR)-1例:两个双字数据相减0067`2654HDXAX-0002A432H-CXBX00648222HDXAXmovdx,0067hmovax,2654hmovcx,0002hmovbx,0a432hsubax,bxsbbdx,cx程序运行后:dx=0064hax=8222h3.4.3求补指令和比较指令1.NEG:求补指令格式:NEGOPR结果:(OPR)←(OPR)求补即:(OPR)←0FFFFH-(OPR)+1注:操作数为0时,CF=0,其它情况CF=1;操作数为-128(字节)或-32768(字)时,OF=1,其它情况OF=0。2.CMP:比较指令格式:CMPOPR1,OPR2结果:根据(OPR1)-(OPR2)的结果设置条件标志位(OPR1)=(OPR2),则ZF=1;(OPR1)!=(OPR2),则ZF=03.4逻辑运算和移位指令3.4.1逻辑运算指令1逻辑与指令格式:ANDDST,SRC;B/W功能:(DST)-(DST)A(SRC)2逻辑或指令格式:ORDST,SRC;B/W功能:(DST)-(DST)V(SRC)3逻辑非指令格式:NOTOPR;B/W功能:(OPR)-(OPR)4逻辑异或指令格式:XORDST,SRC;B/W功能:(DST)-(DST)异或(SRC)5测试指令格式:TESTOPR1,OPR2;B/W功能:(OPR1)与(OPR2)注意:逻辑运算指令不影响OF和CF标志CF=0OF=0例1:

1 / 15
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功