您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 电气安装工程 > 第三章指令系统和寻址方式1
教学提示全面而准确地理解每条指令的功能和应用,是编写汇编语言程序的关键第3章3.4.1数据传送类指令数据传送是计算机中最基本、最重要的一种操作传送指令也是最常使用的一类指令传送指令把数据从一个位置传送到另一个位置除标志寄存器传送指令外,均不影响标志位重点掌握MOVXCHGXLATPUSHPOPLEA第3章3.4.1.1通用数据传送指令提供方便灵活的通用传送操作有3条指令MOVXCHG交换指令XLAT换码(翻译)指令MOVXCHGXLAT第3章传送指令MOV(move)把一个字节或字的操作数从源地址传送至目的地址MOVreg/mem,imm;立即数送寄存器或主存MOV例题3.4.1MOVreg/mem/seg,reg;寄存器送(段)寄存器或主存例题3.4.2MOVreg/seg,mem;主存送(段)寄存器例题3.4.3MOVreg/mem,seg;段寄存器送寄存器或主存例题3.4.5第3章MOV指令传送功能MOV也并非任意传送立即数段寄存器CSDSESSS通用寄存器AXBXCXDXBPSPSIDI存储器第3章非法传送种种两个操作数的类型不一致例如源操作数是字节,而目的操作数是字;或相反两个操作数不能都是存储器传送指令很灵活,但主存之间的直接传送却不允许段寄存器的操作有一些限制段寄存器属专用寄存器,对他们的操作能力有限示例示例示例第3章交换指令XCHG(exchange)把两个地方的数据进行互换寄存器与寄存器之间对换数据寄存器与存储器之间对换数据不能在存储器与存储器之间对换数据XCHGXCHGreg,reg/mem;regreg/mem例题3.4.7例题3.4.6第3章换码指令执行前:在主存建立一个字节量表格,内含要转换成的目的代码表格首地址存放于BX,AL存放相对表格首地址的位移量换码指令执行后:将AL寄存器的内容转换为目标代码该指令完成一个字节的查表转换,把表的首址送基址寄存器BX中,表元素的下标(在表中的相对位置,不大于256字节)送AL,执行命令后,把翻译操作数(指定的表元素)送入AL中。换码(翻译)指令XLAT(translate)XLATXLAT;al←ds:[bx+al]例题3.4.83.4.2堆栈操作指令堆栈是一个“后进先出FILO”(或说“先进后出FILO”)的主存区域,位于堆栈段中;SS段寄存器记录其段地址堆栈只有一个进出口,即当前栈顶;用堆栈指针寄存器SP指定栈顶是地址较大的一端(高端),栈底不变第3章第3章堆栈的操作堆栈只有两种基本操作:进栈和出栈,对应两条指令PUSH和POPPUSH;进栈指令先使堆栈指针SP减2,然后把一个字操作数存入堆栈顶部POP;出栈指令把栈顶的一个字传送至指定的目的操作数,然后堆栈指针SP加2堆栈的进栈指令和弹栈指令对标志位无影响第3章进栈指令PUSHpushaxpush[2000h]PUSHr16/m16/seg;SP←SP-2;SS:[SP]←r16/m16/segPUSH第3章出栈指令POPpopaxpop[2000h]POPr16/m16/seg;r16/m16/seg←SS:[SP];SP←SP+2POP第3章堆栈的特点堆栈操作的单位是字,进栈和出栈只对字量数据字量数据从栈顶压入和弹出时,都是低地址字节送低字节,高地址字节送高字节堆栈操作遵循先进后出原则,但可用存储器寻址方式随机存取堆栈中的数据堆栈常用来临时存放数据传递参数保存和恢复寄存器例题3.4.11第3章3.4.3标志寄存器传送指令标志寄存器传送指令用来传送标志寄存器FLAGS的内容,方便进行对各个标志位的直接操作有2对4条指令低8位传送:LAHF和SAHF16位传送:PUSHF和POPF标志低字节进出AH指令LAHF;AH←FLAGS的低字节LAHF指令将标志寄存器的低字节送寄存器AHSF/ZF/AF/PF/CF状态标志位分别送入AH的第7/6/4/2/0位,而AH的第5/3/1位任意SAHF;FLAGS的低字节←AHSAHF将AH寄存器内容送FLAGS的低字节用AH的第7/6/4/2/0位相应设置SF/ZF/AF/PF/CF标志第3章标志寄存器位标志寄存器进出堆栈指令PUSHF;SP←SP-2;SS:[SP]←FLAGSPUSHF指令将标志寄存器的内容压入堆栈,同时栈顶指针SP减2POPF;FLAGS←SS:[SP];SP←SP+2POPF指令将栈顶字单元内容送标志寄存器,同时栈顶指针SP加2例题3.12第3章第3章3.4.4地址目标传送指令地址传送指令将存储器单元的有效地址送至指定的寄存器有效地址传送指令LEAr16,mem注意不是获取存储器单元的内容而是源操作数的有效偏移地址,将源操作数的有效偏移地址送入指定的16位寄存器指针传送指令LDS和LESLDSr16,mem装入数据段寄存器LESr16,mem装入附加段寄存器第3章有效地址传送指令LEA(loadEA)将存储器操作数的有效地址传送至指定的16位寄存器中(16位,两个字节)例题3.4.13LEAr16,mem;r16←mem的有效地址EALEA地址指针传送指令(每次4个字节)LDSr16,mem;r16←mem,;DS←mem+2LDS指令将主存中mem指定的字数据送至r16,并将mem的下一字送DS寄存。源操作数是4个连续存储单元的内容,高位地址内容送到DS;低位地址内容送r16LESr16,mem;r16←mem,;ES←mem+2LES指令将主存中mem指定的字送至r16,并将mem的下一字送ES寄存器。源操作数是4个连续存储单元的内容,高位地址内容送到ES;低位地址内容送r16例题3.4.14第3章第3章例3.4.14bLESDI,[BX]如果指令执行前;DS=0B000H,BX=080AH,[0B080AH]=05AEH,[0B080CH]=4000H,则指令执行后DI=05AEH,ES=4000H第3章指针指令举例3.4.14cLDSBX,TAB[SI];相当于[SI+TAB]BX,[SI+TAB+2]DSLESDI,ARR[BX];相当于[BX+ARR]DI,[BX+ARR+2]ESLEABX,[DI];相当于(MOVBX,DI)DIBXLEAAX,ADR;相当于(MOVAX,OFFSETADR)ADRAX第3章3.4.5输入输出指令8086通过输入输出指令与外设进行数据交换;呈现给程序员的外设是端口(Port)即I/O地址8086用于寻址外设端口的地址线为16条,端口最多为216=65536(64K)个,端口号为0000H~FFFFH每个端口用于传送一个字节的外设数据第3章输入输出寻址方式8086的端口号有64K个,无需分段,设计有两种寻址方式直接寻址:只用于寻址00H~FFH前256个端口,操作数i8表示端口号间接寻址:可用于寻址全部64K个端口,DX寄存器的值就是端口号对大于FFH的端口只能采用间接寻址方式第3章输入指令IN将外设数据传送给CPU内的AL/AXINAL,i8;字节输入:AL←I/O端口(i8直接寻址)INAL,DX;字节输入:AL←I/O端口(DX间接寻址)INAX,i8;字输入:AX←I/O端口(i8直接寻址)INAX,DX;字输入:AX←I/O端口(DX间接寻址)IN例题3.4.15演示第3章输出指令OUT将CPU内的AL/AX数据传送给外设OUTi8,AL;字节输出:I/O端口←AL(i8直接寻址)OUTDX,AL;字节输出:I/O端口←AL(DX间接寻址)OUTi8,AX;字输出:I/O端口←AX(i8直接寻址)OUTDX,AX;字输出:I/O端口←AX(DX间接寻址)OUT例题3.4.16演示第3章3.5.算术运算类指令四则运算是计算机经常进行的一种操作。算术运算指令实现二进制(和十进制)数据的四则运算请注意算术运算类指令对标志的影响掌握:ADD/ADC/INC、SUB/SBB/DEC/NEG/CMP熟悉:MUL/IMUL、DIV/IDIV理解:CBW/CWD、DAA/DAS、AAA/AAS/AAM/AAD第3章加法指令ADDADD指令将源与目的操作数相加,结果送到目的操作数ADD指令按状态标志的定义相应设置ADDADDreg,imm/reg/mem;reg←reg+imm/reg/memADDmem,imm/reg;mem←mem+imm/reg例题3.5.1第3章带进位加法指令ADCADC指令将源与目的操作数相加,再加上进位CF标志,结果送到目的操作数ADC指令按状态标志的定义相应设置ADC指令主要与ADD配合,实现多精度加法运算ADCADCreg,imm/reg/mem;reg←reg+imm/reg/mem+CFADCmem,imm/reg;mem←mem+imm/reg+CF例题3.4.6.2第3章增量指令INC(increment)INC指令对操作数加1(增量)INC指令不影响进位CF标志,按定义设置其他状态标志INCINCreg/mem;reg/mem←reg/mem+1incbxincbyteptr[bx]第3章减法指令SUB(subtract)SUB指令将目的操作数减去源操作数,结果送到目的操作数SUB指令按照定义相应设置状态标志SUBSUBreg,imm/reg/mem;reg←reg-imm/reg/memSUBmem,imm/reg;mem←mem-imm/reg例题3.4.6.3第3章带借位减法指令SBBSBB指令将目的操作数减去源操作数,再减去借位CF(进位),结果送到目的操作数。SBB指令按照定义相应设置状态标志SBB指令主要与SUB配合,实现多精度减法运算SBBSBBreg,imm/reg/mem;reg←reg-imm/reg/mem-CFSBBmem,imm/reg;mem←mem-imm/reg-CF例题3.18第3章减量指令DEC(decrement)DEC指令对操作数减1(减量)DEC指令不影响进位CF标志,按定义设置其他状态标志DECDECreg/mem;reg/mem←reg/mem-1deccxdecwordptr[si]INC指令和DEC指令都是单操作数指令主要用于对计数器和地址指针的调整第3章求补指令NEG(negative)NEG指令对操作数执行求补运算:用零减去操作数,其结果返回操作数求补运算也可以表达成:将操作数按位取反后加1NEG指令对标志的影响与用零作减法的SUB指令一样NEGNEGreg/mem;reg/mem←0-reg/mem例题3.5.19第3章比较指令CMP(compare)CMP指令将目的操作数减去源操作数,按照定义相应设置状态标志CMP指令执行的功能与SUB指令,但结果不回送目的操作数CMPreg,imm/reg/mem;reg-imm/reg/memCMPmem,imm/reg;mem-imm/reg例题3.5.20CMP3.5.1乘法指令MULr8/m8;无符号字节乘法;AX←AL×r8/m8MULr16/m16;无符号字乘法;DX.AX←AX×r16/m16IMULr8/m8;有符号字节乘法;AX←AL×r8/m8IMULr16/m16;有符号字乘法;DX.AX←AX×r16/m16例题3.5.1.1说明第3章3.5.2除法指令DIVr8/m8;无符号字节除法:AL←AX÷r8/m8的商,Ah←AX÷r8/m8的余数DIVr16/m16;无符号字除法:;AX←DX.AX÷r16/m16的商,DX←DX.AX÷r16/m16的余数IDIVr8/m8;有符号字节除法:AL←AX÷r8/m8的商,Ah←AX÷r8/m8的余数IDIVr16/m16;有符号字除法:;AX←DX.AX÷r16/m16的商,DX←DX.AX÷r16/m16的余数例题3.22说明第3章3.5.3符号扩展指令CBW;AL的符号扩展至AH;如AL的最高有效位是0,则AH=0
本文标题:第三章指令系统和寻址方式1
链接地址:https://www.777doc.com/doc-2121264 .html