收藏 分销(赏)

微机原理与接口技术-指令系统整理.doc

上传人:人****来 文档编号:4831810 上传时间:2024-10-14 格式:DOC 页数:17 大小:258.01KB 下载积分:8 金币
下载 相关 举报
微机原理与接口技术-指令系统整理.doc_第1页
第1页 / 共17页
微机原理与接口技术-指令系统整理.doc_第2页
第2页 / 共17页


点击查看更多>>
资源描述
目录 1 8086CPU指令 2 1.1. 编写说明 2 2 指令索引表 2 2.1. 8086CPU指令 2 2.2. 伪操作指令 15 1 8086CPU指令 1.1. 编写说明 对8086CPU的指令逐条介绍 2 指令索引表 2.1. 8086CPU指令 序号 指令 分类 指令 说明 1 数据传送指令 MOV DST, SRC 为双操作数指令,两个操作数中必须有一个是寄存器. 1.目的数可以是通用寄存器, 存储单元和段寄存器(但不允许用CS段寄存器). 2.立即数不能直接送段寄存器 3.不允许在两个存储单元直接传送数据 4.不允许在两个段寄存器间直接传送信息 2 数据传送指令 PUSH SRC 堆栈操作是以"后进先出"的方式进行数据操作.入栈的操作数除不允许用立即数外,可以为通用寄存器,段寄存器(全部)和存储器. 入栈时高位字节先入栈,低位字节后入栈. 3 数据传送指令 POP DST 出栈操作数除不允许用立即数和CS段寄存器外, 可以为通用寄存器,段寄存器和存储器. 执行POP SS指令后,堆栈区在存储区的位置要改变. 执行POP SP 指令后,栈顶的位置要改变. 4 数据传送指令 XCHG OPR1, OPR2 执行操作: Tmp=OPR1 OPR1=OPR2 OPR2=Tmp 1.必须有一个操作数是在寄存器中 2.不能与段寄存器交换数据 3.存储器与存储器之间不能交换数据. 5 数据传送指令 XLAT (OPR 可选) 换码指令: 把一种代码转换为另一种代码. 执行操作: AL=(BX+AL) 指令执行时只使用预先已存入BX中的表格首地址,执行后,AL中内容则是所要转换的代码. 6 数据传送指令 LEA REG, SRC 指令把源操作数SRC的有效地址送到指定的寄存器中. 执行操作: REG = EAsrc 注: SRC只能是各种寻址方式的存储器操作数,REG只能是16位寄存器 MOV BX , OFFSET OPER_ONE 等价于 LEA BX , OPER_ONE MOV SP , [BX] //将BX间接寻址的相继的二个存储单元的内容送入SP中 LEA SP , [BX] //将BX的内容作为存储器有效地址送入SP中 7 数据传送指令 LDS REG , SRC //常指定SI寄存器。 执行操作: REG=(SRC), DS=(SRC+2) //将SRC指出的前二个存储单元的内容送入指令中指定的寄存器中,后二个存储单元送入DS段寄存器中。 8 数据传送指令 LES REG, SRC //常指定DI寄存器 执行操作: REG=(SRC) , ES=(SRC+2) //与LDS大致相同,不同之处是将ES代替DS而已. 9 数据传送指令 LAHF LAHF ( Load AH with Flags ) 标志位送AH指令 //将PSW寄存器中的低8位的状态标志(条件码)送入AH的相应位, SF送D7位, ZF送D6位...... 执行操作: AH=PSW的低位字节。 10 数据传送指令 SAHF SAHF ( Store AH into Flags ) AH送标志寄存器指令 //将AH寄存器的相应位送到PSW寄存器的低8位的相应位, AH的D7位送SF, D6位送ZF...... 执行操作: PSW的低位字节=AH。 11 数据传送指令 PUSHF PUSHF ( PUSH the Flags) 标志进栈指令 //将标志寄存器的值压入堆栈顶部, 同时栈指针SP值减2 执行操作: SP=SP-1,(SP)=PSW的高8位, SP=SP-1, (SP)=PSW的低8位 12 数据传送指令 POPF POPF ( POP the Flags ) 标志出栈指令 //与PUSHF相反, 从堆栈的顶部弹出两个字节送到PSW寄存器中, 同时堆栈指针值加2 执行操作: PSW低8位=(SP), SP=SP+1, PSW高8位=(SP) , SP=SP+1 13 数据传送指令 IN 输入输出指令(IN,OUT) 只限于使用累加器AX或AL与外部设备的端口传送信息. (INput)输入指令:信息从I/O通过累加器传送到CPU IN AL , PORT //直接的字节输入,PORT是外设端口编号(即端口地址),只能取 00H ~ 0FFH共256个端口地址. IN AX , PORT //直接的字输入,AX存储连续两个端口地址PORT+1,PORT IN AL , DX //间接的字节输入,端口地址范围可通过DX设置为0000H ~ 0FFFFH共65536个端口地址 IN AX , DX //间接的字输入 14 数据传送指令 OUT ( OUTput)输出指令 :信息从CPU通过累加器传送到I/O OUT PORT , AL //直接的字节输出,PORT规定与IN指令相同. OUT PORT , AX OUT DX , AL //间接的字节输出 OUT DX , AX MOV AL,05H OUT 27H, AL //将字节05H传送到地址27H的端口 15 算术运算指令 ADD(ADD) ADD DST , SRC //Byte/Word 执行操作: dst=dst+src 1.两个存储器操作数不能通过ADD指令直接相加, 即DST 和SRC必须有一个是通用寄存器操作数. 2.段寄存器不能作为SRC 和DST. 3.影响标志位Auxiliary Crray Flag ,Carry Flag, Overflow Flag, Parity Flag, Sign Flag 和Zero Flag ,如下所示: CF 根据最高有效位是否有进(借)位设置的:有进(借)位时CF=1, 无进(借)位时CF=0. OF 根据操作数的符号及其变化来设置的:若两个操作数的符号相同,而结果的符号与之相反时OF=1, 否则为0. ZF 根据结果来设置:不等于0时ZF=0, 等于0时ZF=1 SF 根据结果的最高位来设置:最高位为0, 则SF=0. AF 根据相加时D3是否向D4进(借)位来设置:有进(借)位时AF=1, 无进(借)位时AF=0 PF 根据结果的1的个数时否为奇数来设置:1的个数为奇数时PF=0, 为偶数时PF=1 16 算术运算指令 ADC DST , SRC  ADC( ADd with Carry)带进位加法指令 ADC DST , SRC //Byte/Word 执行操作: dst=dst+src+CF //与ADD不同之处是还要加上进位标志位的值. 17 算术运算指令 INC OPR INC ( INCreament) 加1指令 INC OPR //Byte/Word 执行操作: OPR=OPR+1 1.OPR可以是寄存器和存储器操作数, 但不能是立即数和段寄存器 2.影响标志位OF,SF,ZF,PF 和AF,不影响CF. 18 算术运算指令 SUB DST , SRC 减法运算指令 SUB ( SUBtract ) 不带借位的减法指令 SUB DST , SRC //Byte/Word 执行操作:dst=dst - src 1.DST和SRC寻址方式及规定与ADD相同. 2.影响全部标志位.(判断标志位参见ADD) 19 算术运算指令 SBB DST , SRC SBB ( SuBtract with Borrow) 带借位减法指令 SBB DST , SRC //Byte/Word 执行操作:dst= dst - src - CF 20 算术运算指令 DEC OPR  DEC ( DECrement ) 减1指令 DEC OPR //Byte/Word 执行操作:OPR = OPR - 1 //除CF标志位, 其余标志位都受影响. 21 算术运算指令 NEG ( NEGate ) 求补指令 NEG OPR 执行操作:opr = 0- opr //将操作数按位求反后末位加1. 22 算术运算指令 CMP ( CoMPare ) 比较指令 CMP OPR1 , OPR2 执行操作:OPR1 - OPR2 //与SUB指令一样执行运算, 但不保存结果. 比 情况 无符号数 有符号数 A=B ZF=1 ZF=1 A>B CF=0 && ZF=0 SF^OF=0 && ZF=0 A<B CF=1 && ZF=0 SF^OF=1 && ZF=0 A>=B CF=0 || ZF=1 SF^OF=0 || ZF=1 A<=B CF=1 || ZF=1 SF^OF=1 || ZF=1 23 算术运算指令 MUL 乘法运算指令,无符号数乘法指令 MUL SRC //Byte/Word . 执行操作:Byte => AX= AL *src //字节运算时目的操作数用AL, 乘积放在AX中 Word => DX=AX *src //字运算时目的操作数用AX, DX存放乘积的高位字, AX放乘积的低位字 1.目的数必须是累加器 AX 或AL,指令中不需写出 2. 源操作数SRC可以是通用寄存器和各种寻址方式的存储器操作数, 而绝对不允许是立即数或段寄存器. 24 算术运算指令 IMUL IMUL (sIgned MULtiple) 有符号数乘法指令 IMUL SRC //与MUL指令相同,但必须是带符号数 25 算术运算指令 DIV 除法运算指令 DIV SRC //Byte/Word 其中: SRC的规定同乘法指令MUL 执行操作:Byte => AX / src //字节运算时目的操作数在AX中,结果的商在AL中 ,余数中AH中 Word=> DX,AX /src //字运算时目的操作数在DX高位字和AX低位字中,结果的商在AX中 ,余数在DX中 存储器操作数必须指明数据类型:BYTE PTR src 或 WORD PTR src 26 算术运算指令 IDIV IDIV (sIgned DIVied) 有符号数除法指令 IDIV SRC //Byte/Word 与DIV指令相同,但必须是带符号数 27 算术运算指令 CBW 转换指令 CBW (Convert Byte to Word) 字节转换为字指令 CBW 执行操作: AL中的符号位(D7)扩展到8位AH中,若AL中的D7=0,则AH=00H,若AL中的D7=1,则AH=FFH. 28 算术运算指令 CWD CWD (Convert Word to Double word) 字转换为双字指令 CWD 执行操作: AX中的符号位(D15)扩展到16位DX中,若AX中的D15=0,则DX=0000H,若AX中的D15=1,则DX=FFFFH. 29 算术运算指令 DAA 十进制调整指令 当计算机进行计算时,必须先把十进制数转换为二进制数,再进行二进制数运算,最后将结果又转换为十进制数输出. 在计算机中,可用4位二进制数表示一位十进制数,这种代码称为BCD ( Binary Coded Decimal ). BCD码又称8421码,在PC机中,BCD码可用压缩的BCD码和非压缩的BCD码两种格式表示. 压缩的BCD码用4位二进制数表示一个十制数,整个十进数形式为一个顺序的以4位为一组的数串. 非压缩的BCD码以8位为一组表示一个十进制数,8位中的低4位表示8421的BCD码,而高4位则没有意义. 压缩的BCD码调整指令 DAA (Decimal Adjust for Addition) 加法的十进制调整指令 DAA 执行操作:执行之前必须先执行ADD或ADC指令,加法指令必须把两个压缩的BCD码相加,并把结果存话在AL寄存器中. 30 算术运算指令 DAS DAS (Decimal Adjust for Subtraction) 减法的十进制调整指令 DAS 执行操作:执行之前必须先执行SUB或SBB指令,减法指令必须把两个压缩的BCD码相减,并氢结果存放在AL寄存器中. 31 算术运算指令 AAA 非压缩的BCD码调整指令 AAA (ASCII Adjust for Addition) 加法的ASCII调整指令 AAA 执行操作:执行之前必须先执行ADD或ADC指令,加法指令必须把两个非压缩的BCD码相加,并把结果存话在AL寄存器中. 32 算术运算指令 AAS AAS (ASCII Adjust for Subtraction) 减法的ASCII调整指令 AAS 执行操作:执行之前必须先执行SUB或SBB指令,减法指令必须把两个非压缩的BCD码相减,并氢结果存放在AL寄存器中. 33 串操作指令 MOVS MOVS ( MOVe String) 串传送指令 MOVSB //字节串传送 DF=0, SI = SI + 1 , DI = DI + 1 ;DF = 1 , SI = SI - 1 , DI = DI - 1 MOVSW //字串传送 DF=0, SI = SI + 2 , DI = DI + 2 ;DF = 1 , SI = SI - 2 , DI = DI - 2 执行操作:[DI] = [SI] ,将位于DS段的由SI所指出的存储单元的字节或字传送到位于ES段的由DI 所指出的存储单元,再修改SI和DI, 从而指向下一个元素. 在执行该指令之前,必须预置SI和DI的初值,用STD或CLD设置DF值. MOVS DST , SRC //同上,不常用,DST和SRC只是用来用类型检查,并不允许使用其它寻址方式来确定操作数. 1.目的串必须在附加段中,即必须是ES:[DI] 2.源串允许使用段跨越前缀来修饰,但偏移地址必须是[SI]. 34 串操作指令 STOS STOS (STOre into String) 存入串指令 STOS DST STOSB //存放字节串 ( DI ) = AL STOSW //存放字串 ( DI ) = AX 执行品作:把AL或AX中的内容存放由DI指定的附加段的字节或字单元中,并根据DF值修改及数据类型修改DI的内容. 1.在执行该指令之前,必须把要存入的数据预先存入AX或AL中,必须预置DI的初值. 2.DI所指向的存储单元只能在附加段中,即必须是ES:[DI] 35 串操作指令 LODS LODS ( LOaD from String ) 从串取指令 LODS SRC LODSB //从字节串取 AL=(SI) LODSW //从字串取 AX= (SI±1) (SI) 执行操作:把由SI指定的数据段中字节或字单元的内容送入AL或AX中,并根据DF值及数据类型修改SI的内容. 1.在执行该指令之前,要取的数据必须在存储器中预先定义(用DB或DW),必须预置SI的初值. 2.源串允许使用段超越前缀来改变数据存储的段区. 36 串操作指令 REP REP (REPeat)重复操作前缀 REP String Primitive //其中:String Primitive可为MOVS,STOS或LODS指令 执行操作:使REP前缀后的串指令重复执行,每执行一次CX=CX-1,直至CX=0时退出REP. 37 串操作指令 CLD 方向标志设置 CLD (CLear Direction flag) 清除方向标志指令 执行操作:令DF=0, 其后[SI],[DI]执行增量操作   STD (SeT Direction flag) 设置方向标志指令 38 串操作指令 STD STD 执行操作:令DF=1, 其后[SI],[DI]执行减量操作 39 串操作指令 CMPS CMPS (CoMPare String) 串比较指令 CMPS SRC , DST CMPSB //字节串比较 (SI)-(DI) CMPSW //字串比较 (SI+1)(SI) - (DI+1)(DI) 执行操作:把由SI指向的数据段中的一个字节或字与由DI指向的附加段中的一个字节或字相减,不保留结果,只根据结果置标志位. 40 串操作指令 SCAS SCAS (SCAn String ) 串扫描指令 SCAS DST SCASB SCASW 执行操作:把AX或AL的内容与由DI指向的在附加段中的一个字节或字相减,不保留结果,根据结果置标志位. 41 逻辑运算指令和移位指令 AND (and) 逻辑与指令AND, OR , XOR 和 TEST都是双字节操作指令,操作数的寻址方式的规定与算术运算指令相同. NOT是单字节操作指令,不允许使用立即数. 逻辑运算均是按位进行操作,真值表如下: A:逻辑运算指令 AND (and) 逻辑与指令 AND DST , SRC //Byte/Word 执行操作:dst = dst & src 1.AND指令执行后,将使CF=0,OF=0,AF位无定义,指令执行结果影响SF,ZF和PF标志位. 2.AND指令典型用法A:用于屏蔽某些位,即使某些位为0. 屏蔽AL的高4位:即将高4位和0000B相与,低4位和1111B相与 MOV AL , 39H //AL= 0011 1001B[39H] ADD AL , 0FH // AL= 0000 1001B[09H] 即0011 1001B[39H] & 0000 1111B[0FH] = 0000 1001B[09H] 3.AND指令典型用法B:取出某一位的值(见TEST) 42 逻辑运算指令和移位指令 OR OR (or) 逻辑或指令 OR DST , SRC //Byte/Word 执行操作:dst = dst | src 1.OR指令执行后,将使CF=0, OF=0, AF位无定义,指令执行结果影响SF, ZF和PF标志位. 2.常用于将某些位置1. 将AL的第5位置1: MOV AL , 4AH // AL=0100 1010B[4AH] OR AL , 10H // AL=0101 1010B[5AH] 即0100 1010B[4AH] | 0001 0000B[10H] =0101 1010B [5AH] 43 逻辑运算指令和移位指令 XOR XOR (eXclusive OR) 逻辑异或指令 XOR DST , SRC //Byte/Word 执行操作:dst = dst ^ src 1.XOR指令常用于使某个操作数清零,同时使CF=0,清除进位标志. 2.XOR指令使某些位维持不变则与 '0' 相异或,若要使某些位取反则与 '1'相异或. 将AL的高4位维持不变,低4位取反: MOV AL, B8H //AL=1011 1000B[B8H] XOR AL, 0FH //AL=1011 0111B[B7H] 即1011 1000B[B8H] ^ 0000 1111[0FH]=1011 0111B[B7H] 测试某一个操作数是否与另一确定操作数相等: XOR AX , 042EH JZ .... //如果AX==042EH, 则ZF=TRUE(1), 执行JZ... 44 逻辑运算指令和移位指令 NOT NOT OPR //Byte/Word 执行操作:opr = ~opr // ~ 01100101 [65H] =10011010 [9AH] 1.操作数不能使用立即数或段寄存器操作数,可使用通用寄存器和各种方式寻址的存储器操作数. 2.NOT指令不影响任何标志位。 将AL各位取反: MOV AL,65H //AL=0110 0101B[65H] NOT AL //AL=1001 1010B[9AH] 即 ~ 0110 0101B[65H]=1001 1010B[9AH] 45 逻辑运算指令和移位指令 TEST TEST (test) 指令 TEST OPR1 , OPR2 //Byte/Word 执行操作:opr1 & opr2 1.两个操作数相与的结果不保存,结果影响标志位PF,SF和ZF,使CF=0, OF=0,而AF位无定义. 2.TEST指令常用于在不改变原有的操作数的情况下,检测某一位或某几位的条件是否满足.只要令用来测试的操作数对应检测位为1,其余位为0,相与后判断零标志ZF值的真假. 检测某位是否为1: 令用来测试的操作数对应检测位为1,其余位为0,TEST指令后,若该位为1则 JNZ... TEST AL , 0000 00001B //测试AL最低位是否为1:: 令用来测试的操作数对应检测位为1,其余位为0,执行TEST指令 JNZ THER  //最低位若为1, 则ZF=FALSE(0), 执行JNZ THER, 否则执行下一条指令. 或者:先对操作数求反,令用来测试的操作数对应检测位为1,其余位为0,TEST指令后,若该位为1则JZ... MOV DL , AL //将AL 传送到DL,主要是不要影响AL的值. 以下测试AL的b2位是否为1 NOT DL //先对操作数求反 TEST 0000 0100B //令用来测试的操作数对应检测位为1,其余位为0,执行TEST指令 JZ THER //若AL的b2位为1,则ZF=TRUE(1), 执行JZ THER 46 逻辑运算指令和移位指令 SHL B:移位指令[所有的移位指令都影响标志位CF、OF、PF、SF和ZF.AF无定义.] 非循环逻辑移位:把操作数看成无符数来进行移位. SHL ( SHift logical Left )逻辑左移指令 SHL OPR , CNT //Byte/Word 执行操作:使OPR左移CNT位,并使最低CNT位为全0. 1.OPR操作数不能使用立即数或段寄存器操作数,可使用通用寄存器和各种方式寻址的存储器操作数. 2.移位次数由CNT决定.每次将OPR的最高位移出并移到CF,最低位补0. MOV CL , 7 //若移位多次, 先预置移位次数CL SHL DX , CL //CNT可取1或CL寄存器操作数 47 逻辑运算指令和移位指令 SHR SHR (SHift logical Right) 逻辑右移指令 SHR OPR , CNT //Byte/Word 同SHL,每次将OPR的最低位D0移出并移到CF.最高位补0. 48 逻辑运算指令和移位指令 SAL 非循环算术移位:将操作数看成有符号数来进行移位. SAL (Shift Arithmetic Left) 算术左移指令 SAL OPR , CNT //Byte/Word SAL指令与SHL指令完全相同 49 逻辑运算指令和移位指令 SAR SAR(Shift Arithmetic Right) 算术右移指令 SAR OPR , CNT //Byte/Word SAR指令每次移位时,将最高位移入次高位的同时最高位值不变,最低位D0移出并移到CF. 50 逻辑运算指令和移位指令 ROL 循环移位指令 ROL ( ROtate Left) 循环左移指令 ROL OPR , CNT //Byte/Word 每次移位时,最高位移出并同时移到CF和最低位D0. 51 逻辑运算指令和移位指令 ROR ROR (ROtate Right)循环右移指令 ROR OPR,CNT //Byte/Word 每次移位时,最低位D0移出并同时移到CF和最高位. 52 逻辑运算指令和移位指令 RCL 带进位循环移位指令 RCL (Rotate Left through Carry)带进位循环左移指令 RCL OPR,CNT //Byte/Word 53 逻辑运算指令和移位指令 RCR  RCR (Rotate Right through Carry)带进位循环左移指令 RCR OPR ,CNT //Byte/Word 54 控制转移指令 JMP JMP ( JuMP ) 无条件转移指令 名称 格式 执行操作 段内直接短跳转 JMP SHORT OPR IP=IP+8位偏移量 段内直接近转移 JMP NEAR PTR OPR IP=IP+16位偏移量 段内间接转移 JMP WORD PTR OPR IP=(EA) 段间直接转移 JMP FAR PTR OPR IP=OPR偏移地址,CS=OPR段地址 段间间接转移 JMP DWORD PTR OPR IP=(EA),CS=(EA+2) 1.无条件转移到指定的地址去执行从该地址开始的指令. 2.段内转移是指在同一代码段的范围内进行转移,只需改变IP寄存器内容. 3.段间转移则要转移到另一个代码段执行程序,此时要改变IP寄存器和CS段寄存器的内容. 55 控制转移指令 JZ 条件转移指令:根据上一条指令所设置的条件码(标志位)来判断测试条件. 根据五个标志位:ZF、SF、OF、 PF、 CF的两种状态(0 FALSE或1 TRUE)产生10种测试条件. Name Flag Flag == TRUE [1] Flag ==FALSE [ 0] Zero Falg ZF JZ OPR //结果为零转移 JNZ OPR //结果不为零转移 Sign Falg SF JS OPR //结果为负转移 JNS OPR //结果为正转移 Overflow Flag OF JO OPR //溢出转移 JNO OPR //不溢出转移 Parity Flag PF JP OPR //结果为偶转移 JNP OPR //结果为奇转移 Carry Flag CF JC OPR //有进位转移 JNC OPR //无进位转移 两个数比较: 情况 无符号数 有符号数 指令 满足条件 指令 满足条件 A < B JC CF==1 JL SF^OF==1 && ZF==0 A ≥ B JNC CF==0 JNL SF^OF==0 || ZF==1 A ≤ B JNA CF==1 || ZF==1 JLG SF^OF==1 || ZF==1 A > B JA CF==0 && ZF==0 JG SF^OF==0 && ZF==0 56 控制转移指令 JNZ 57 控制转移指令 JS 58 控制转移指令 JNS 59 控制转移指令 JO 60 控制转移指令 JNO 61 控制转移指令 JP 62 控制转移指令 JNP 63 控制转移指令 JC 64 控制转移指令 JNC 65 控制转移指令 JA 66 控制转移指令 JNA 67 控制转移指令 JL 68 控制转移指令 JNL 69 控制转移指令 JLG 70 控制转移指令 JG 71 控制转移指令 JCXZ OPR 测试CX转移指令 JCXZ OPR //CX==0时转移 72 控制转移指令 LOOP LOOP(LOOP)循环指令 LOOP OPR 测试条件:CX ≠ 0 //OPR在程序中实际是个标号 LOOPZ OPR 测试条件:ZF == 1 && CX ≠ 0 LOOPNZ OPR 测试条件:ZF == 0 && CX ≠ 0 执行操作: 先执行CX=CX-1,再检测上面的测试条件,如满足则IP=IP+符号扩展的D8,不满足则退出循环. 73 控制转移指令 LOOPZ OPR 74 控制转移指令 LOOPNZ OPR 75 控制转移指令 CALL 过程调用及返回指令 CALL (CALL) 过程调用指令 CALL DST //DST在程序中实际是子程序标号 执行操作:先将过程的返回地址(即CALL的下一条指令的首地址)存入堆栈,然后转移到过程入口地址执行子程序. 调用方式 格式 断点保护入栈情况 过程入口地址 段内直接 CALL NEAR PTR PR1 (SP-1)(SP-2)←IP , CS不进栈 CS值保持不变,IP←DST 段内间接 CALL WORD PTR (EA) (SP-1)(SP-2)←IP , CS不进栈 CS值保持不变,IP←(EA) 段间直接 CALL FAR PTR PR1 (SP-1)(SP-2)←CS , (SP-3)(SP-4)←IP IP←DST偏移地址,CS←DST段地址 段间间接 CALL DWORD PTR (EA) (SP-1)(SP-2)←CS , (SP-3)(SP-4)←IP IP←(EA),CS←(EA+2) 注:为了表明是段内调用,可使用NEAR PTR属性操作符作说明. 76 控制转移指令 RET RET(RETurn)子程序返回指令 RET RET EXP //带立即数返回 子程序返回指令RET放在子程序末尾,它使子程序在执行完全部任务后返回主程序继续执行被打断后的程序.返回地址在子程序调用时入栈保存的断点地址-IP或IP和CS. 77 处理器控制指令 CLC CLC (CLear Carry) 进位位置0指令 CLC //执行操作后,CF=0 78 处理器控制指令 CMC CMC (CoMplement Carry) 进位位求反指令 CMC //执行操作后,CF=!CF 79 处理器控制指令 STC STC (SeT Carry) 进位位置1指令 STC //执行操作后,CF=1 80 处理器控制指令 NOP NOP (No Operetion) 无操作指令 NOP //此指令不执行任何操作,其机器码占一个字节单元 81 处理器控制指令 HLT HLT (HaLT) 停机指令 HLT 执行操作后,使机器暂停工作,使处理器CPU处于停机状态,以等待一次外部中断到来,中断结束后,程序继续执行,CPU继续工作. 2.2. 伪操作指令 82 同一个程序中,标号或变量只能定义一次. 标号有三种属性:段、偏移、类型(NEAR PTR,WORD PTR,FAR PRT,DWORD PTR) 83 数值回送操作符:TYPE、LEGNTH、SIZE、OFFSET、SEG TYPE expression(or label) 如果表达式是变量,则回送该变量以字节数表示的类型:DB为 1, DW为 2, DD为 4... 如果表达式是标号,则回送该标号类型的数值:NEAR为 -1, FAR为 -2. 如果表达式是常量,则回送0. array DW A110H,B02CH,C322H ADD AX, TYPE array 等价于 ADD AX, 2 LENGTH variable 对于变量使用DUP的情况,将回送分配给该变量的单元数; 对其它情况则回送1. fees DW 100 DUP(?) MOV CX, LEGNTH fees 等价于MOV CX, 100   SIZE variable 回送分配给该变量的字节数 MOV CX, SIZE fees 等价于 MOV CX, 200   OFFSET variable (or lable) 回送变量或标号的偏移地址. MOV BX,OFFSET OPER_ONE 等价于 LEA BX,OPER_ONE 语句 ,将OPER_ONE的偏移地址送入BX   SEG variable(or lable) 回送变量或标号的段地址. 若OPER_ONE是DATA_SEG数据段中的一个变量,下面语句取得DATA_SEG段首地址 MOV DS , SEG OPER_ONE 等价于 MOV AX , DATA_SEG MOV DS , AX 84 属性操作符:PTR、THIS、HIGH、LOW、HIGHWORD、LOWWORD type PTR expression 用来给已分配的存储地址赋予另一种属性,使该地址具有另一种类型. 表示按expression表达式寻址,按指定的类型type看待. 即PTR是给后面的expression操作数赋予新的数据类型或地址类型. MOV BYTE PTR[BX] , 5 //存入字节(Byte)单元 MOV WORD PTR[BX] , 5 //存入字(Word)单元   THIS type 指定与当前地址计数器相等的一个地址单元的类型.type是NEAR、FAR、PROC,也可以是BYPE、WORD... first_type EQU THIS BYTE word_table DW 100 DUP(?) 此时,first_type的偏移地址与word_table完全相同,但它是字节类型   HIGH (LOW) express 字节分离操作符, HIGH取高位字节, LOW取低位字节. HIGHWORD (LOWWORD) express 字分离操作符, HIGHWORD取高位字, LOWWORD取低位字. CONST EQU 0ABCDH MOV AH, HIGHT CONST 等价于MOV AH,0ABH 85 数据定义语句: variable_name Mnemonic oper1, oper2..... 常用的助记符Mnemonic有: DB 定义字节,表示其后每个操作数占有一个字节(1Byte)单元 DW 定义字,表示表示其后每个操作数占有一个字(2Byte)单元 DD 定义双字,表示表示其后每个操作数占有两个字(4Byte)单元 DQ 定义四个字,表示表示其后每个操作数占有四个字(8Byte)单元 DT 定义十个字节,表示表示其后每个操作数占有十个字(10Byte)单元,形成压缩BCD码. data_byte DB 10 , 4 , 10H , ? //共定义了4个字节,其中 '?' 是保留单元 data_word DW 100,?,100H //共定义了3个字(6Byte) str_aa DB 'ABCDEFG' //定义和初始化多于两个能上能下字符的字符串时,只能使用DB伪指令. 86 符号定义语句(即常量) name EQU expression //定义 PURGE name1,name2... //解除 CONSTANT EQU 256 //表示CONSTANT的值为256 87 段定义语句:SEGMENT ... ENDS、ASSUME、ORG segmnet_name SEGMENT [align_type] [combine_type] [use_type] [class] ... segment_name ENDS //SEGMENT和ENDS成对使用,把汇编语句分成段 对于数据段、附加段和堆栈段,一般是存储单元定义、初始化数据、分配单元等伪指令. 对于代码段,主要是指令序列和伪指令. 可选项说明:详细
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服