DOS环境8086指令系统的汇编语言格式列表

合集下载

8086指令系统及汇编语言程序设计

8086指令系统及汇编语言程序设计

8086指令系统及汇编语言程序设计8086指令系统是指Intel 8086微处理器所支持的一套机器指令。

8086微处理器是Intel于1978年推出的一款16位微处理器,其指令系统设计清晰简洁,具有良好的可编程性和灵活性。

汇编语言程序设计则是使用汇编语言编写程序,通过汇编器将汇编语言转化为可执行文件的过程。

8086指令系统共有十六个16位的通用寄存器,包括AX、BX、CX和DX四个通用寄存器,在实模式下这些寄存器也可以拆分为两个8位的寄存器AH、AL、BH、BL、CH、CL、DH和DL。

另外,还有SP、BP、SI和DI四个指针寄存器,以及CS、DS、ES和SS四个段寄存器等。

这些寄存器提供了程序在内存中存储和访问数据的能力。

8086指令系统中的指令可以分为数据传输指令、算术指令、逻辑指令和控制指令等几个类别。

数据传输指令可以将数据从寄存器传输到寄存器、从存储器传输到寄存器,或者从寄存器传输到存储器等。

算术指令包括加法、减法、乘法、除法等运算指令。

逻辑指令可以执行与、或、非、异或等逻辑运算。

控制指令可以控制程序的执行流程,例如条件跳转、循环等。

汇编语言程序设计是通过使用汇编语言编写程序来实现特定功能。

汇编语言程序由一系列指令组成,每条指令由操作码和操作数组成。

操作码表示需要执行的操作,操作数则是参与操作的数据。

编写汇编语言程序需要熟悉8086指令系统的指令格式和功能,以及寄存器的使用方法。

汇编语言程序设计的开发流程包括分析问题、编写算法、编写程序、汇编和调试等步骤。

在开始编写程序之前,需要先分析问题,并根据问题需求设计算法。

然后根据算法编写汇编语言程序,并通过汇编器将其转化为机器码。

最后,通过调试工具进行程序的调试和测试,确保程序的正确性和可靠性。

总之,8086指令系统及汇编语言程序设计是一门用于编写底层程序的技术。

通过学习和掌握8086指令系统和汇编语言程序设计,可以编写高效、优化的程序,并深入了解计算机系统的底层运行原理。

第3章 8086指令系统及汇编语言程序设计

第3章 8086指令系统及汇编语言程序设计

图3-7 立即数寻址
第3章 8086指令系统及汇编语言程序设计
注意: (2)寄存器寻址方式 ● 寄存器寻址方式的指令操作在CPU 定义:操作数放在寄存器内,由指令直接给出某个 内部执行,不需要执行总线周期,执行速 寄存器的名字,以寄存器的内容作为操作数。寄存器可以 度快。 是16位的 AX、BX、CX、DX、SI、DI、SP、BP寄存器, ● 寄存器寻址方式既适用于指令的源 也可以是8位的 AH、AL、BH、BL、CH、CL、DH、DL 寄存器。 操作数,也适用于目的操作数,并且可同 时用于源操作数和目的操作数。 【例3-2】 MOV AX,CX ;(AX)←(CX) INC AL ;(AL)←(AL)+1 指令执行结果如图3-8 所示
图3-8 寄存器寻址
第3章 8086指令系统及汇编语言程序设计
(3)直接寻址方式 定义:操作数在存储器中,指令中直接给出操作数所在存 注意: 储单元的有效地址。有效地址( EA)也称为偏移地址,它代表 ●直接寻址方式的操作数所在存储单元的段地址一 操作数所在存储单元距离段首址的字节数。有效地址是一个无 般在数据段寄存器DS中。 符号的16位二进制数。 ●如果操作数在其他段,则需要在指令中用段超越 【例3-3】 前缀指出相应的段寄存器名。 ● VALUE是一种符号表示法,此内容将在伪指令中 MOV AH, [1234H ] ;将DS段中1234H单元的内容送给AH 给予讲解。 MOV AH ,VALUE ;将DS段中VALUE单元的内容送给AH ●在实地址方式下,物理地址=16*段地址(DS) MOV AX, [2100H] ;将DS段中2100H单元的内容送给AL, +偏移地址(EA) 2101H单元的内容送给AH MOV BX,ES:【2000H】 ;段超越,操作数在附加段。即 物理地址=(ES)*16+2000H

第4章-8086汇编语言程序设计(1)汇编语言的语句-伪指令-运算符-DOS功能调用

第4章-8086汇编语言程序设计(1)汇编语言的语句-伪指令-运算符-DOS功能调用
段名则是由SEGMENT及ENDS定义的段名。
注意:ASSUME只是告知汇编程序有关段寄存器与段的关系, 并没有给段寄存器赋予实际的初值。
ORG规定了段内的起始地址或偏移地址。 格式: ORG <表达式> 表达式的值即为段内的起始地址或偏移地址,从此地址起连续 存放程序或数据。
四、过程定义语句 格式:过程名 PROC [NEAR]或FAR ┇ RET ┇ 过程名 ENDP
例1: MOV AX,SEG STRI1 MOV DS,AX 将变量STRI1所在段值取到DS中
例2: MOV SI,OFFSET STRI1 代表将变量STRI1处的地址偏移量取到SI中.
注意:它与 LEA SI,STRI1类似。 TYPE,SIZE、LENGTH (不作要求).
#3
5. 类型操作符PTR
新存储器地址。
2. 逻辑运算符(不作要求) AND、OR、XOR、NOT,只能用于数字表达式中。
3. 关系运算符(不作要求) EQ(相等)、NE(不等)、LT(小于)、GT(大于)、 LE(小于或等于)、GE(大于或等于)
4. 分析操作符 SEG,OFFSET,TYPE,SIZE、LENGTH。可以把存储器 一些特征作为数值送回。
IMUL AL SUB AX,BX MOV D,AX MOV AH,4CH
INT 21H
CODE ENDS
END START
➢ 一个源程序通常由若干个段组成,每个段均以SEGMENT开 始,以ENDS结束。
➢ 每个段包含若干语句,分指令语句与伪指令语句两种。
➢ 每条语句可由标识符、保留字、表达式等元素组成。
DATA ENDS
STACK SEGMENT DB 20H DUP(?)

8086-汇编指令集

8086-汇编指令集

8086 汇编指令集一、数据传输指令它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据.1. 通用数据传送指令MOV 传送字或字节.格式为: MOV DST,SRC执行的操作:(DST)<-(SRC)MOVSX 先符号扩展,再传送.MOVZX 先零扩展,再传送.PUSH 把字压入堆栈.格式为:PUSH SRC执行的操作:(SP)<-(SP)-2 ((SP)+1,(SP))<-(SRC)POP 把字弹出堆栈.格式为:POP DST执行的操作:(DST)<-((SP+1),(SP)) (SP)<-(SP)+2PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI 依次压入堆栈.POPA 把DI,SI,BP,SP,BX,DX,CX,AX 依次弹出堆栈.PUSHAD 把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI 依次压入堆栈.POPAD 把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX 依次弹出堆栈.BSWAP 交换32 位寄存器里字节的顺序XCHG 交换字或字节.( 至少有一个操作数为寄存器,段寄存器不可作为操作数)格式为:XCHG OPR1,OPR2执行的操作:(OPR1)<-->(OPR2)CMPXCHG 比较并交换操作数.( 第二个操作数必须为累加器AL/AX/EAX )XADD 先交换再累加.( 结果在第一个操作数里)2. 输入输出端口传送指令.IN I/O 端口输入. ( 语法: IN 累加器,{端口号│DX} )长格式为:IN AL,PORT(字节)IN AX,PORT(字)执行的操作:(AL)<-(PORT)(字节)(AX)<-(PORT+1,PORT)(字)短格式为:IN AL,DX(字节)IN AX,DX(字)执行的操作: AL<-((DX))(字节)AX<-((DX)+1,DX)(字)OUT I/O 端口输出. ( 语法: OUT {端口号│DX},累加器),输入输出端口由立即方式指定时,其范围是0-255;由寄存器DX 指定时,其范围是0-65535.长格式为: OUT PORT,AL(字节)OUT PORT,AX(字)执行的操作: (PORT)<-(AL)(字节)(PORT+1,PORT)<-(AX)(字)短格式为: OUT DX,AL(字节)OUT DX,AX(字)执行的操作: ((DX))<-(AL)(字节)((DX)+1,(DX))<-AX(字)XLAT 换码指令字节查表转换,BX 指向一张256 字节的表的起点,AL 为表的索引值(0-255,即0-FFH);返回AL 为查表结果. 执行的操作: ( [BX+AL]->AL )格式为: XLAT OPR或: XLAT3. 目的地址传送指令.LEA 装入有效地址. 格式为: LEA REG,SRC执行的操作:(REG)<-SRC指令把源操作数的有效地址送到指定的寄存器中.例: LEA DX,string ;把偏移地址存到DX.LDS 传送目标指针,把指针内容装入DS.格式为: LDS REG,SRC执行的操作:(REG)<-(SRC) (DS)<-(SRC+2)把源操作数指定的 4 个相继字节送到由指令指定的寄存器及DS 寄存器中.该指令常指定SI寄存器.例: LDS SI,string ;把段地址:偏移地址存到DS:SI.LES 传送目标指针,把指针内容装入ES.格式为: LES REG,SRC执行的操作: (REG)<-(SRC) (ES)<-(SRC+2)把源操作数指定的 4 个相继字节送到由指令指定的寄存器及ES 寄存器中.该指令常指定DI寄存器.例: LES DI,string ;把段地址:偏移地址存到ES:DI.LFS 传送目标指针,把指针内容装入FS.例: LFS DI,string ;把段地址:偏移地址存到FS:DI.LGS 传送目标指针,把指针内容装入GS.例: LGS DI,string ;把段地址:偏移地址存到GS:DI.LSS 传送目标指针,把指针内容装入SS.例: LSS DI,string ;把段地址:偏移地址存到SS:DI.4. 标志传送指令.LAHF 标志寄存器传送,把标志装入AH.格式为: LAHF执行的操作:(AH)<-(PWS 的低字节)SAHF 标志寄存器传送,把AH 内容装入标志寄存器.格式为: SAHF执行的操作:(PWS 的低字节)<-(AH)PUSHF 标志入栈.格式为: PUSHF执行的操作:(SP)<-(SP)-2 ((SP)+1,(SP))<-(PSW)POPF 标志出栈.格式为: POPF执行的操作:(PWS)<-((SP)+1,(SP)) (SP)<-(SP+2)PUSHD 32 位标志入栈.POPD 32 位标志出栈.二、算术运算指令ADD 加法.格式: ADD DST,SRC执行的操作:(DST)<-(SRC)+(DST)ADC 带进位加法.格式: ADC DST,SRC执行的操作:(DST)<-(SRC)+(DST)+CFINC 加1.格式: INC OPR执行的操作:(OPR)<-(OPR)+1AAA 加法的ASCII 码调整.DAA 加法的十进制调整.SUB 减法.格式: SUB DST,SRC执行的操作:(DST)<-(DST)-(SRC)SBB 带借位减法.格式: SBB DST,SRC执行的操作:(DST)<-(DST)-(SRC)-CFDEC 减1.格式: DEC OPR执行的操作:(OPR)<-(OPR)-1NEC 求反(以0 减之).格式: NEG OPR执行的操作:(OPR)<--(OPR)CMP 比较.(两操作数作减法,仅修改标志位,不回送结果).格式: CMP OPR1,OPR2执行的操作:(OPR1)-(OPR2)该指令与SUB 指令一样执行减法操作,但不保存结果,只是根据结果设置条件标志. AAS 减法的ASCII 码调整.DAS 减法的十进制调整.MUL 无符号乘法.格式: MUL SRC执行的操作:字节操作数:(AX)<-(AL)*(SRC)字操作数:(DX,AX)<-(AX)*(SRC)IMUL 整数乘法.格式: IMUL SRC执行的操作:与MUL 相同,但必须是带符号数,而MUL 是无符号数.以上两条,结果回送AH 和AL(字节运算),或DX 和AX(字运算),AAM 乘法的ASCII 码调整.DIV 无符号除法.非组合BCD 码乘法调整指令格式: DIV SRC执行的操作:字节操作:(AL)<-(AX)/(SRC)的商(AH)<-(AX)/(SRC)的余数字操作: (AX)<-(DX,AX)/(SRC)的商(AX)<-(DX,AX)/(SRC)的余数IDIV 整数除法.格式: DIV SRC执行的操作:与DIV 相同,但操作数必须是带符号数,商和余数也均为带符号数,且余数的符号与被除数的符号相同.以上两条,结果回送:商回送AL,余数回送AH,(字节运算);或商回送AX,余数回送DX,(字运算).AAD 除法的ASCII 码调整.非组合BCD 码除法调整指令CBW 字节转换为字. (把AL 中字节的符号扩展到AH 中去)格式: CBW执行的操作:AL 的内容符号扩展到AH.即如果(AL)的最高有效位为0,则(AH)=00;如(AL)的最高有效位为1,则(AH)=0FFHCWD 字转换为双字. (把AX 中的字的符号扩展到DX 中去)格式: CWD执行的操作:AX 的内容符号扩展到DX.即如(AX)的最高有效位为0,则(DX)=0;否则(DX)=0FFFFH.这两条指令都不影响条件码.CWDE 字转换为双字. (把AX 中的字符号扩展到EAX 中去)CDQ 双字扩展. (把EAX 中的字的符号扩展到EDX 中去)三、逻辑运算指令AND 与运算.格式: AND DST,SRC执行的操作:(DST)<-(DST)^(SRC)OR 或运算.格式: OR DST,SRC执行的操作:(DST)<-(DST)V(SRC)XOR 异或运算.格式: XOR DST,SRC执行的操作:(DST)<-(DST)V(SRC)NOT 取反.格式: NOT OPR执行的操作:(OPR)<-(OPR)TEST 测试.(两操作数作与运算,仅修改标志位,不回送结果).格式: TEST OPR1,OPR2执行的操作:(DST)^(SRC)两个操作数相与的结果不保存,只根据其特征置条件码SHL 逻辑左移.格式: SHL OPR,CNT(其余的类似)其中OPR 可以是除立即数以外的任何寻址方式.移位次数由CNT 决定,CNT 可以是 1 或CL.SAL 算术左移.(=SHL)SHR 逻辑右移.SAR 算术右移.(=SHR)ROL 循环左移.ROR 循环右移.RCL 通过进位的循环左移.RCR 通过进位的循环右移.以上八种移位指令,其移位次数可达255 次.移位一次时,可直接用操作码. 如SHL AX,1.移位>1 次时,则由寄存器CL 给出移位次数.如MOV CL,04SHL AX,CL四、串指令DS:SI 源串段寄存器:源串变址.ES:DI 目标串段寄存器:目标串变址.CX 重复次数计数器.AL/AX 扫描值.D 标志0 表示重复操作中SI 和DI 应自动增量;1 表示应自动减量.Z 标志用来控制扫描或比较操作的结束.MOVS 串传送.格式:可有三种MOVS DST,SRCMOVSB(字节)MOVSW(字)其中第二、三种格式明确地注明是传送字节或字,第一种格式则应在操作数中表明是字还是字节操作,例如:MOVS ES:BYTE PTR[DI],DS:[SI]执行的操作:1)((DI))<-((SI))2)字节操作:(SI)<-(SI)+(或-)1,(DI)<-(DI)+(或-)1当方向标志DF=0 时用+,当方向标志DF=1 时用-3)字操作:(SI)<-(SI)+(或-)2,(DI)<-(DI)+(或-)2当方向标志DF=0 时用+,当方向标志DF=1 时用-该指令不影响条件码.CMPS 串比较.格式: CMPS SRC,DSTCMPSBCMPSW执行的操作:1)((SI))-((DI))2)字节操作:(SI)<-(SI)+-1,(DI)<-(DI)+-1字操作: (SI)<-(SI)+-2,(DI)<-(DI)+-2指令把由(SI)指向的数据段中的一个字(或字节)与由(DI)指向的附加段中的一个字(或字节)相减,但不保存结果,只根据结果设置条件码,指令的其它特性和MOVS 指令的规定相同.SCAS 串扫描.把AL 或AX 的内容与目标串作比较,比较结果反映在标志位.格式: SCAS DSTSCASBSCASW执行的操作:字节操作: (AL)-((DI)),(DI)<-(DI)+-1字操作: (AL)-((DI)),(DI)<-(DI)+-2该指令把AL(或AX)的内容与由(DI)指定的在附加段中的一个字节(或字)进行比较,并不保存结果,只根据结果置条件码.指令的其他特性和MOVS 的规定相同.LODS 装入串.把源串中的元素(字或字节)逐一装入AL 或AX 中.格式: LODS SRCLODSBLODSW执行的操作:字节操作:(AL)<-((SI)),(SI)<-(SI)+-1字操作: (AX)<-((SI)),(SI)<-(SI)+-2该指令把由(SI)指定的数据段中某单元的内容送到AL 或AX 中,并根据方向标志及数据类型修改SI 的内容.指令允许使用段跨越前缀来指定非数据段的存储区.该指令也不影响条件码.一般说来,该指令不和REP 联用.有时缓冲区中的一串字符需要逐次取出来测试时,可使用本指令.STOS 保存串.是LODS 的逆过程.格式: STOS DSTSTOSB(字节)STOSW(字)执行的操作:字节操作:((DI))<-(AL),(DI)<-(DI)+-1字操作: ((DI))<-(AX),(DI)<-(DI)+-2该指令把AL 或AX 的内容存入由(DI)指定的附加段的某单元中,并根据DF 的值及数据类型修改DI 的内容,当它与REP 联用时,可把AL 或AX 的内容存入一个长度为(CX)的缓冲区中.REP 当CX/ECX<>0 时重复.格式: REP string primitive其中String Primitive 可为MOVS,LODS 或STOS 指令执行的操作:1)如(CX)=0 则退出REP,否则往下执行.2)(CX)<-(CX)-13)执行其中的串操作4)重复1)~3)REPE/REPZ 当ZF=1 或比较结果相等,且CX/ECX<>0 时重复.格式: REPE(或REPZ) String Primitive其中String Primitive 可为CMPS 或SCAS 指令.执行的操作:1)如(CX)=0 或ZF=0(即某次比较的结果两个操作数不等)时退出,否则往下执行2)(CX)<-(CX)-13)执行其后的串指令4)重复1)~3)REPNE/REPNZ 当ZF=0 或比较结果不相等,且CX/ECX<>0 时重复.格式: REPNE(或REPNZ) String Primitive其中String Primitive 可为CMPS 或SCAS 指令执行的操作:除退出条件(CX=0)或ZF=1 外,其他操作与REPE 完全相同.REPC 当CF=1 且CX/ECX<>0 时重复.REPNC 当CF=0 且CX/ECX<>0 时重复.五、程序转移指令1>无条件转移指令(长转移)JMP 无条件转移指令1)段内直接短转移格式:JMP SHORT OPR执行的操作:(IP)<-(IP)+8 位位移量2)段内直接近转移格式:JMP NEAR PTR OPR执行的操作:(IP)<-(IP)+16 位位移量3)段内间接转移格式:JMP WORD PTR OPR执行的操作:(IP)<-(EA)4)段间直接(远)转移格式:JMP FAR PTR OPR执行的操作:(IP)<-OPR 的段内偏移地址(CS)<-OPR 所在段的段地址5)段间间接转移格式:JMP DWORD PTR OPR执行的操作:(IP)<-(EA) (CS)<-(EA+2)2>条件转移指令(短转移,-128 到+127 的距离内)1)根据单个条件标志的设置情况转移JZ(或JE)(Jump if zero,or equal) 结果为零(或相等)则转移格式:JE(或JZ) OPR测试条件:ZF=1JNZ(或JNE)(Jump if not zero,or not equal) 结果不为零(或不相等)则转移格式:JNZ(或JNE) OPR测试条件:ZF=0JS(Jump if sign) 结果为负则转移格式: JS OPR测试条件:SF=1JNS(Jump if not sign) 结果为正则转移格式:JNS OPR测试条件:SF=0JO(Jump if overflow) 溢出则转移格式: JO OPR测试条件:OF=1JNO(Jump if not overflow) 不溢出则转移格式: JNO OPR测试条件:OF=0JP(或JPE)(Jump if parity,or parity even) 奇偶位为1 则转移格式: JP OPR测试条件:PF=1JNP(或JPO)(Jump if not parity,or parity odd) 奇偶位为0 则转移格式: JNP(或JPO) OPR测试条件:PF=0JB(或JNAE,JC)(Jump if below,or not above or equal,or carry) 低于,或者不高于或等于,或进位位为1 则转移格式:JB(或JNAE,JC) OPR测试条件:CF=1JNB(或JAE,JNC)(Jump if not below,or above or equal,or not carry) 不低于,或者高于或者等于,或进位位为0 则转移格式:JNB(或JAE,JNC) OPR测试条件:CF=02)比较两个无符号数,并根据比较的结果转移JB(或JNAE,JC)格式:同上JNB(或JAE,JNC)格式:同上JBE(或JNA)(Jump if below or equal,or not above) 低于或等于,或不高于则转移格式:JBE(或JNA) OPR测试条件:CFVZF=1JNBE(或JA)(Jump if not below or equal,or above) 不低于或等于,或者高于则转移格式:JNBE(或JA) OPR测试条件:CFVZF=03)比较两个带符号数,并根据比较的结果转移JL(或LNGE)(Jump if less,or not greater or equal) 小于,或者不大于或者等于则转移格式:JL(或JNGE) OPR测试条件:SFVOF=1JNL(或JGE)(Jump if not less,or greater or equal)不小于, 或者大于或者等于则转移格式:JNL(或JGE) OPR测试条件:SFVOF=0JLE(或JNG)(Jump if less or equal,or not greater) 小于或等于,或者不大于则转移格式:JLE(或JNG) OPR测试条件:(SFVOF)VZF=1JNLE(或JG)(Jump if not less or equal,or greater) 不小于或等于,或者大于则转移格式:JNLE(或JG) OPR测试条件:(SFVOF)VZF=04)测试CX 的值为0 则转移指令JCXZ(Jump if CX register is zero) CX 寄存器的内容为零则转移格式:JCXZ OPR测试条件:(CX)=0注:条件转移全为8 位短跳!3>循环控制指令(短转移)LOOP CX 不为零时循环.格式: LOOP OPR测试条件:(CX)<>0LOOPE/LOOPZ CX 不为零且标志Z=1 时循环.格式: LOOPZ(或LOOPE) OPR测试条件:(CX)<>0 且ZF=1LOOPNE/LOOPNZ CX 不为零且标志Z=0 时循环.格式: LOOPNZ(或LOOPNE) OPR测试条件:(CX)<>0 且ZF=0这三条指令的步骤是:1)(CX)<-(CX)-12)检查是否满足测试条件,如满足则(IP)<-(IP)+D8 的符号扩充.JCXZ CX 为零时转移.JECXZ ECX 为零时转移.4>子程序CALL 调用指令RET 返回指令5>中断指令INT 中断指令格式: INT TYPE或INT执行的操作: (SP)<-(SP)-2 ((SP)+1,(SP))<-(PSW)(SP)<-(SP)-2 ((SP)+1,(SP))<-(CS)(SP)<-(SP)-2 ((SP)+1,(SP))<-(IP)(IP)<-(TYPE*4) (CS)<-(TYPE*4+2)INTO 溢出中断执行的操作:若OF=1 则:(SP)<-(SP)-2 ((SP)+1,(SP))<-(PSW)(SP)<-(SP)-2 ((SP)+1,(SP))<-(CS)(SP)<-(SP)-2 ((SP)+1,(SP))<-(IP)(IP)<-(10H) (CS)<-(12H)IRET 中断返回格式: IRET执行的操作: (IP)<-((SP)+1,(SP))(SP)<-(SP)+2(CS)<-((SP)+1,(SP))(SP)<-(SP)+2(PSW)<-((SP)+1,(SP))(SP)<-(SP)+2六、处理器控制指令1.标志处理指令CLC 进位位置0 指令(Clear carry)CF<-0CMC 进位位求反指令(Complement carry)CF<-CFSTC 进位位置1 指令(Set carry)CF<-1CLD 方向标志置0 指令(Clear direction)DF<-0STD 方向标志置1 指令(Set direction)DF<-1CLI 中断标志置0 指令(Clear interrupt)IF<-0STI 中断标志置1 指令(Set interrupt)IF<-02.其他处理机控制指令NOP 无操作指令该指令不执行任何操作,其机器码占有一个字节,在调试程序时往往用这条指令占有一定的存储单元,以便在正式运行时用其他指令取代.HLT 停机指令该指令可使机器暂停工作,使处理机处于停机状态以便等待一次外部中断到来,中断结束后可继续执行下面的程序.WAIT 等待指令该指令使处理机处于空转状态,它也可以用来等待外部中断的发生,但中断结束后仍返回WAIT 指令继续德行.ESC 换码指令格式ESC mem其中mem 指出一个存储单元,ESC 指令把该存储单元的内容送到数据总线去.当然ESC 指令不允许使用立即数和寄存器寻址方式.这条指令在使用协处理机(Coprocessor)执行某些操作时,可从存储器指得指令或操作数.协处理机(如8087)则是为了提高速度而可以选配的硬件.LOCK 封锁指令该指令是一种前缀,它可与其他指令联合,用来维持总线的锁存信号直到与其联合的指令执行完为止.当CPU 与其他处理机协同工作时,该指令可避免破坏有用信息.七、伪指令DW 定义字(2 字节).PROC 定义过程.ENDP 过程结束.SEGMENT 定义段.ASSUME 建立段寄存器寻址.ENDS 段结束.END 程序结束.。

8088[8086]指令格式(有用)

8088[8086]指令格式(有用)

附录:8086/8088 指令码格式我们用汇编语言写的汇编程序输入计算机后,由机器提供的汇编程序将其翻译成由机器指令(指令码)组成的机器语言程序,才能由计算机识别并执行,因此汇编语言程序需由汇编程序翻译成可执行的机器语言程序,一般来说,这一过程不需要人为干预。

我们在这里只介绍一下基本原理,以便在必要时也可以用手工的方式完成类似的工作。

8086/8088 指令系统的指令程序类型很多,功能很强,各种指令由于功能不同,需要指令码提供的信息也不同。

为了满足不同用户的功能的要求又要减少指令所占的空间,8086/8088 指令系统采用了一种灵活的,由1~6 个字节组成的变字长的指令格式,包括操作码、寻址方式以及操作数3 部分,如图2所示。

通常指令的第一字节为操作码,规定指令的操作类型。

第二字节规定操作数的寻址方式接着以后的3~6 字节依据指令的不同取舍。

可变字长的指令主要体现在这里,一般由其指出存储器操作数地址位移量或立即数。

操作码(第一字节)及寻址方式字节(MOD字段)格式如下。

图1 8086/8088操作码及寻址方式字段格式第一字节中,W 指出操作数类型:W=0 为字节,W=1 为字。

D 指出操作数的传送方向:D=0 寄存器操作数为源操作数,D=1 寄存器操作数为目标操作数。

第二字节指出所用的两个操作数存放的位置,以及存储器中操作数有效地址EA 的计算方法。

图2 8086/8088 不同字长的指令码格式REG 字段规定一个寄存器操作数,它作为源操作数还是目标操作数已由第一个字节中的D 位规定。

由REG 字段选择寄存器的具体规定见表1。

表1 REG 字段编码表MOD 字段用来区分另一个操作数在寄存器中(寄存器寻址)还是在存储器中(存储器寻址)。

在存储器寻址的情况下,还用来指出该字节后面有多少偏移量字节(即指出存储器操作数地址偏移量的字节数)。

MOD 字段编码表见表2。

表2 MOD 字段编码表R/M 字段受MOD 字段将指出第二操作数所在寄存器编号。

8086指令编码格式 -回复

8086指令编码格式 -回复

8086指令编码格式-回复[8086指令编码格式]8086指令编码格式是指8086处理器指令所使用的编码格式。

8086是Intel公司于1978年推出的一款16位微处理器,它是x86微处理器系列的第一代产品。

8086指令编码格式是为了使处理器能够正确解码指令并执行对应的操作而设计的。

8086指令编码格式包含了多个部分,包括指令前缀、操作码、操作数等。

下面我将一步一步回答各部分的具体内容,以帮助理解8086指令编码格式的内部结构以及其用途。

1. 指令前缀:指令前缀是位于指令编码的开头的一组额外的位。

这些位用于改变指令的默认行为或者提供额外的信息。

例如,寄存器前缀指示指令使用的寄存器是通用寄存器还是特殊寄存器。

重复前缀用于指示某些指令需要被重复执行。

段前缀用于指定操作数的地址所在的段。

2. 操作码:操作码是指令的主要部分,它提供了对应的操作或动作。

8086处理器支持多种不同类型的操作码。

其中一些操作码用于执行算术和逻辑操作,如加法、减法、与、或等。

其他操作码用于控制处理器的行为,如跳转、调用子程序、中断等。

3. 操作数:操作数是指令操作的对象。

8086处理器支持多种类型的操作数,包括寄存器、内存地址等。

寄存器操作数直接指定了一个寄存器。

内存操作数指定了一个内存地址,通过该地址可以读取或写入数据。

立即操作数直接包含了一个数值,它可以是一个字节或者一个字。

8086指令编码格式具有一定的灵活性,这使得它可以适应不同的指令和操作。

下面以几个具体的例子来分析一下8086指令编码格式的使用。

例1:MOV指令MOV指令用于将数据从一个位置复制到另一个位置。

它的编码格式如下:MOV <目标操作数>, <源操作数>其中,目标操作数和源操作数可以是寄存器、内存地址或者立即操作数。

例如,要将寄存器AX的值复制到寄存器BX,可以使用以下编码:MOV BX, AX例2:ADD指令ADD指令用于对两个操作数进行相加。

(汇编语言教程)5_80868088汇编语言-2

(汇编语言教程)5_80868088汇编语言-2

104H DUP(11H 104H DUP(11H)
DUP( DUP(0)
ENDS
ENDS DATA2 DATA2 SEGMENT PARA DB COMMON ‘DATA2’ DATA2 DATA N2 DATA2 DATA2 105H DUP( 105H DUP(0)
DATA2 DATA2 N1 DATA2 DATA2 END
默认值为: 默认值为:PARA
III、 III、组合类型
段名 SEGMENT [定位类型] [组合类型] [使用类型] [‘类别’] 定位类型] 组合类型] 使用类型] [‘类别 类别’ …… …… ; 语句序列 段名 ENDS
PRIVATE:私有段,不进行组合。 PUBLIC:
– 不同模块中的同为public属性的同名段连接组合成一个逻辑段。
3、过程定义伪指令
格式: 格式:过程名 [类型 类型] PROC [类型] … 过程体语句 RET 段名 ENDP PROC和ENDP是成对出现的 是成对出现的。 PROC和ENDP是成对出现的。 类型有近(NEAR)和远(FAR)两种, 类型有近(NEAR)和远(FAR)两种,若过程缺省 NEAR缺省 则属默认值。若为远过程, FAR不 缺省, 或NEAR缺省,则属默认值。若为远过程,则FAR不 能省略。 能省略。 过程名具有段地址、 过程名具有段地址、段内偏移量和类型三个属 性。
2、源程序开始和结束伪指令
程序开始伪指令
– NAME伪指令 NAME伪指令 – TITLE伪指令 TITLE伪指令
程序结束伪指令
– END
(1)程序开始伪指令NAME 程序开始伪指令NAME
NAME伪指令 NAME伪指令 格式: 格式:NAME 模块名 含义:表示一个模块的开始, 含义:表示一个模块的开始,并给出该模 块名。 块名。

8086汇编语言指令表(按字母顺序)

8086汇编语言指令表(按字母顺序)
STD ;置DF=1
CLI ;置IF=0,CPU禁止响应外部中断
STI ;置IF=1,使CPU允许向应外部中断
功能: 完成对标志位的置位、复位等操作.
说明: 例如串操作中的程序,经常用CLD指令清方向标志使DF=0,在串操作指令执行时,按增量的方式修改吕指针.
CLD
处理器控制指令-标志位操作指令
格式:
3. 在8088/8086指令系统中,专门提供了一组根据带符号数比较大小后,实现条件转移的指令.
CMPS
字符串比较指令
格式: CMPS OPRD1,OPRD2
CMPSB
CMPSW
功能: 由SI寻址的源串中数据与由DI寻址的目的串中数据进行比较,比较结果送标志位,而不改变操作数本身.
同时SI,DI将自动调整.
CMC
处理器控制指令-标志位操作指令
格式:
CLC ;置CF=0
STC ;置CF=1
CMC ;置CF=(Not CF)进位标志求反
CLD ;置DF=0
STD ;置DF=1
CLI ;置IF=0,CPU禁止响应外部中断
STI ;置IF=1,使CPU允许向应外部中断
功能: 完成对标志位的置位、复位等操作.
说明: 例如串操作中的程序,经常用CLD指令清方向标志使DF=0,在串操作指令执行时,按增量的方式修改吕指针.
说明:
1. 实际上是两个未组合的十进制数字节相乘,一个0~9的数与另一个0~9的数相乘其积最大为81.为了得到正确的结果,应进行如下调整:
乘积: (AH)<--(AL)/10
(AL)<--(AL)MOD10
2. 本指令应跟在MUL指令后使用,乘积的两位十进制结果,高位放在AH中,低位放在AL中.AH内容是MUL指令的结果被10除的商,即(AL)/10,而最后的AL内容是乘积被10整除的余数(即个位数).

8086汇编语言

8086汇编语言

8086汇编语言8086汇编语言是一种用于编写Intel 8086微处理器的程序的低级语言。

它是x86指令集的最早版本,是现代PC上使用的汇编语言的基础。

本文将介绍8086汇编语言的基本概念、指令系统、程序格式、程序设计方法和应用实例,以帮助读者掌握这门古老而强大的语言。

什么是8086汇编语言8086汇编语言是一种用助记符表示机器指令的语言,它可以直接操作CPU、寄存器、内存和端口等硬件资源。

8086汇编语言的优点是执行速度快、占用空间少、控制能力强,缺点是可读性差、可移植性差、编程难度大。

8086汇编语言的程序由三个部分组成:伪指令、指令和数据。

伪指令是用来告诉汇编程序如何处理源程序的命令,如定义变量、分配内存、设置段属性等。

指令是用来控制CPU执行操作的命令,如数据传送、算术运算、逻辑运算、控制转移等。

数据是用来存储或操作的信息,如常数、变量、字符串等。

8086汇编语言的程序需要经过汇编程序(如MASM)将源代码转换为机器代码,然后再由链接程序(如LINK)将多个目标模块连接成可执行文件,最后由加载程序(如DOS)将可执行文件加载到内存中运行。

8086微处理器8086微处理器是Intel公司于1978年推出的一款16位微处理器,它是x86系列微处理器的第一代产品,也是IBM PC机的原始CPU。

它具有以下特点:工作频率为5MHz~10MHz,每秒可执行约33万条指令内部结构由总线接口单元(BIU)和执行单元(EU)组成,实现了取指和执行的并行操作寄存器由四个16位通用寄存器(AX, BX, CX, DX)、四个16位段寄存器(CS, DS, SS, ES)、一个16位标志寄存器(FLAGS)和一个16位指令指针(IP)组成指令系统由100多条指令组成,分为数据传送类、算术运算类、位操作类、控制转移类和处理机控制类五大类存储器管理采用了分段机制,每个段最大为64KB,总容量为1MB支持两种工作模式:实地址模式和保护模式,实地址模式下可以直接访问物理地址,保护模式下可以实现多任务和内存保护8086汇编语言程序格式8086汇编语言程序一般采用以下格式:[段名] segment [段属性][伪指令][数据][子程序][段名] ends其中:段名是用来标识一个段的名称,可以自定义,但不能与伪指令或寄存器重名段属性是用来设置一个段的类型和特征,如代码段(code)、数据段(data)、堆栈段(stack)等伪指令是用来定义变量、分配内存、设置偏移量等功能的命令,如DB, DW, DD, ORG, ASSUME等数据是用来存储或操作的信息,如常数、变量、字符串等子程序是用来实现特定功能的代码段,如输入输出、排序、查找等一个典型的8086汇编语言程序由以下三个段组成:数据段(data segment):用来存放程序中用到的数据,如变量、常量、字符串等代码段(code segment):用来存放程序中的指令,如数据传送、算术运算、控制转移等堆栈段(stack segment):用来存放程序中的临时数据,如函数调用时的参数、返回地址、局部变量等一个简单的8086汇编语言程序示例如下:data segmentmsg db 'Hello, world!', '$' ;定义一个字符串变量data endscode segmentassume cs:code, ds:data ;告诉汇编程序代码段和数据段的名称start: ;程序入口标号mov ax, data ;将数据段地址加载到ax寄存器mov ds, ax ;将ax寄存器的值传送到ds寄存器,设置数据段寄存器mov dx, offset msg ;将字符串变量的偏移地址加载到dx寄存器mov ah, 9 ;设置ah寄存器为9,表示调用DOS中断的输出字符串功能int 21h ;调用DOS中断21h,输出字符串mov ah, 4ch ;设置ah寄存器为4ch,表示调用DOS中断的退出程序功能int 21h ;调用DOS中断21h,退出程序code endsend start ;告诉汇编程序程序结束的位置8086汇编语言指令系统8086汇编语言指令系统由100多条指令组成,分为五大类:数据传送类:用来实现数据在寄存器、内存和端口之间的传送,如MOV, PUSH, POP, XCHG等算术运算类:用来实现数据的加减乘除等运算,如ADD, SUB, MUL, DIV等位操作类:用来实现数据的位移、旋转、逻辑和测试等操作,如SHL, SHR, ROL, ROR, AND, OR, XOR, NOT, TEST等控制转移类:用来实现程序的顺序、条件和无条件跳转,如JMP, JZ, JNZ, JCXZ, CALL, RET等处理机控制类:用来实现处理机状态的设置和查询,如CLC, STC, CMC, CLD, STD, CLI, STI等每条指令由助记符和操作数组成,助记符表示指令的功能,操作数表示指令的对象。

8086汇编语言学习(二)8086汇编开发环境搭建和Debug模式介绍

8086汇编语言学习(二)8086汇编开发环境搭建和Debug模式介绍

8086汇编语⾔学习(⼆)8086汇编开发环境搭建和Debug模式介绍1. 8086汇编开发环境搭建 在上篇博客中简单的介绍了8086汇编语⾔。

⼯欲善其事,必先利其器,在8086汇编语⾔正式开始学习之前,先介绍⼀下如何搭建8086汇编的开发环境。

汇编语⾔设计之初是⽤于在没有操作系统的裸机上直接操作硬件的,但对于⼤部分⼈来说,在8086裸机上直接进⾏编程将会⾯临各种困难。

好在我们可以使⽤软件模拟器来模拟硬件进⾏8086的学习实践。

在《汇编语⾔》中作者推荐通过windows环境下的masm和debug进⾏学习。

masm介绍: masm是⼀款DOS下的汇编⼯具包,在8086汇编的学习中我们需要其中的⼏个⽂件,分别是masm.exe,link.exe。

masm.exe 汇编器,⽤于将⽂本格式的汇编语⾔源⽂件编译为.obj结尾的⼆进制⽂件,其⽣成的.obj结尾的⼆进制⽬标⽂件是被编译的源⽂件的对应的机器码。

单独的源程序⽬标⽂件通常是⽆法直接运⾏的,还需要和互相依赖的其它同样编译完成的⼆进制⽂件链接在⼀起才能⽣成最终的可执⾏⽂件(⽐如所需要的静态库函数) 。

因此,obj⽂件通常也被叫做中间⽂件。

link.exe 链接器,obj⽂件需要通过链接才能转换成可执⾏程序,⽽链接器就是负责完成这⼀任务的。

链接器能将多个obj⽬标⽂件以及其所依赖的库程序进⾏统⼀处理(例如多个⽬标⽂件中指令、数据内存地址的偏移处理),并⽣成可执⾏⽂件。

debug介绍: debug.exe 调试器,windows提供了⼀个在dos中调试8086汇编程序的⼯具debug.exe,提供了展⽰程序运⾏时CPU中各寄存器、内存中数据,指令级的单步调试等功能。

debug程序的使⽤会在本篇博客的后半段进⾏详细介绍。

64位操作系统兼容性问题: 由于《汇编语⾔》⼀书出版较早,当时的windows系统还是32位的,32位windows系统都默认安装了masm与debug,能打开dos窗⼝直接使⽤。

8086指令系统一览表

8086指令系统一览表
2 ~ 4
CMP op1, op2
(op1) - (op2)
mem, reg
reg, mem
reg, reg
reg, imm
mem, imm
acc, imm
9+EA
9+EA
3
4
10+EA
4
2 ~ 4
2 ~ 4
2
3 ~ 4
3 ~ 6
2 ~ 3
MUL src
(AX)←(AL) * (src)
(DX, AX)←(AX) * (src)
(IP)←(IP) + D16
段内间接:(SP)←(SP)-2
((SP)+1, (SP))←(IP)
(IP)←EA
段间直接:(SP)←(SP)-2
((SP)+1, (SP))←(CS)
(SP)←(SP)-2
((SP)+1, (SP))←(IP)
(IP)←目的偏移地址
(CS)←目的段基址
16位reg
16位mem
80 ~ 90
(86 ~ 96)+EA
144 ~ 162
(150 ~ 168)+EA
2
2 ~ 4
2
2 ~ 4
IDIV src
(AL)←(AX) / (src)的商
(AH)←(AX) / (src)的余数
(AX)←(DX, AX) / (src)的商
(DX)←(DX, AX) / (src)的余数
(86 ~ 104)+EA
128 ~ 154
(134 ~ 160)+EA
2
2 ~ 4
2
2 ~ 4

8086的指令系统

8086的指令系统

TEST AL,80H;查AL的D7= 1? JNZ T_ALARM;是1,则转温度报警程序 TEST AL, 40H; D7=0, D6=1? JNZ P_ALARM;是1,则转压力报警程序
(4) XLAT 表转换指令 格式:XLAT 转换表 或 XLAT


功能:将一个字节从一种代码转换为另一种代码 例:若十进制数字0~9的LED七段对照表如下: 十进制数字 七段显示码 十进制数字 七段显示码 0 40H 5 12H 1 2 3 79H 24H 30H 6 7 8 02H 78H 00H

(2) AND逻辑与指令 指令格式: AND 目的,源 指令功能:对两个操作数进行按位逻辑与操作 结果送回目的操作数 即: 目的←目的∧源。 例3.66 假设AX=3538H, AND AX,0F0FH; 执行该指令后,AX=0508H

(3) OR逻辑或指令 指令格式:OR 目的,源 例3.67 设AX=0508H, OR AX,3030H;AX=3538H

2.输入输出指令 (1) IN输入指令 指令格式: ① IN AL,端口地址 (8位) 或 IN AX,端口地址;(16位) ② IN AL, DX;端口地址存放在DX中 或 IN AX, DX 例3.32 IN AL,0F1H; AL从F1H端口读入一个字节 IN AX,80H; AL 80H端口的内容 ; AH 81H端口的内容 MOV DX,310H;端口地址310H先送入DX中 IN AL,DX; AL 310H端口的内容



MOV MOV XLAT MOV MOV XLAT MOV 4· 标志传送指令
二、算术运算指令 数的类型: 无符号二进制数、带符号二进制数、 压缩十进制数、非压缩十进制数 压缩与非压缩数: 例: 23 压缩: 0010 0011 非压缩表示:0000 0010 0000 0011

微机原理8086汇编语言程序设计

微机原理8086汇编语言程序设计

;这是一个乘10子程序
;使用寄存器AX
;入口:AX,出口:AX
proc far
push bx
;保护现场
pushf
add ax,ax
;2ax

mov bx,ax
;2ax ?bx

add ax,ax
;4ax

add ax,ax
;8ax

add ax,bx
;10ax

popf
;恢复现场
pop bx
ret
endp
第四章 8086汇编语言程序设计
? 几个概念 ? 8086汇编语言的语句 ? 8086汇编中的伪指令 ? 8086汇编中的运算符 ? 汇编语言程序设计 ? 宏定义与宏调用 ? 系统调用
几个概念
? 汇编语言 ? 汇编语言源程序 ? 汇编 ? 汇编程序
4.1 8086汇编语言的语句
汇编语言由指令性语句和指令性语句组成 ? 一、指令性语句格式
CODE SEGMENT
;定义代码段
ASSUME DS:DATA , CS: CODE
START: MOV AX , DATA
;初始化DS
MOV DS , AX
……
MOV AX , 4C00H ;返回DOS
INT 21H
CODE ENDS
;代码段结束
END START
;源程序结束
;段属性说明
? 特点 ? 程序分段 ? 语句由指令性和指示性语句组成 ? 两种程序框架
? 3、 ORG伪指令、地址计数器 $
ORG伪指令格式: ORG <表达式>
? 4、END 表示源代码结束 格式为: END 常数或表达式.

8086指令的基本格式

8086指令的基本格式

8086指令的基本格式一、概述在计算机科学领域中,指令是计算机执行操作的基本单位。

8086指令集是Intel 于1978年推出的一种16位微处理器指令集,被广泛应用于个人电脑和其他嵌入式系统中。

本文将详细介绍8086指令的基本格式及其组成部分。

二、8086指令的组成8086指令由若干个字节组成,每个字节代表一个特定的操作码或操作数。

根据指令的功能和操作数的个数,8086指令可以分为不同的类型,包括数据传输指令、算术运算指令、逻辑运算指令、控制转移指令等。

三、8086指令的基本格式8086指令的基本格式包括操作码、操作数和标志位。

下面将对每个部分进行详细介绍。

1. 操作码操作码是指令的关键部分,用于指定要执行的操作类型。

8086指令的操作码通常由一个或多个字节组成,不同的操作码代表不同的指令功能。

例如,MOV指令用于数据传输,ADD指令用于算术运算。

2. 操作数操作数是指令的操作对象,用于指定要操作的数据。

8086指令的操作数可以是寄存器、内存地址或立即数。

寄存器是8086处理器内部的存储单元,用于存储和操作数据。

内存地址指的是存储器中的某个位置,可以通过地址来访问其中的数据。

立即数是指令中直接给出的常数值。

3. 标志位标志位是用于记录处理器状态和指令执行结果的标志位。

8086处理器有多个标志位,包括进位标志、零标志、符号标志等。

这些标志位可以通过特定的指令来设置或清除,并在指令执行过程中进行判断和使用。

四、8086指令的执行过程8086指令的执行过程可以分为取指令、译码、执行和写回等阶段。

1.取指令阶段:处理器从内存中读取下一条指令,并将其存储在指令寄存器中。

2.译码阶段:处理器对取出的指令进行解码,确定要执行的操作类型和操作数。

3.执行阶段:处理器根据指令的操作类型和操作数执行相应的操作,如数据传输、算术运算等。

4.写回阶段:处理器将执行结果写回到寄存器或内存中,更新标志位。

五、8086指令的示例下面将通过示例来说明8086指令的基本格式和使用方法。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
CLD
DF←0
STD
DF←1
标志传送
CLI
IF←0
STI
IF←1
LAHF
AH←FLAG低字节
SAHF
FLAG低字节←AH
PUSHF
FLAGS入栈
POPF
FLAGS出栈
LEA r16, mem
r16←16位有效地址
地址传送
LDS r16, mem
DS: r16←32位远指针
LES r16, mem
ES: r16←32位远指针
交换指令
XCHG reg, reg/mem
reg↔reg/mem
XCHG reg/mem, reg
转换指令
XLAT label
AL←[BX+AL]
XLAT
堆栈指令
PUSH r16/m16/seg
寄存器/存储器入栈
POP r16/m16/seg
寄存器/存储器出栈
CLC
CF←0
STC
CF←1
CMC
CF←~CF
ADC mem, imm/reg
INC reg/mem
reg/mem←reg/mem+1
SUB reg, imm/reg/mem
dest←dest-src
SUB mem, imm/reg
SBB reg, imm/reg/mem
dest←dest-src-CF
减法运算
SBB mem, imm/reg
DEC reg/mem
reg/mem←reg/mem-1
NEG reg/mem
reg/mem←0-reg/mem
CMP reg, imm/reg/mem
dest-src
CMP mem, imm/reg
乘法运算
MUL reg/mem
无符号数值乘法
IMUL reg/mem
有符号数值乘法
除法运算
DIV reg/mem
无符号数值除法
指令符号说明
符号
说明
r8
任意一个8位通用寄存器AH、AL、BH、BL、CH、CL、DH、DL
r16
任意一个16位通用寄存器AX、BX、CX、DX、SI、DI、BP、SP
reg
代表r8、r16
seg
段寄存器CS、DS、ES、SS
m8
一个8位存储器操作数单元
m16
一个16位存储器操作数单元
mem
代表m8、m16
控制转移
JMP r16/m16
无条件间接转移
Jcc label
条件转移
LOOPlabel
CX←CX-1;若CX≠0,循环
循环
LOOPZ / LOOPE label
CX←CX-1;若CX≠0且ZF=1,循环
LOOPNZ / LOOPNE label
CX←CX-1;若CX≠0且ZF=0,循环
JCXZ label
IDIV reg/mem
有符号数值除法
符号扩展
CBW
把AL符号扩展为AX
CWD
把AX符号扩展为DX.AX
DAA
将AL中的加和调整为压缩BCD码
DAS
将AL中的减差调整为压缩BCD码
十进制调整
AAA
将AL中的加和调整为非压缩BCD码
AAS
将AL中的减差调整为非压缩BCD码
AAM
将AX中的乘积调整为非压缩BCD码
SHL reg/mem, 1/CL
与SAL相同
SHR reg/mem, 1/CL
逻辑右移1/CL指定的次数
ROL reg/mem, 1/CL
循环左移1/CL指定的次数
循环移位
ROR reg/mem, 1/CL
循环右移1/CL指定的次数
RCL reg/mem, 1/CL
带进位循环左移1/CL指定的次数
XOR mem, imm/reg
TEST reg, imm/reg/mem
dest AND src
TEST mem, imm/reg
NOT reg/mem
reg/mem←NOT reg/mem
SAL reg/mem, 1/CL
算术左移1/CL指定的次数
移位
SAR reg/mem, 1/CL
算术右移1/CL指定的次数
AAD
将AX中的mm/reg/mem
dest←dest AND src
AND mem, imm/reg
OR reg, imm/reg/mem
dest←dest OR src
逻辑运算
OR mem, imm/reg
XOR reg, imm/reg/mem
dest←dest XOR src
i8
一个8位立即数
i16
一个16位立即数
imm
代表i8、i16
dest
目的操作数
src
源操作数
label
标号
指令汇编格式
指令类型
指令汇编格式
指令功能简介
MOV reg/mem, imm
dest←src
传送指令
MOV reg/mem/seg, reg
MOV reg/seg, mem
MOV reg/mem, seg
输入
IN AL/AX, i8/DX
AL/AX←I/O端口i8/DX
输出
OUT i8/DX, AL/AX
I/O端口i8/DX←AL/AX
ADD reg, imm/reg/mem
dest←dest+src
ADD mem, imm/reg
加法运算
ADC reg, imm/reg/mem
dest←dest+src+CF
CX=0,循环
CALL label
直接调用
子程序
CALL r16/m16
间接调用
RET
无参数返回
RET i16
有参数返回
INT i8
中断调用
中断
IRET
中断返回
INTO
溢出中断调用
NOP
空操作指令
SEG:
段超越前缀
处理器控制
HLT
停机指令
LOCK
封锁前缀
WAIT
等待指令
ESC i8,reg/mem
交给浮点处理器的浮点指令
RCR reg/mem, 1/CL
带进位循环右移1/CL指定的次数
MOVS[B/W]
串传送
LODS[B/W]
串读取
STOS[B/W]
串存储
串操作
CMPS[B/W]
串比较
SCAS[B/W]
串扫描
REP
重复前缀
REPZ / REPE
相等重复前缀
REPNZ / REPNE
不等重复前缀
JMP label
无条件直接转移
相关文档
最新文档