微机原理总汇编指令集合
微机原理 指令大全

MOV(MOVe)传送指令P86PUSH入栈指令P86POP出栈指令P87XCHG(eXCHanG)交换指令P88XLAT(TRANSLATE)换码指令P89LEA (Load Effective Address)有效地址送寄存器指令P89 LDS(Load DS with pointer)指针送寄存器和DS指令P90 LES(Load ES with pointer)指针送寄存器和ES指令P90 LAHF(Load AH with Flags)标志位送AH指令P91SAHF(Store AH into Flgs) AH送标志寄存器指令P91 PUSHF(PUSH the Flags)标志进栈指令P91POPF(POP the Flags)标志出栈指令P91ADD加法指令P92ADC带进位加法指令P92INC加1指令P92SUB(SUBtract)不带借位的减法指令P93SBB(SuVtrach with borrow)带借位的减法指令P93DEC(DECrement)减1指领P93NEG(NEGate)求补指令P93CMP(CoMPare)比较指令P93MUL(unsinged MULtiple)无符号数乘法指令P93IMUL(sIgned MUL tiple)有符号数乘法指令P93DIV(unsigned DIVide)无符号数除法指令P94IDIV(sIgned DIVide)有符号数除法指令P94CBW(Count Byte to Word)字节转换为字指令P94CWD(Count Word to Doble word)字转换为双字指令P94 DAA压缩的BCD码加法十进制调整指令P95DAS压缩的BCD码减法十进制调整指令P95AAA非压缩的BCD码加法十进制调整指令P95AAS非压缩的BCD码加法十进制调整指令P95 AAM,AAD AND逻辑与指令P96OR逻辑或指令P96XOR逻辑异或指令P96NOT逻辑非指令P96TEST测试指令P96SHL(SHift logical Letf)逻辑左移指令P97SHR(SHift logical Right)逻辑右移指令P97SALSARROL(Rotate Left )循环左移指令P98ROR(Rotate Right)循环右移指令P98RCL(Rotate Left through Carry)带进位循环左移P98 RCR(Rotate Right through Carry)带进位循环左移P98 MOVS(MOVe String)串传送指令P100STOS(STOre into String)存入串指令P102LODS(LOad from string)从串取指令P102REP(REPeat)重复操作前缀P99CLD(CLear Direction flag)清除方向标志指令107STD(SeT Direction flag)设置方向标志指令107CMPS(CoMPare String)串比较指令100SCAS(SCAn String)串扫描指令101REPE/REPZ(REPeat while Equal/Zero)相等/为零时重复操作前缀99REPNE/REPNZ(REPeat while Not Equal/Zero)不相等/不为零进重复前缀99IN(INput)输入指令88OUT(OUTput)输出指令88JMP(JuMP)无条件转移指令103JZ,JNZ,JS,JNS,JO,JNO,JP,JNP,JB,JNB,JBE,JNBE,JL,JNL,JLE,JNLE,JCXZ条件转移指令103LOOP循环指令105LOOPZ/LOOPE为零/相等时循环指令105LOOPNZ/LOOPNE不为零/不相等时循环指令105CALL子程序调用指令106RET(RETun)子程序返回指令106CLC(CLear Carry)进位位置0指令107CMC(CoMplement Carry)进位位求反指令107SRC(SeT Carry)进位位置1指令NOP(No OPeretion)无操作指令 107HLT(HaLT)停机指令107OFFSET返回偏移地址 141SEG返回段地址141 TYPE SIZE LENGTH 142EQU(=)等值语句128PURGE解除语句128DUP操作数字段用复制操作符127SEGMENT,ENDS段定义指令129ASSUME段地址分配指令130ORG起始偏移地址设置指令132$地址计数器的当前值PROC,ENDP过程定义语句131NAME,TITLE,END程序开始结束语句131,132MACRO,ENDM宏定义指令147STRUC,ENDS 133PUBLIC,EXTRN 136EVEN 138MOD 139IF, END IF 138EQ, NE,LT,GT,LE,GE 140THIS SHORT HIGH LOW 144INT 20H INT 21H 153Welcome 欢迎您的下载,资料仅供参考!。
微机原理汇编指令1

数值型表达式
数值表达式一般是指由运算符连接的各种常数所构成的表 达式。 汇编程序在汇编过程中计算表达式,最终得到一个数值。
目 录
前一页
后一页
退出
运算符
算术运算符 + - * / MOD 逻辑运算符 AND OR XOR NOT 移位运算符 SHL SHR 关系运算符 EQ NE GT LT GE LE 高低分离符 HIGH LOW HIGHWORD LOWWORD 目 前一页 后一页 录
退出
算术运算符
实现加、减、乘、除、取余的算术运算 mov ax , 3 * 4 + 5 ;等价于 mov ax,17 其中MOD也称为取模,它产生除法之后的余数,如 19 mod 7 = 5 加+和减-运算符还可以用于地址表达式。 两个地址相乘、相除是无意义的; 两个不同段的地址相加也是无意义的。 经常使用的是地址±数字量,它是有意义的。 除加、减外,其他运算符的参数必须是整数。
目 录
前一页
后一页
退出
例4.27
地址操作符
MOV BX , OFFSET OPER_ONE ;与LEA BX , OPER_ONE等价 例4.28 如果DATA_SEG是从存储器05000H地址开始 的一个数据段的段名,OPER1是该段中的一个变量名。 MOV BX , SEG OPER1 ;汇编结果:MOV BX , 0500H ;将OPER1所在段的起始偏移地址送入BX。
目 录
前一页
后一页
退出
例:
THIS操作符举例 b_var equ THIS byte ;按字节访问变量b_var,但与w_var的地址相同 w_var dw 10 dup(0) ;按字访问变量w_var
微机原理指令表和解释

LODSB;(字节传送)AL DS:[SI] SI [SI+-1]
LODSW;(字传送)AL DS:[SI] SI [SI+-2]
存串指令
STOSB;(字节传送)ES:[DI] AL DI [DI+-1]
STOSW;(字传送)ES:[DI] AX DI [DI+-2]
串比较指令
CMPSB;(字节传送)DS:[SI]- ES:[DI] SI [SI+-1] DI [DI+-1]
空操作指令nop做空操作用于延时暂停指令hlt程序暂停执行等待指令waitcpu引脚为高电平时执行封锁指令lock总线封锁cpu独占总线指令交权指令esc
1.传送类指令
MOV DEST,SRC;DEST(除CS)SRC
2.交换指令
XCHG DEST,SRC;DEST(寄存器)SRC
3.堆栈操作指令
PUCH SRC;SP SP-2将16位源操作数压入堆栈
AAA;加法运算十进制调整
AAS;减法运算十进制调整
10.逻辑指令
AND DEST,SRC;DEST DEST&&SRC
OR DEST,SRC;DEST DEST||SRC
NOT DEST;NOT!NOT
XOR DEST,SRC;DESTDEST异或SRC
测试指令
TEST DEST,SRC;将DEST&&SRC结果不送回DEST
REPNZ;每执行依次串指令CX(CX)-1 CX=0或ZF=1重复执行结束
14.无条件转移类指令
JMP DEST;无条件转移到DEST所指定的地址
15.循环指令
LOOP DEST;CXCX)-1直至CX=0结束循环
微机原理指令整理

类别指令类型指令名称指令缩写指令功能影响标志格式格式含义源操作数目的操作数传送指令通用传输指令基本传输指令MOV将源操作数中的数据传送至目的操作数,以实现寄存器与寄存器、寄存器与存储器之间数据传送以及立即数送往寄存器或存储器无1.MOV WORD PTR [2000],AX将AX送2000和2001单元(低位在低地址,高位在高地址,下同)至少有一个是寄存器(除立即数送存储器外);不能在两个存储单元之间直接传送数据;不能在两个段寄存器之间直接传送数据;不能将立即数直接送至段寄存器;SS和SP赋值必须紧邻指令指针IP既不作目的操作数也不做源操作数2.MOV AX,ES:[BX+SI+50]将ES段(BX+SI+50)字单元内容送AX3.MOV SS,BX 将BX内容送SS4.MOV ES,SS:[DI+200]将SS段(DI+200)字单元内容送ES5.MOV BX,CX 将CS内容送BX6.MOV WORD PTR[BX+DI],SS将SS内容送(BX+DI)字单元CS不能作目的操作数;立即数不能作目的操作数7.MOV CL,DH 将DH内容送CL8.MOV DI,[SI+100]将(SI+100)字单元内容送DI9.MOV WORD PTR [DI],DX将DX内容送(DI)字单元10.MOV CX,3330 立即数3330送微机原理指令整理 1微机原理指令整理2CX11.MOV BYTE PTR [DI],0立即数0送(DI)字节单元 堆栈操作指令PUSH将来自通用寄存器、段寄存器或存储单元的一个字(16位)内容压入堆栈(SP 指向的栈顶个单元)无1.PUSH AX AX 内容进栈 通用寄存器、段寄存器、存储单元的一个字CS 不能作目的操作数; 2.PUSH SISI 内容进栈 3.PUSH ESES 内容进栈 4.PUSH CSCS 内容进栈 5.PUSH WORD PTR [BX](BX)和(BX+1)单元内容进栈6.PUSH WORD PTR BETA [BX] (BX+BETA)字单元内容进栈 不能使用8位源或目的操作数 POP将栈顶个单元的内容退出(弹出)到通用寄存器、段寄存器或存储单元无1.POP BX栈顶2个字节出栈到BX 不能使用8位源或目的操作数 2.POP DX 栈顶2个字节出栈到DX 通用寄存器、段寄存器、存储单元的一个字节;CS 不能作目的操作数3.POP ES栈顶2个字节出栈到ES 4.POP SS栈顶2个字节出栈到SS 5.POP [BX+50]栈顶2个字节出栈到(BX+50)字单元6.POP [BP+DI]栈顶2个字节出栈到(BP+DI )字单元交换指令XCHG 实现数据宽度相同的源操作数与目的操作数之间的数据交换,亦即同为8位或16位的累加器与寄存器、寄存器与寄存器以及寄存器与存储单元之间的数据交换无1.XCHG AL,BLAL与BL之间字节交换段寄存器、CS、IP、立即数不能作为源或目的操作数;两个存储单元之间、段寄存器与段寄存器之间不能进行交换2.XCHG CX,AXCX与AX之间字交换3.XCHG DH,CLDH与CL之间字节交换4.XCHG BX,CXBX与CX之间字交换5.XCHG BL,[1000]BL与1000单元内容字节交换6.XCHG WORD PTR [DI],DX(DI)字单元内容与DX字交换专用累加器传送指令换码指令XLAT专门使用累加器AL并将其中的值(比如按二进制、十进制或十六进制等编码)变换成内存某一表格区内对应的另一种编码(比如发光二极管LED的字形码或其他通讯码等)无MOV BX,TABLE_SEGCODEXLAT设置SEGCODE表首址对表进行检索有操作码,无操作数。
微机原理汇编常用指令

1) ADD 加法指令汇编格式:ADD 目的操作数,源操作数执行的操作:(目的操作数)←源操作数+目的操作数2) ADC 带进位加法指令汇编格式:ADC 目的操作数,源操作数执行的操作:(目的操作数)←源操作数+目的操作数+CF3) INC 增量指令汇编格式:INC 操作数执行的操作:(操作数)←操作数+1PS:以上三条指令都可作字或字节运算,除INC指令不影响CF标志位外,其他标志位都受指令操作结果的影响。
4) SUB 减法指令汇编格式:SUB 目的操作数,源操作数执行的操作:(目的操作数)←目的操作数-源操作数5) SBB 带借位减法指令汇编格式:SBB 目的操作数,源操作数执行的操作:(目的操作数)←目的操作数-源操作数-CF6) DEC 减量指令汇编格式:DEC 操作数执行的操作:(操作数)←操作数-17) NEG 求补指令汇编格式:NEG 操作数执行的操作:(操作数)←0-操作数8) CMP比较指令汇编格式:CMP 目的操作数,源操作数执行的操作:目的操作数-源操作数。
PS:以上五条指令都可作字或字节运算。
另外,除DEC指令不影响CF标志位外,其他指令都对标志位有影响。
9) MUL 无符号数乘法指令汇编格式:MUL 源操作数执行的操作:假设为字节操作(AX)←(AL)×源操作数假设为字操作(DX), (AX)←(AX)×源操作数10) IMUL 有符号数乘法指令汇编格式:IMUL 源操作数执行的操作:与MUL一样,只是处理的数据是有符号数,而MUL处理的数据是无符号数。
11) DIV 无符号数除法指令汇编格式:DIV 源操作数执行的操作:假设为字节操作:(AL)←(AX)/源操作数的商(AH)←(AX)/源操作数的余数假设为字操作:(AX)←(DX、AX)/源操作数的商(DX)←(DX、AX)/源操作数的余数商和余数均为无符号数。
12) IDIV 有符号数除法指令汇编格式:IDIV 源操作数执行的操作:与DIV一样,只是操作数是有符号数,商和余数均为有符号数,余数符号同被除数符号。
微机原理指令表

根本传送指令MOV reg/mem, imm MOV reg/mem/seg, regMOV reg/seg, mem MOV reg/mem, seg入栈指令PUSH MEM/REG PUSH SEG出栈指令POP MEM/REG POP SEG交换指令:XCHG REG,MEM/REG查表指令:XLAT SRC_Table;〔AL〕←〔〔BX〕+〔AL〕〕端口输入指令IN AL,n IN AX,nIN AL,DX IN AX,DX端口输出指令OUT n,AL OUT n,AXOUT DX,AL OUT DX,AX取有效地址指令:LEA REG,MEM地址指针装入DS:LDS REG,MEM地址指针装入ES:LES REG,MEM标志装入AH指令:LAHF设置标志指令:SAHF标志入堆栈指令:PUSHF标志出堆栈指令:POPF不带进〔借〕位的加减法指令:ADD 目标,源;SUB 目标,源;带进〔借〕位的加减法指令:ADC 目标,源SBB 目标,源加法调整指令:非压缩BCD码-----AAA压缩BCD码-----DAA减法调整指令:非压缩BCD码-----AAS压缩BCD码-----DAS加1/减1指令INC/DEC 目标求补指令:NEG 目标比拟指令:CMP 目标,源CWB:将AL的符号位扩展到AH中;CWD:将AX的符号位扩展到DX中;非指令:NOT 目标与指令:AND 目标,源或指令:OR 目标,源异或指令:XOR 目标,源逻辑测试指令:TEST 目标,源逻辑左移指令:SHL reg/mem,1/CL逻辑右移指令:SHR reg/mem,1/CL算术左移指令:SAL reg/mem,1/CL算术右移指令:SAR reg/mem,1/CL小循环左移:ROL REG/MEM,CNT小循环右移:ROR REG/MEM,CNT大循环左移:RCL REG/MEM,CNT大循环右移:RCR REG/MEM,CNT字符串传送指令MOVSB;[DS:SI] →[ES:DI],并修改指针SI=SI+1,DI=DI+1 (DF=0);SI=SI-1,DI=DI-1 (DF=1)MOVSW;[DS:SI] →[ES:DI],修改指针同上字符串比拟指令CMPSB;[ES:DI]-[DS:SI] →FLAGSCMPSW;[ES:DI]-[DS:SI]→FLAGS,修改指针同上字符串搜索SCASB;AL—[ES:DI] →FLAGSSCASW;AX—[ES:DI] →FLAGS,修改指针同上字符串装入LODSB;[DS:SI] →ALLODSW;[DS:SI] →AX,修改指针同上字符串转储STOSB;[ES:DI] ←ALSTOSW;[ES:DI]←A X,修改指针同上重复前缀指令REP 重复执行其后的字符串指令,直到CX=0 REPE/ERPZ 当相等/为零时重复执行其后的字符串指令REPNE/REPNZ 当不相等/不为零时重复执行其后的字符串指令无条件转移指令:JMP XUL无符号数比拟后根据其比拟结果形成的条件转移指令JA/JNBE; 假设目的操作数>源操作数那么转移JAE/JNB; 假设目的操作数≥源操作数那么转移JB/JNAE; 假设目的操作数< 源操作数那么转移JBE/JNA; 假设目的操作数≤源操作数那么转移两个带符号数比拟后根据其比拟结果形成条件转移指令JG/JNLE; 假设目的操作数>源操作数那么转移JGE/JNL; 假设目的操作数≥源操作数那么转移JL/JNGE; 假设目的操作数< 源操作数那么转移JLE/JNG; 假设目的操作数≤源操作数那么转移根据CF、ZF、SF、OF、PF的状态形成的条件转移指令JE/JZ; ZF=1,结果为零时,转移JNE/JNZ;ZF=0,结果不为零时,转移JC;CF=1,有借〔进〕位,转移JNC;CF=0,无借〔进〕位,转移JO;OF=1,有溢出〔带符号数〕转移JNO;OF=0,无溢出〔带符号数〕转移JP/JPE;PF=1,结果为偶数个1转移JNP/JPO;PF=0,结果为奇数个1转移JS;SF=1,最高位为1转移JNS;SF=0,最高位为0转移循环指令LOOP;CX—1 →CX,假设C X≠0循环LOOPZ/LOOPE;CX—1 →CX,假设C X≠0且ZF=1循环LOOPNZ/LOOPNE;CX—1 →CX,假设C X≠0且ZF =0循环JCXZ;假设C X=0转移中断返回指令:IRET;进位标志清零指令:CLC.进位标志置1指令:STC .。
微机原理指令大全

汇编语言指令大全——吉林大学无线电爱好者协会AAA未组合的十进制加法调整指令 AAA(ASCII Adgust for Addition) 格式: AAA功能: 对两个组合的十进制数相加运算(存在AL 中)的结果进行调整,产生一个未组合的十进制数放在AX 中.说明:1. 组合的十进制数和未组合的十进制数:在计算中,十进制数可用四位二进制数编码,称为BCD 码.当一个节(8位)中存放一位BCD 码,且放在字节的低4位, 高4位为时称为未组合的BCD 码. 2. AAA 的调整操作若(AL) and 0FH>9 或 AF=1,则调整如下:(AL)<--(AL)+6,(AH)<--(AH)+1,AF=1,CF<--AF,(AL)<--(AL) and 0FHAAD未组合十进制数除法调整指令 AAD(ASCII Adjust for Division) 格式: AAD功能: 在除法指令前对AX 中的两个未组合十进制数进行调整,以便能用DIV 指令实现两个未组合的十进制数的除法运算,其结果为未组合的十进制数,商(在AL 中)和余数(在AH 中).说明:1. AAD 指令是在执行除法DIV 之前使用的,以便得到二进制结果存于AL 中,然后除以OPRD,得到的商在AL 中,余数在AH 中.2. 示例: MOV BL,5 MOV AX,0308HAAD ;(AL)<--1EH+08H=26H,(AH)<--0 DIV BL ;商=07H-->(AL),余数=03H-->(AH).AAM 未组合十进制数乘法调整指令 AAM(ASCII Adjust MULtiply) 格式: AAM功能: 对两个未组合的十进制数相乘后存于AX 中的结果进行调整,产生一个未组合的十进制数存在AL 中.说明:1. 实际上是两个未组合的十进制数字节相乘,一个0~9的数与另一个0~9的数相乘其积最大为81.为了得到正确的结果,应进行如下调整: 乘积: (AH)<--(AL)/10 (AL)<--(AL)MOD102. 本指令应跟在MUL 指令后使用,乘积的两位十进制结果,高位放在AH 中,低位放在AL 中.AH 内容是MUL 指令的结果被10除的商,即(AL)/10,而最后的AL 内容是乘积被10整除的余数(即个位数).AAS 未组合十进制减法调整指令 AAS(ASCII Adjust for Subtraction) 格式: AAS功能: 对两个未组合十进制数相减后存于AL 中的结果进行调整,调整后产生一个未组合的十进制数数且仍存于AL 中. 说明: 1. 本指令影响标志位CF 及AF. 2. 调整操作若(AL) and 0FH > 9 或 AF=1 则(AL)<--(AL)-6,(AH)<--(AH)-1,CF<--AF,(AL)<--(AL) and 0FH,否则(AL)<--(AL) and 0FHADC带进位加法指令 ADC(Addition Carry) 格式: ADC OPRD1,OPRD2功能: OPRD1<--OPRD1 + OPRD2 + CF说明: 1. OPRD1为任一通用寄存器或存储器操作数,可以是任意一个通用寄存器,而且还可以是任意一个存储器操作数. OPRD2为立即数,也可以是任意一个通用寄存器操作数.立即数只能用于源操作数.2. OPRD1和OPRD2均为寄存器是允许的,一个为寄存器而另一个为存储器也是允许的,但不允许两个都是存储器操作数.3. 加法指令运算的结果对CF 、SF 、OF 、PF 、ZF 、AF 都会有影响.以上标志也称为结果标志.4. 该指令对标志位的影响同ADD 指令.ADD加法指令 ADD(Addition) 格式: ADD OPRD1,OPRD2 功能: 两数相加说明:1. OPRD1为任一通用寄存器或存储器操作数,可以是任意一个通用寄存器,而且还可以是任意一个存储器操作数. OPRD2为立即数,也可以是任意一个通用寄存器操作数.立即数只能用于源操作数.2. OPRD1和OPRD2均为寄存器是允许的,一个为寄存器而另一个为存储器也是允许的, 但不允许两个都是存储器操作数.3. 加法指令运算的结果对CF 、SF 、OF 、PF 、ZF 、AF 都会有影响.以上标志也称为结果标志.加法指令适用于无符号数或有符号数的加法运算.AND逻辑与运算指令 AND 格式: AND OPRD1,OPRD2功能: 对两个操作数实现按位逻辑与运算,结果送至目的操作数.本指令可以进行字节或字的‘与’运算, OPRD1<--OPRD1 and OPRD2.说明:1. 目的操作数OPRD1为任一通用寄存器或存储器操作数.源操作数OPRD2为立即数,任一通用寄存器或存储器操作数.2. 示例: AND AL,0FH ;(AL)<--(AL) AND 0FHAND AX,BX ;(AX)<--(AX) AND (BX) AND DX,BUFFER[SI+BX] AND BETA[BX],00FFH注意: 两数相与,有一个数假则值为假CALL过程调用指令 CALL 格式: CALL OPRD 功能: 过程调用指令说明:1. 其中OPRD 为过程的目的地址.2. 过程调用可分为段内调用和段间调用两种.寻址方式也可以分为直接寻址和间接寻址两种.3. 本指令不影响标志位.CBW字节扩展指令 CBW(Convert Byte to Word) 格式: CBW功能: 将字节扩展为字,即把AL 寄存器的符号位扩展到AH 中.说明:1. 两个字节相除时,先使用本指令形成一个双字节长的被除数.2. 本指令不影响标志位.3. 示例: MOV AL,25 CBWIDIV BYTE PTR DATA1CLC处理器控制指令-标志位操作指令 格式: CLC ;置CF=0 STC ;置CF=1CMC ;置CF=(Not CF)进位标志求反 CLD ;置DF=0 STD ;置DF =1CLI ;置IF=0,CPU 禁止响应外部中断 STI ;置IF=1,使CPU 允许向应外部中断 功能: 完成对标志位的置位、复位等操作.说明: 例如串操作中的程序,经常用CLD 指令清方向标志使DF =0,在串操作指令执行时,按增量的方式修改吕指针.CLD处理器控制指令-标志位操作指令 格式: CLC ;置CF=0 STC ;置CF=1CMC ;置CF=(Not CF)进位标志求反 CLD ;置DF=0 STD ;置DF =1CLI ;置IF=0,CPU 禁止响应外部中断 STI ;置IF=1,使CPU 允许向应外部中断 功能: 完成对标志位的置位、复位等操作.说明: 例如串操作中的程序,经常用CLD 指令清方向标志使DF =0,在串操作指令执行时,按增量的方式修改吕指针.CLI处理器控制指令-标志位操作指令 格式: CLC ;置CF=0 STC ;置CF=1CMC ;置CF=(Not CF)进位标志求反 CLD ;置DF=0说明: 例如串操作中的程序,经常用CLD 指令清方向标志使DF =0,在串操作指令执行时,按增量的方式修改吕指针.STD ;置DF=1CLI ;置IF=0,CPU禁止响应外部中断STI ;置IF=1,使CPU允许向应外部中断功能: 完成对标志位的置位、复位等操作.CMC 处理器控制指令-标志位操作指令格式:CLC ;置CF=0STC ;置CF=1CMC ;置CF=(Not CF)进位标志求反CLD ;置DF=0STD ;置DF=1CLI ;置IF=0,CPU禁止响应外部中断STI ;置IF=1,使CPU允许向应外部中断功能: 完成对标志位的置位、复位等操作. 说明: 例如串操作中的程序,经常用CLD指令清方向标志使DF=0,在串操作指令执行时,按增量的方式修改吕指针.CMP 比效指令 CMP(CoMPare)格式: CMP OPRD1,OPRD2功能: 对两数进行相减,进行比较. 说明:1. OPRD1为任意通用寄存器或存储器操作数.OPRD2为任意通用寄存器或存储器操作数,立即数也可用作源操作数OPRD2.2. 对标志位的影响同SUB指令,完成的操作与SUB指令类似,唯一的区别是不将OPRD1-OPRD2的结果送回OPRD1,而只是比较.3. 在8088/8086指令系统中,专门提供了一组根据带符号数比较大小后,实现条件转移的指令.CMPS 字符串比较指令格式: CMPS OPRD1,OPRD2CMPSBCMPSW功能: 由SI寻址的源串中数据与由DI寻址的目的串中数据进行比较,比较结果送标志位,而不改变操作数本身.同时SI,DI将自动调整. 说明:1. 其中OPRD2为源串符号地址,OPRD1为目的串符号地址.2. 本指令影响标志位AF、CF、OF、SF、PF、ZF.本指令可用来检查二个字符串是否相同,可以使用循环控制方法对整串进行比较.3. 与MOVS相似,CMPS指令也可以不使用操作数,此时可用指令CMPSB或CMPSW分别表示字节串比较或字串比较.CMPSB 字符串比较指令格式: CMPS OPRD1,OPRD2CMPSB 说明:1. 其中OPRD2为源串符号地址,OPRD1为目的串符号地址.CMPSW功能: 由SI 寻址的源串中数据与由DI 寻址的目的串中数据进行比较,比较结果送标志位,而不改变操作数本身. 同时SI,DI 将自动调整.2. 本指令影响标志位AF 、CF 、OF 、SF 、PF 、ZF.本指令可用来检查二个字符串是否相同,可以使用循环控制方法对整串进行比较.3. 与MOVS 相似,CMPS 指令也可以不使用操作数,此时可用指令CMPSB 或CMPSW 分别表示字节串比较或字串比较.CMPSW字符串比较指令格式: CMPS OPRD1,OPRD2 CMPSB CMPSW功能: 由SI 寻址的源串中数据与由DI 寻址的目的串中数据进行比较,比较结果送标志位,而不改变操作数本身. 同时SI,DI 将自动调整.说明:1. 其中OPRD2为源串符号地址,OPRD1为目的串符号地址.2. 本指令影响标志位AF 、CF 、OF 、SF 、PF 、ZF.本指令可用来检查二个字符串是否相同,可以使用循环控制方法对整串进行比较.3. 与MOVS 相似,CMPS 指令也可以不使用操作数,此时可用指令CMPSB 或CMPSW 分别表示字节串比较或字串比较.CWD 字扩展指令 CWD(Convert Word to Double Word) 格式: CWD功能: 将字扩展为双字长,即把AX 寄存器的符号位扩展到DX 中.说明:1. 两个字或字节相除时,先用本指令形成一个双字长的的被除数.2. 本指令不影响标志位.3. 示例: 在B1、B2、B3字节类型变量中,分别存有8们带符号数a 、b 、c,实现(a*b+c)/a 运算。
汇编指令大全+很全的汇编指令

for Addition)
1. 调整操作如下
格式: DAA
(1) 若(AL) and 0FH>9 或 AF=1
,则(AL)<--(AL)+6,AF<--1,对低
功能: 对AL中的两个组合进制数相加的结果进行调 四位的调整.
整,调整结果仍放在AL中,进位标志放在CF中.
(2) 若(AL) and 0F0H>90H 或
6 LAHF 标志传送指令 LAHF 格式: LAHF
2. 本指令不影响状态标位,表格 长度不超过256字节.
说明: 该指令不影响FLAG的原来 内容,AH只是复制了原FLAG的低8 位内容.
功能: 取FLAG标志寄存器低8位至AH寄存器.(AH)<-
-(FLAG)7~0
7 SAHF 标志传送指令 SAHF
说明:
格式: DEC OPRD 功能: OPRD<--OPRD-1
1. OPRD 为寄存器或存储器操作 数.
2. 这条指令执行结果影响AF、 OF、PF、SF、ZF标志位,但不影 响CF标志位.
页码,4/22
星尘-易尘
302 NEG 303 CMP
304 AAS 305 DAS 306 MUL
取补指令 NEG(NEGate)
未组合的十进制加法调整指令 AAA(ASCII Adgust 说明:
for Addition)
1. 组合的十进制数和未组合的
格式: AAA
十进制数:在计算中,十进制数可
用四位二进制数编码,称为BCD
功能: 对两个组合的十进制数相加运算(存在AL中) 码.
的结果进行调整,产生一个未组合的十进制数放在
AX中.
SUB [BX+25],AX
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
微机原理及接口技术常用编指令一.寄存器(用来存放存储单元的段地址或偏移地址、参与运算的数据、状态标志等)相关指令8086 CPU 中有14个16位的寄存器,这14个寄存器按照功能分为四类:通用寄存器、段寄存器组、指令指针、标志位寄存器FR。
1.通用寄存器(8个)㈠数据寄存器:①AX(accumulator):寄存器(累加器)它的由来来源于EAX寄存器(32位):EAX累加寄存器EAX分为高16位和低16位。
其中低16位又可单独访问,命名为AX,16位寄存器AX又可单独访问,可分为高、低分别为AH、AL字节个8位。
AX常用于运算;在乘法和除法中指定用来存放操作数,另外所有的I/O指令都使用这一个寄存器与外接设备传送数据。
②BX(base):基址寄存器,寄存器(基址寄存器)它的由来来源于EBX寄存器(32位):EB X累加寄存器EBX分为高16位和低16位。
其中低16位又可单独访问,命名为BX,16位寄存器BX又可单独访问,可分为高、低分别为BH、BL字节个8位。
BX常用于地址索引,查表和间接寻址时存放基地址。
③CX(count):计数寄存器,寄存器(计数寄存器)它的由来来源于ECX寄存器(32位):EC X累加寄存器ECX分为高16位和低16位。
其中低16位又可单独访问,命名为CX,16位寄存器CX又可单独访问,可分为高、低分别为CH、CL字节个8位。
常用于计数;常用于保存计算值,如在移位指令,循环(loop)和串处理指令中用作隐含的计数器.④DX(data):数据寄存器,寄存器(数据寄存器)它的由来来源于EDX寄存器(32位):ED X累加寄存器EDX分为高16位和低16位。
其中低16位又可单独访问,命名为DX,16位寄存器DX又可单独访问,可分为高、低分别为DH、DL字节个8位。
常用于数据传递。
㈡指针和变址寄存器这些寄存器存放的是段的偏移量,用来形成操作数的存储地址。
SP(Stack Pointer):堆栈指针,与SS配合使用,可指向目前的堆栈位置,SP指向栈顶。
BP(Base Pointer):基址指针寄存器,可用作SS的一个相对基址位置,BP指向栈的任何一单元。
SI(Source Index):源变址寄存器可用来存放相对于DS段之源变址指针。
DI(Destination Index):目的变址寄存器,可用来存放相对于 ES 段之目的变址指针,指令中SI对应DS , DI对应ES不能互换。
2.指令指针IP(Instruction Pointer)(1个)16位的指令指针IP,用来存放下一条指令在CS(代码段寄存器)中的偏移量。
当发现中断或调用时BIU【(Bus Interface Unit)总线部件,功能是取指令、读操作数和送出结果】自动将IP的偏移量压入堆栈保存,并调整IP的容。
程序不能直接访问IP,但可以通过中断、转移等指令来修改IP的容。
3.段寄存器(Segment Register)(4个)为了运用所有的存空间,8086设定了四个段寄存器,专门用来保存段地址:CS(Code Segment):代码段寄存器;存放当前执行的指令在存中的地址段。
CS和IP决定了当前指令的逻辑地址。
DS(Data Segment):数据段寄存器;存放当前数据段的段地址。
DS和SI决定了字符串操作时目的操作数的地址。
SS(Stack Segment):堆栈段寄存器;存放当前数据段的堆栈地址,SS与SP决定了当前堆栈的顶部,所谓堆栈是以“后进后出”规则保存信息的一种存储机构。
8086CPU的堆栈段地址在SS寄存器中,堆栈当前偏移地址在SP寄存器中,SP的初值代表了堆栈区的大小。
ES(Extra Segment):附加段寄存器。
附加段是一个附加的数据段。
ES和DI决定了字符串操作时目的操作数的地址。
4.标志位寄存器FR(Flag Regise)8086CPU设置了一个16位的标志寄存器FR,用来显示微机的运行结果或控制机制操作,规定了其中的9位,标志的设置,FR的九个标志按作用可分为两大类:一类叫状态标志,用来表示运算结果的特征,他们是:CF、PF、AF、ZF、SF、OF。
另一类叫做控制标志,用来控制CPU的操作,它们是:IP、DF、TF。
CF(carrier flag)进位标志位:运算中高四位中发生进位或错位时,CF=1;否则CF=0;STC 指令可置CF=1,CLR指令对CF求反;循环指令也会影响该标志位。
DF(direction flag)方向标志位:控制串指令对字符串处理的方向。
DF=0时,变址地址指针SI、DI作增量操作,即由低地址向高地址进行串操作,字节操作增量为1,字操作增量为2;DF=1时,作减量操作,即由高地址向低地址进行串操作。
STD指令可置DF=1,CLD指令置DF=0。
OF(overflow flag)溢出标志位:当运算结果超出机器的的表示围时OF=1;否则为0;存在以下几种情况可称之为溢出【即使OF=1】两个正数相加得到一个负数;l两个负数相加得到一个正数;两个相同符号的数相乘得到一个负数;两个异号的数相乘得到一个正数。
PF(parity flag) 奇偶校验位:当运算结果的低8位中1的个数为偶数时,PF=1;否则PF=0;AF(auxiliary flag)辅助进位标志:在运算结果的低4位向高4位有进位(加法)或有错位(减法)时,AF=1否则AF=0.该标志一般在BCD码运算中作为是否进行十进制调整的判断。
ZF(zero flag)零标志位:结果为0,ZF=1,否则ZF=0.SF(sign flag)符号标志位:在进行有符号运算数的算术运算,当运算结果为负时SF=1,否则为0。
IF(interrupt flag)中断允许标志位:控制可屏蔽中断的标志。
当IF=1时,允许CPU响应屏蔽中断请求;当IF=0时,禁止响应。
TF(trap flag)陷阱标志位:这是为程序调试而提供的CPU单步工作方式。
TF=1时,CPU 每执行完一个条指令就产生一个部中断,以便对每一个指令的执行结果进行跟踪调查。
二、数据传送指令1、数据传送指令⑴通用数据传送指令MOV(Move)数据传送。
Mov指令形式【MOV OPRD1目的操作数 OPRD2源操作数】它允许在CPU的寄存器之间、存储器和寄存器之间传送字节和字数据,也可以将立即数传送到寄存器或存储器中。
功能即:将源操作数送入目的操作数中,源操作数保持不变。
以下注意点:立即数、代码段寄存器CS(代码段寄存器)只能做源操作数;IP(指令指针)寄存器不能作源操作数或目的操作数;MOV指令不能在两个存储单元之间直接传递数据,也不能在两个段寄存器之间直接传送数据;两个操作数的类型属性要一致。
堆栈操作指令POP(Pop from the stack)、PUSH(Push onto the stack)堆栈是以“先进后出”方式工作的一个存储区,栈区的段地址由SS寄存器的容确定,而栈顶位置由堆栈指针SP寄存器的容来确定。
堆栈操作指令包括入栈(PUSH)和出栈指令(POP)指令两类。
这两条指令必须以字为操作,不能采用立即寻址方式。
入栈操作:PUSH OPRD ; OPRD为源操作数。
功能将源操作数压入堆栈。
源操作数可以是16位通用寄存器、段寄存器或存储器中的数据字。
堆栈是以“先进后出|”的原则工作,栈区的段地址由SS寄存器的容确定。
每一次执行PUSH的步骤为:首先修改SP的值,SP=SP-2;低位字节地址在较低地址单位【SP】=OPRD低8位;高字节放在较高地址单位,【SP+1】=OPRD高八位。
由于堆栈操作都是以字为单位进行的,所以SP总是指向偶地址单元。
出栈操作:POP OPRD ; OPRD为目的操作数。
将当前SP所指向的堆栈顶部的一个字送到指定目的操作数中。
目的操作数可以是16位通用寄存器、段地址寄存器或存储单元,但CS不能做目的操作数。
每执行一次POP指令后,SP=SP+2,即SP向高地址方向移动,指向栈顶。
数据交换指令XCGH(Exchange)XCGH OPRD1【目的操作数】 OPRD2【源操作数】把一个字节或一个字的源操作数和目的操作数相互交换。
交换能在通用寄存器与累加器之间、通用寄存器与存储器之间进行。
但段寄存器和立即数不能作为一个操作数,也不能在累加器之间进行。
2.累加器专用传送指令字节交换指令XLAT(Translate)XLAT [转换表] ;换码。
用查表方式将一种代码。
XLAT指令有两种格式,第一种格式中的“转换表”为表格的首地址,一般为符号表示,以提高程序的可读性,但它也可以省略,即用第二种格式。
使用XLAT指令时,要求BX寄存器指向该表的首地址,AL中为表中某一项与表格首地址之间的偏移量。
指令执行时,会将BX和AL中的值相加,把得到的值作为地址,然后将此地址所得对应的存储器单元中的数值读送到AL中去。
该指令是通过查表方式来完成翻译功能的。
因此,在执行该指令之前,必须在存中建立好一翻译表,该表的最大容量为256个字节。
输入输出指令IN(input)/OUT(output)输入指令格式:IN AL,端口地址[N] ;IN AX,端口地址[N+1][N];IN AL,DX;IN AX,DX;说明:从I/O端口输入数据至AL/AX,允许一个字节由一个输入端口传送到AL中,或者把一个字由一个输入端口传送到AX中,若端口地址超过256(00~FFH),则需用DX寄存器来保存该端口地址,这样用DX作端口地址时,最多可寻址64K(0000~FFFFH)。
输出指令格式:OUT AL,端口地址[N] ;OUT AX,端口地址[N+1][N];OUT DX , AL;OUT DX, AX,说明:将AL或AX的容输出至I/O端口。
可将AL和AX中的容传送到一个输出端口,端口寻址方式与IN指令相同。
3.有效地址传送寄存器指令LEA(Load effective address) 有效地址送寄存,格式:LEA OPRD1 , OPRD 2。
把源操作数的偏移地址传送到目的操作数。
LDS(Load DS with Pointer) 指针送寄存器和DS。
格式:LDS OPRD1,OPRD2。
功能:完成一个地址指针的传送。
地址指针包括偏移地址和段地址,它们已分别存放在由源操作数给出最低地址的四个连续存储单元中(即存放了一个32位的双子数据),指令可将该数据的高16位(段地址)送入到DS,低16位(偏移地址)送入目的操作数所指出的一个16位通用寄存器或者是变址寄存器。
LES(Load ES with Pointer) 指针送寄存器和ES。
格式:LES OPRD1,OPRD2功能:这条指令除将地址指针的段地址送入ES外,与LDS类似。