文档库 最新最全的文档下载
当前位置:文档库 › 8086常用指令集

8086常用指令集

8086常用指令集
8086常用指令集

8086指令集

寄存器:

累加器:AX 变址寄存器:SI 代码段寄存器:CS 指令指针:IP

基址寄存器:BX 变址寄存器:DI 数据段寄存器:DS 微处理器状态字:PSW 计数寄存器:CX 堆栈寄存器:SP 附加段寄存器:ES

数据寄存器:DX 基址指针:BP 堆栈段寄存器:SS

属性操作符:符号及含义:

SEG:取出段地址OPR:一个操作数REGn:一个n位寄存器OFFSET:取出偏移地址SRC:源操作数MEM:一个存储单元TYPE:取出其类型DST:目的操作数CNT:计数值

LENGTH:取出变量重复次数REG:一个寄存器LABEL:标号或过程名SIZE:取出变量的大小SEG:段地址IDATA:立即数

数据寻址方式:立即寻址,寄存器寻址,存储器寻址(5种),隐含寻址

一:立即寻址:MOV AX ,12A2H ;

二:寄存器寻址:MOV DS,AX ; MOV V AR ,BX ;

三:存储器寻址:操作数保存在存储单元中(5种)

直接寻址:偏移地址直接给出, 1.MOV AX,V AR; 2. MOV DL,V AR2+5;

3. MOV CX,[1200H]

4. MOV V AR,2500 ;

寄存器间接寻址:有效地址存放在寄存器中,

直接寻址:1.MOV AX,[ SI ] ; 2.MOV [BX],DX ;

寄存器相对寻址:有效地址为一个基址寄存器或变址寄存器的内容怀一个8位或16位的位移量这和. 1.MOV BX,[ SO+5 ] ; 2.MOV CX,V AR[BX]; 3.MOV AL,V AR[DI-5]

基址变址寄存器:有效地址为一个基址寄存器和一个变址寄存器之和,

1.MOV DX,[BX][SI]

2.MOV AX,[BP][SI]

基地变址且相对寻址:基址寄存器内容,一个变址寄存器内容,一个位移量,三者之和。

1.MOV AX,[BX+5][SI];

2.MOV V AR[BP][DI],AX;

数据传送指令:

通用传送类指令:MOV 格式: MOV DST,SRC;

获取有效地址指令:LEA 格式:LEA REG16, MEM;

获取地址指针指令:LDS,LES 格式:LDS REG16, MEM(取高16位送入DS,低16送入REG16中;) 格式; LES REG16, MEM(高16位送入ES,低16送入REG16中)

标志传送指令:LAHF,SAHF 格式:LAHF ;PSW寄存器中低8位传送到寄存器AH中格式:SAHF ; 将寄存器AH中低8位传送到PSW寄存器中的低8位

数据交换指令:XCHG 格式:XCHG DST,SRC :两个操作数之间数据的交换

字节转换指令:XLAT 格式:XLAT :

堆栈操作指令:PUSH,POP,PUSHF,POPF

算术运算类指令:

加减法指令:

加法指令:ADD,ADC : 格式:ADD DST,SRC ;将SRC+DST的结果存入DST

ADC DST,SRC;将SRC+DST+CF的结果存入DST 减法指令:SUB,SBB: 格式:SUB DST,SRC;相似上方,

取负指令:NEG 格式:NEG DST; 0-DST的结果存在DST.

比较指令:CMP 格式:CMP DST,SRC; DST-SRC的结果设置PSW的状态标志位。

增量减量指令:INC,DEC 格式:INC DST;为增量指令,每次对DST的内容增加1,

DEC DST;减量指令,每次对DST的内容减去1,

乘除法指令:

乘法指令:MUL,IMUL; 格式:MUL为无符号数相乘,IMUL为有符号数相乘。

除法指令:DIV,IDIV;格式:相似上方。

符号扩展指令:CBW,CWD;

CBW:将AL中的符号扩展到AH中,形成一个字的AX

CWD:将AX中的符号扩展到DX中,形成双字(DX:AX)

BCD数运算调整指令:分离BCD,组合BCD

加法调整指令:AAA,DAA;前者分离,后者组合,

减法调整指令:AAS,DAS; 前者分离,后者组合,

乘法分离指令:AAM;乘法分离BCD码调整,

除法分离指令:AAD;

逻辑运算类指令:

逻辑与:AND; 格式:AND DST,SRC:

逻辑测试:TEST;格式:同上

逻辑或:OR:格式:同上

逻辑异或:XOR

逻辑非:NOT

应用例子:

OR CL,03H ;将CL的位0,1置1,其余位不变

AND AL,0F5H ;将AL的位1,位3清零

XOR AH,OFH ;将AH的低4位取反,高4位不变

TEST AL,02H ;测试AL的位1是否为0,若为0则转移到ZER1

JZ ZER1 ;

XOR AX,AX ;AX清零

AND AL,5FH ;将AL中的字母的ASCII码变换成“大写”字母的ASCII码

OR AL,20H ;将AL中的字母的ASCII码变换成“小写”字母的ASCII

移位类指令:

SHR DST,CNT 逻辑右移指令;位移类指令中,移出的一位存CF SAR DST,CNT 算术右移指令;中。逻辑右移指令中,在最高位填入SHL\SAL DST,CNT 逻辑\算术左移指令;0,在算术右移指令中,在最高位填ROR DST,CNT 循环右移指令;入符号位;在逻辑\算术左移指令中,ROL DST,CNT 循环左移指令;在最低位填入0,在循环右移指令中RCR DST,CNT 带进位循环右移指令;在最高位填入其最低位的值,形成循RCL DST,CNT 带进位循环左移指令;环移位。

标志位操作指令:只对CF,DF,IF操作

CLC : CF位清零

STC : CF位置1

CMC: CF位取反

CLD: DF清零

STD: DF置1

CLI: IF清零

STI: IF置1

循环控制指令:

格式:

LOOP LABEL ; (CX)←(CX)-1,(CX)≠0时转LABEL

LOOPZ/LOOPE LABEL ; (CX)←(CX)-1,(CX)≠0且ZF=1时转LABEL

LOOPNZ/LOOPNE LABEL ; (CX)←(CX)-1,(CX)≠0且ZF=0时转LABEL

JCXZ LABEL ; CX=0时转LABEL

子程序调用返回指令:

子程序调用指令:1.CALL LABEL ;调用入口地址为标号LABEL的子程序

2.CALL OPR;调用子程序,其入口地址为操作数OPR的内容子程序返回指令:1.RET ;用于段内子程序的返回,完成IP出栈,

2.RETE ;用于段间子程序的返回,完成IP出栈,CS出栈

3.RET n;完成RET指令功能后,(SP)←(SP)+n

过程定义:PROC

:

RET

过程名ENDP

中断调用与返回指令:

中断调用指令:INT n

中断返回指令:IRET

字符串操作指令:

字符串传送指令:

1.MOVSB :字节传送(ES:DI)←(DS:SI),(SI)←(SI)±1,(DI)←(DI)±1

2.MOVSW :(ES:DI)←(DS:SI),(SI)←(SI)±2,(DI)←(DI)±2

3.MOV DST,SRC ;当DST和SRC同为字节类型时,等同于MOVSB指令

;当DST和SRC同为字类型时,等同于MOVSW指令

重复前缀:

REP:相当于LOOP指令

REPZ/REPE:相当于LOOPZ/LOOPE

REPNZ/REPNE:相当于LOOPNZ/LOOPNE

字符串比较指令:

1.CMPSB ;

2.CMPSW ;

3.CMPS DST,SRC ;

REPZ CMPS

REPNZ CMPS

字符串扫描指令:

1,SCASB

2.SCASW

3.SCAS DST,SRC

REPZ SCAS

REPNZ SCAS

字符串装入指令:

1.LODSB

2.LODSW

3.LODS DST,SRC

字符串存储指令:

1.STOSB

2.STOSW

3.STOS DST ,SRC

输入输出指令:

端口输入指令:IN DST,SRC

端口输出指令:OUT DST,SRC

其他指令:

空操作指令:NOP

暂停指令:HLT

等待指令:W AIT

总线锁定指令:LOCK

换码指令:ESC

宏指令:MACRO

宏指令变量定义:LOCAL 标号或变量重复宏:REPT

不重复宏:IRP

不定字符重复宏:IRPC

段定义伪指令:SEGMENT

段说明伪指令:ASSUNE

整个源程序的结束:END 表达式

段定义的结束:ENDS

过程定义的结束:ENDP

宏指令或重复宏的结束:ECDM

伪指令:

PAGE

TITLE

LABEL:用来定义变量或标号的类型,具有段地址与偏移地址属性,但它不占用内存,EQU:为表达式赋一个新的名称

ORG :为后续指令指定段内偏移地址,

汇编语言通用结构:

STACK SEGMENT STACK ‘STACK’

DW 100H DUP(?)

TOP LABEL WORD

STACK ENDS

DATA SEGMENT

:

:

: ;用户定义的变量

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE, DS:DATA,ES:DATA,SS:STACK START:

MOV AX,DATA

MOV DS,AX

MOV ES,AX

MOV AX,STACK

MOV SS,AX

LEA SP,TOP

:

: ;用户编写的程序

CODE ENDS

END START

8086汇编指令手册

8086汇编指令手册 一、数据传输指令 它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据. 1. 通用数据传送指令. MOV 传送字或字节. MOVSX 先符号扩展,再传送. MOVZX 先零扩展,再传送. PUSH 把字压入堆栈. POP 把字弹出堆栈. PUSHA 把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 交换字或字节.( 至少有一个操作数为寄存器,段寄存器不可作为操作数) CMPXCHG 比较并交换操作数.( 第二个操作数必须为累加器AL/AX/EAX ) XADD 先交换再累加.( 结果在第一个操作数里) XLAT 字节查表转换. —— BX 指向一张256 字节的表的起点, AL 为表的索引值(0-255,即 0-FFH); 返回AL 为查表结果. ( [BX+AL]->AL ) 2. 输入输出端口传送指令. IN I/O端口输入. ( 语法: IN 累加器, {端口号│DX} ) OUT I/O端口输出. ( 语法: OUT {端口号│DX},累加器) 输入输出端口由立即方式指定时, 其范围是0-255; 由寄存器DX 指定时, 其范围是0-65535. 3. 目的地址传送指令. LEA 装入有效地址. 例: LEA DX,string ;把偏移地址存到DX. LDS 传送目标指针,把指针内容装入DS. 例: LDS SI,string ;把段地址:偏移地址存到DS:SI. LES 传送目标指针,把指针内容装入ES. 例: 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. SAHF 标志寄存器传送,把AH内容装入标志寄存器.

8086指令系统精析解析

8086指令系统精析 3.1基本数据类型 1.IA-32结构的基本数据类型是字节(8位)、字(16位)、双字(32位)、四字 (64位,486中引入的)和双四字(128位,Pentium3中引入的)。 2.低字节占用内存中的最低地址,该地址也是此操作数的地址。图:P44 图3-1 3.字、双字、四字的自然边界是偶数编号的地址,字的自然边界是偶数编号的 地址,双字和四字的自然边界地址要分别能被4和8除尽。 4.数据结构要尽可能在自然边界上对齐 5.对于不对齐的存储访问,处理器要求做两次存储访问操作;而对于对齐的访 问,只要进行一次存储访问操作。 6.数字数据类型(学生自学)PPT 3.28086的指令格式 一、指令格式 Label(标号):mnemonic(助记符)argument1(参数1),argument2(参数2),argument3(参数3)其中: 1.标号是一个标识符,后面跟有冒号 2.助记符是一类具有相同功能的指令操作码的保留名 3.操作数的三个参数是任选的,可以有零到三个操作数,操作数参数的数量取 决于操作码 4.操作数参数可能是文字或数据项的标识符,也可能是寄存器的保留名或在程 序的另一部分声明的赋予数据项的标识符。 5.在算术和逻辑指令中存在两个操作数时,右边的操作数是源,左边的操作数 是目的。例如:LOADREG: MOV AX, SUBTOTAL 功能是把由SUBTOTAL表示的源操作数传送至AX寄存器。 3.38086/8088指令的操作数寻址方式

寻找操作数,操作数能定位在指令中、寄存器中、存储单元中以及I/O端口中。 1.立即数 用包含在指令中的操作数作为源操作数,这些操作数即为立即操作数。 立即数可以是8位或16 例1 MOV AX , 2056H 结果( AH ) = 20H ( AL ) = 56H 例2 MOV AL , 78 H 结果( AL ) = 78H 2.寄存器操作数 操作数在寄存器中,指令中指定寄存器名 8 位操作数,用8 位寄存器: AH、AL、BH、BL、CH、CL、DH、DL 16 位操作数,用16 位寄存器: AX、BX、CX、DX、SP、BP、SI、DI CS、DS、SS、ES 例1 MOV AX , 2056H 执行后:(AX)=2056H 例2 MOV BL , AH 执行前:(BL) = 12H, (AH) = 78H 执行后:(BL) = 78H (AH) = 78H ▲立即数寻址、寄存器寻址的操作数,不用在取完指令后再到内存中取数。 ▲以下的 5 中寻址方式,操作数存放在内存中,取完指令后,还需到内存取数。指令中给出的是该操作数的地址,包括段地址和偏移地址。 3. 内存操作数 ▲指令MOV DS: [ DI ] , CL 完成将CL寄存器中的内容传送到以DS为段值,DI为偏移值的内存单元中。例编程将CL寄存器的内容传送到21000H单元中。PPT 地址21000H=2000:1000H ,编程时,DS 存放段地址2000H,DI 存放偏移地址1000H MOV AX, 2000H MOV DS, AX ; (DS) = 2000H

8086汇编指令大全.

标志寄存器:9个有效位,分 6个状态寄存器和 3个控制寄存器 CF 当执行一个加法(减法使最高位产生进位(借位时 CF=1 否则 CF=0 PF 指令执行的结果低 8位有偶数个一时, CF=1 否则 CF=0 AF 当执行一个加法(减法使运算结果低 4位向高 4位有进位(借位时 AF=1 否则 AF+0 ZF 当前运算结果为零, ZF=1 否则 ZF=0 SF 符号标志位 OF 溢出标志位 DF 方向标志位 IF 中断允许位 IF=1时响应外部中断

TF 跟踪标志位 操作数:[目的操作数(OPD ,源操作数(OPS ] ;立即操作数,寄存器操作数,存储器操作数。寻址方式: 1 寄存器寻址例:INC AX ; MOV AX , BX 2 寄存器间接寻址 (寄存器只能是 BX , DI , SI , BP ; [PA=(BX 、 DI 、 SI +DS》 4 或 BP+SS》4] 3 寄存器相对寻址 4 基址变址寻址 5 相对基址变址寻址 6 直接寻址 7 立即数寻址 i. 立即数寻址立即数寻址不能用在单操作数指令中 ii. 在双操作数中,立即数寻址方式不能用于目的操作数字段 指令系统: 1 数据传送指令 mov 注意: 不允许在两个存储单元之间直接传送数据

不允许在两个段寄存器之间传送数据 不允许用立即数直接为段寄存器赋值 不影响标志位 不允许寄存器或存储单元到除 CS 外的段寄存器 2 入栈(出栈指令 PUSH (POP 注意: PUSH 操作数不能是“立即数” POP 操作数不能是段寄存器 CS 不影响标志位 先进后出 单操作符 3 交换指令 XCHG 注意:

常用8086汇编指令(彩色版)

8086/8088指令系统 一、数据传送指令 1.通用数据传送指令 MOV(Move)传送 PUSH(Push onto the stack)进栈 POP(Pop from the stack)出栈 XCHG(Exchange)交换 .MOV指令 格式为:MOV DST,SRC 执行的操作:(DST)<-(SRC) .PUSH进栈指令 格式为:PUSH SRC 执行的操作:(SP)<-(SP)-2 ((SP)+1,(SP))<-(SRC) .POP出栈指令 格式为:POP DST 执行的操作:(DST)<-((SP+1),(SP)) (SP)<-(SP)+2 .XCHG交换指令 格式为:XCHG OPR1,OPR2 执行的操作:(OPR1)<-->(OPR2) 2.累加器专用传送指令 IN(Input)输入 OUT(Output)输出 XLAT(Translate)换码 这组指令只限于使用累加器AX或AL传送信息. .IN输入指令 长格式为: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输出指令 长格式为:OUT PORT,AL(字节) OUT PORT,AX(字)

执行的操作:(PORT)<-(AL)(字节) (PORT+1,PORT)<-(AX)(字) 短格式为:OUT DX,AL(字节) OUT DX,AX(字) 执行的操作:((DX))<-(AL)(字节) ((DX)+1,(DX))<-AX(字) 在IBM-PC机里,外部设备最多可有65536个I/O端口,端口(即外设的端口地址)为0000~FFFFH.其中前256个端口(0~FFH)可以直接在指令中指定,这就是长格式中的PORT,此时机器指令用二个字节表示,第二个字节就是端口号.所以用长格式时可以在指定中直接指定端口号,但只限于前256个端口.当端口号>=256时,只能使用短格式,此时,必须先把端口号放到DX寄存器中(端口号可以从0000到0FFFFH),然后再用IN或OUT指令来传送信息. .XLAT换码指令 格式为:XLAT OPR 或:XLAT 执行的操作:(AL)<-((BX)+(AL)) 3.有效地址送寄存器指令 LEA(Load effective address)有效地址送寄存器 LDS(Load DS with Pointer)指针送寄存器和DS LES(Load ES with Pointer)指针送寄存器和ES .LEA有效地址送寄存器 格式为:LEA REG,SRC 执行的操作:(REG)<-SRC 指令把源操作数的有效地址送到指定的寄存器中. .LDS指针送寄存器和DS指令 格式为:LDS REG,SRC 执行的操作:(REG)<-(SRC) (DS)<-(SRC+2) 把源操作数指定的4个相继字节送到由指令指定的寄存器及DS寄存器中.该指令常指定SI寄存器. .LES指针送寄存器和ES指令 格式为:LES REG,SRC 执行的操作:(REG)<-(SRC) (ES)<-(SRC+2) 把源操作数指定的4个相继字节送到由指令指定的寄存器及ES寄存器中.该指令常指定DI寄存器. 4.标志寄存器传送指令 LAHF(Load AH with flags)标志送AH SAHF(store AH into flags)AH送标志寄存器 PUSHF(push the flags)标志进栈 POPF(pop the flags)标志出栈 .LAHF标志送AH

8086指令表

表2-2算术运算指令

表2-4 串操作指令

表2-5程序转移指令

表2-7串操作指令中寄存器和标志位的用途 1.设BL=0FFH,执行指令“SAR BL , 1”后,BL中的内容是(0FFH)。 2.设SP=1300H,AX=200H,执行指令“POP AX”后,SP寄存器的内容为(1302H)。 3.十进制数的-1的8位二进制补码,用十六进制数表示是(D) A.01H B.8FH C.0FEH D.0FFH

MOV用法总结 非法操作: 1.两个操作数都是存储器操作数 2.src是立即数,dest是段寄存器 3.两个操作数都是段寄存器 MOV指令用法的举例: MOV AX , CX ;段寄存器至通用寄存器 MOV AL , 125 ;立即数至寄存器 MOV MEM , 15 ;立即数至存储器,直接寻址 MOV SI , BX ;寄存器至寄存器 MOV DS , AX ;通用寄存器至段寄存器(CS不行) MOV [BX] , 50H ;立即数至存储器,寄存器间接寻址 MOV MEM , AX ;寄存器至存储器,直接寻址 MOV MEM , DS ;段寄存器至存储器,直接寻址 MOV ISP[BX] , CX ;寄存器至存储器,基址寻址 MOV AX , DISP[SI] ;存储器至寄存器,变址寻址 MOV DS , MEM ;存储器至段寄存器,直接寻址 MOV AX , DISP[BX] [SI] ;存储器至寄存器,基址变址寻址 标志位 1.CF:进位标志位。当进行加法或减法运算时,最高位发生进位或借位,CF=1;否则,CF=0。 2.PF:奇偶标志位。当运算结果的最低有效字节中“1”的个数为偶数时,PF=1;为奇数时,CF=0。 3.AF:辅助进位位。在减法或加法操作中,低4位向高4位有进位、借位发生时,AF=1;否则,AF=0。 4.ZF:零标志位。ZF=1表示运算结果为零;否则ZF=0。 5.SF:符号标志位。SF=1表示运算结果的最高位为1(即为负数);否则SF=0。 6.OF:溢出标志位。OF=1表示溢出,即算术运算的结果超出了带符号数的范围;OF=0表示未溢出。8位带符号数的范围是-128--+127,16位带符号数的范围是-32768--+3276 7. 7.TF:跟踪标志位。TF=1是CPU处于单步执行指令的工作方式。这种方式便于进行程序的调试。每执行一条指令后,便自动产生一次内部中断,从而能逐条地检查程序。 8.IF:中断允许标志位。IF=1使CPU可以响应可屏蔽中断请求。IF=0使CPU 禁止响应可屏蔽中断请求。不可屏蔽中断和内部中断不受IF影响。 9.DF:方向标志位。DF=1字符串操作按地址递减进行;DF=0字符串操作按地址递增进行。

8086指令总结

8086指令系统总结 学习微处理器及其程序设计,必须掌握微处理器的指令系统。本章以8086 微处理器为例介绍微型计算机的指令系统,包括指令格式、寻址方式和各类指令功能。要明确各种寻址方式的区别和特点,掌握有效地址和物理地址的计算方法,要正确使用指令,掌握各类指令的功能、对标志位的影响和使用上的一些特殊限制。能够编写小汇编程序,初步掌握汇编程序的编写和调试方法。 本章的重点难点内容是:8086 的指令格式及寻址方式,8086 的常用指令和8086 指令前缀的使用。 下面我们分别进行总结: 一.8086寻址方式 (1)操作数是数字,指令中立即写出数字------------立即数寻址 MOV AX,1234H 解释此句意义 (2)操作数是寄存器内容,指令中写出寄存器的符号---------寄存器寻址 MOV AX,BX (3)操作数是存储单元内容,用括号括出存储单元有效地址-----直接寻址 MOV AX,[1234H] MOV AX,ES:[1234H] (4)操作数是存储单元内容,用括号括出寄存器或其表达式,寄存器或其表达式的值为存储单元有效地址-------------间接寻址MOV AH,[BX] MOV AX,ES:[SI] MOV AL,[BX+SI+5]===5[BX+SI]===5[BX][SI] 二.8086指令系统 1.数据传送指令 (一)通用传送指令 (1)MOV指令 指令格式:MOV 目,源 功能:将源操作数传送给目标操作数。 (2)堆栈操作指令 进栈指令:PUSH 格式:PUSH 源 功能:将源操作数压入堆栈。 例:用堆栈指令完成上例的功能。 MOV AX,3000H MOV DS,AX ;段寄存器填充 MOV SI,0100H ;基本指令执 MOV DI,2000H ;行前的初值 MOV CX,50 NT: PUSH [SI] ;程序从这 POP [DI] ;开始设计 INC SI INC SI INC DI INC DI LOOP NT MOV AH,4CH INT 21H

8086汇编指令表

8086汇编指令表

MOV MOV DST,SRC DST≠CS、IP和imm 不影响 标志位 MOV [9AF0H],AL MOVS MOVS mem, mem MOVSB/W 不影响 标志位 字符串传送ES:DI←(DS:SI) SI←(SI)(+/-)1 DI←(DI)(+/-)1 MOVS ES:BYTE PTR[DI], DS:[SI] MUL MUL r/m8 设置CF OF S Z A P无法预 测 无符号乘法:AX←AL*r/m8 MUL CL MUL r/m16 无符号乘法:DX:AX←AX*r/m16 MUL CX NEG NEG reg/mem CF OF SF ZF AF PF 求补:取反加一 0-(DST) NEG CL NOP NOP 不影响空操作NOP NOT NOT reg/mem 不影响按位取反NOT CL OR 同AND PF SF ZF CF=OF=0 逻辑或 OR AL,0FH (不变\置1) OUT OUT imm8,AL/AX/EAX 不影响 标志位 将AL/AX/EAX输出到imm8指定端 口 OUT 0FFH,AL OUT DX,AL/AX/EAX 将AL/AX/EAX输出到DX指定的端口OUT DX,AL POP POP DST DST!=imm & CS 不影响 标志位 DST←((SP)+1,(SP)) SP←(SP)+2 POP WORD Ptr [87EAH] POPF POPF 设置所有标志位从堆栈中弹出16位标志寄存器POPF PUSH PUSH SRC 8086 SRC!=imm 不影响 标志位 SP<--(SP)-2 ((SP)+1,(SP))←(SRC) [SP循 环] PUSH WORD Ptr [87EAH] PUSHF PUSHF 不影响压栈16位标志寄存器PUSHF RCL 同SHL 同ROL 带进位循环左移 RCL AL,1 RCR 同SHL 同ROL 带进位循环右移 RCR AL,1 ROL 同SHL 移一位后符号位 改变则OF=1 循环左移: ROL AL,1 ROR 同SHL 同ROL 循环右移: ROR AL,1 REP REP String operation 不影响 标志位 CX=0则终止---CX←(CX)-1 ---串操作---SI/DI增量 REPZ REPE REPE String operation AF CF OF PF SF ZF CX=0||ZF=0则终止 ---CX←(CX)-1 ---串比较---SI/DI增量 REPNZ REPNE REPNE String operation AF CF OF PF SF ZF CX=0||ZF=1则终止--- CX←(CX)-1 ---串比较---SI/DI增量 RET RET 恢复压栈标志位 POP IP[CS] 子过程返回(Near)/(Far) RET RET imm16 子过程返回后SP←(SP)+imm16 RET 08

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)+2 PUSHA 把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)(字节)

8086指令集结构

8086指令集结构 一.8086 的寄存器结构 8086CPU中具有14个程序员可以访问的16位寄存器(如图1.1所示),按其功能可分为通用寄存器、段寄存器、指令指针寄存器及标志寄存器。 图1.1 8086寄存器结构框图 (1) 通用寄存器 8086CPU共有8个16位寄存器,它们可以作为一般的通用寄存器存放数据。按照相应的用途又可以分为两组:一组是数据寄存器(AX,BX,CX,DX),可以按照字(16位)形式访问,也可按照字节(8位)形式访问。主要用来暂时存放在计算过程中需要用到的操作数、操作运算结果。另一组是地址指针寄存器(SP,BP,SI,DI),只能按照字形式访问。主要存放访问主存时所需的偏移地址。 AX(Accumulator) 称作累加器,在乘、除法等指令运算中指定存放操作数及运算结果。 BX(Base) 称作基址寄存器,在计算主存地址时可以用作基址寄存器。 CX(Count) 称作计数寄存器,在循环指令及串处理等指令中作为隐含的计数器使用。 DX(Data) 称作数据寄存器,在字(16位)乘、除法等指令中用于存放双倍字长结果的高16位数据;在I/O指令中存放I/O的端口地址。 以上四个16位寄存器均可分为两个独立的8位寄存器使用。如AX分为AH 和AL SP(Stack Pointer) 称作堆栈指针寄存器,存放堆栈段首地址到栈顶单元的偏移量。 BP(Base Pointer) 称作基址指针寄存器,通常用于存放需要访问的、位于堆栈段数据的一个基地址或该段的某个字单元到堆栈段首地址的偏移量。 SI(Source Index) 称作源变址寄存器,主要用于存放需要访问的(源)操作数所在主存单元相对于该段首地址的偏移量。在串操作指令中,用作隐含的源变

8086指令大全

80X86 汇编指令符号大全 +、-、*、/∶算术运算符。 &∶宏处理操作符。宏扩展时不识别符号和字符串中的形式参数,如果在形式参数前面加上一个& 记号,宏汇编程序就能够用实在参数代替这个形式参数了。 $∶地址计数器的值——记录正在被汇编程序翻译的语句地址。每个段均分配一个计数器,段内定义的所有标号和变量的偏移地址就是当前汇编地址计数器的值。 ?∶操作数。在数据定义语句中,操作数用?,其作用是分配并保留存储空间,但不存入确定的数据。 =∶等号伪指令——符号定义。对符号进行定义和赋值,功能与 EQU相似,但允许(重复)再定义。 :∶修改属性运算符(操作符)——段操作符。用来临时给变量、标号或地址表达式指定一个段属性(不用缺省的段寄存器),自动生成一个“跨段前缀字节”。注意,段寄存器CS和ES不能被跨越,堆栈操作时也不能跨越SS。 ;∶注释符号。 %∶特殊宏操作符,用来将其后的表达式(通常是符号常数,不能是变量名和寄存器名)转换成它所代表的数值,并将此数值的ASCII码嵌入到宏扩展中。 ( )∶1.运算符——用来改变运算符的优先级别。2.教材符号,表示括号内存储单元(或寄存器)的内容。 < >∶宏调用时用来将带间隔符(如空格,逗号等)的字符串(作为实参)括起来。 [ ]∶1.运算符。方括号括起来的数是数组变量的下标或地址表达式。带方括号的地址表达式必须遵循下列原则,①只有BX、BP、SI、DI这四个寄存器可在方括号内出现;②BX或BP可单独出现在各方括号中,也可以与常数、SI或DI一起出现在方括号内,但不允许BX和BP出现在同一个方括号内;③SI和DI可以单独出现在各方括号内,也可以与常数、BP或BX一起出现在方括号内,但不允许SI和DI出现在同一个方括号内;④一个方括号内包含多个寄存器时,它们只能作加法运算;⑤若方括号内包含基址指针BP,则隐含使用堆栈段寄存器SS提供段基址,否则均隐含使用数据段寄存器DS提供段基址。2.教材符号,表示其中的内容可省略。 .LIST∶伪指令。用于打开列表文件输出。

第三章8086CPU指令系统

第三章 8086CPU指令系统 本章重点: 1.寻址方式: 立即寻址,寄存器寻址,直接寻址,寄存器间接寻址,基址寻址,变址寻址,基址加变址寻址,串寻址,端口寻址,隐含寻址。 2.8086指令系统: 数据传送指令,算术运算指令,移位指令,程序控制指令,串操作指令,处理器控制指令,I/O指令,中断指令。 学习目标: 1.掌握寻址方式; 2.掌握常用指令的功能和用法。 难点: 区别指令的正确与错误。

§1.寻址方式 指令在存储器中是顺序存放的,而操作数的存放没有规律,因此操作数的寻址方法相对比较复杂。 一、指令的基本格式 1.组成: 一条指令包括操作码和操作数两部分。 操作数:源操作数,目标操作数。 2.寻址方式: 寻找指令中操作数的方法。 3.操作数类型:(8086系统) 寄存器操作数,存储器操作数,立即数(在指令代码中)和I/O端口操作数。 二、寻址方式 1.立即数寻址 ⑴方式: 指令中所需的操作数直接包含在指令代码中(即由指令直接提供),立即数可以是8位,也可以是16位。 例:MOV AL,80H ;将十六进制数80H送入AL MOV AX,1090H;将1090H送AX:90H→AL ,10H→AH ⑵说明: ●采用立即数寻址方式的指令主要用来对寄存器赋值。因为操作数可以从 指令中直接取得,不需要运行总线周期,所以,其显著特点就是速度快。 ●规定:立即数只能是整数,不能是小数,变量或者其他类型的数据;另 外,立即数只能作为源操作数。 2.寄存器寻址 ⑴方式: 如果操作数就在CPU的内部寄存器中,那么寄存器名可在指令中指出,这种寻址方式就叫寄存器寻址。 对16位操作数来说,寄存器可以为AX,BX,CX,DX,SI,DI,SP或BP,而对8位操作数来说寄存器可以为AH……DH,AL……DL。 例:INC CX ;将CX内容加1

习题3-8086指令系统

习题三8086指令系统 主要内容:8086指令系统。主要介绍8086的基本数据类型、寻址方式和指令系统,重点掌握8086指令系统的寻址方式、堆栈操作指令、算术运算指令及其对标志位的影响,串操作指令,控制传送指令。 1.单选题: (1)执行下面指令序列后,结果是(A)。 MOV AL,82H CBW A、(AX)=0FF82H B、(AX)=8082H C、(AX)=0082H D、(AX)=0F82H (2)与MOV BX,OFFSET VAR指令完全等效的指令是(D )。 A、MOV BX,VAR B、LDS BX,VAR C、LES BX,VAR D、LEA BX,VAR (3)编写分支程序,在进行条件判断前,可用指令构成条件,其中不能形成条件的指令有(D )。 A、CMP B、SUB C、AND D、MOV (4)下面指令执行后,改变AL寄存器内容的指令是(D )。 A、TEST AL,02H B、OR AL,AL C、CMP AL,B D、AND AL,BL (5)设DH=10H,执行NEG DH指令后,正确的结果是(D )。 A、(DH)=10H,CF=1 B、(DH)=0F0H,CF=0 C、(DH)=10H,CF=0 D、(DH=0F0H,CF=1 (6)设DS=8225H,DI=3942H,指令NEG BYTE PTR[DI]操作数的物理地址是(A )。 A、85B92H B、86192H C、BB690H D、12169H (7)下列指令中,执行速度最快的是(C )。 A、MOV AX,100 B、MOV AX,[BX] C、MOV AX,BX D、MOV AX,[BX+BP] 2.8086 CPU执行如下指令后的结果,以及标志SF、AF、CF、OF的值。 (1)MOV AL,0110 0100B SUB AL,58H ;(AL)=0CH,AF=1 DAS ;(AL)=06H, AF=1 ADD AL,89H ;(AL)=8FH, AF=0 DAA ;(AL)=95H,AF=1,SF=1 结果: (AL)=95H, SF=1, AF=1, CF=0, OF=0 (2)MOV AL,05H MOV BL,09H MUL BL ;(AX)=002DH, SF、AF、CF、OF=0 AAA ; (AX)=0103H ;AAM ; ; (AX)=0405H 结果: (AX)=0103H, CF=1 , SF=0、AF=1、OF=0 3.分析执行下列指令序列后的结果: MOV AL,10110101B AND AL,00011111B ;(AL)=0001 0101B OR AL,11000000B ;(AL)=1101 0101B XOR AL,00001111B ;(AL)=1101 1010B NOT AL ;(AL)=0010 0101B 4.假设(AL)=10101111B,CF=0,CL=2,写出分别执行下列指令后的结果以及标志位CF、ZF、OF的值。 (1)SHL AL,CL ;(AL)=1011 1100B, CF=0、ZF=0、OF=1 (2)SHR AL,CL ;(AL)=0010 1011B, CF=1、ZF=0、OF=0 (3)SAR AL,CL ;(AL)=1110 1011B, CF=1、ZF=0、OF=0 (4)ROL AL,CL ;(AL)=1011 1110B, CF=0、ZF=0、OF=1 (5)RCR AL,CL ;(AL)=1011 1101B, CF=0、ZF=0、OF=1 5.设(IP)= 3D8FH,(CS)=4050H,(SP)=0F17CH,当执行CALL 2000:0094H后,试求出IP、CS、SP的

8086指令整理v0.95

8086/8088指令小结 一、数据传送指令 通用传送指令 基本传送指令 MOV dst, src;要类型匹配;不能同时为存储器操作数 ;立即数,CS,IP不能作为目的 ;不能给段寄存器赋立即数,段寄存器间不能直接赋值数据交换指令 XCHG dst, src;使源与目的互换;要类型匹配 ;不能同时为存储器操作数,段寄存器不能参加交换堆栈操作指令 PUSH src;将16位操作数压入栈顶,SP=SP-2,不能压立即数 POP dst;从堆栈弹出一个字送至目的,SP=SP+2,dst不能为立即数查表转换指令 XLAT src-tabel;src-tabel表的表首地址应先放入BX,表中元素序号送AL ;查询后结果存于AL,可以段超越,如XLAT ES:src-tabel 输入输出指令 输入指令IN IN ac, port;从一个端口输入一个字节或字到累加器(ac)输出指令OUT;对于IN和OUT,间接寻址时,地址只能装在DX中OUT port, ac;执行与IN相反的操作。 地址传送指令 取有效地址指令LEA LEA reg, src;送指定存储器的16位偏移地址到16位通用寄存器指针送寄存器和DS的指令LDS LDS reg, src;32位地址,段地址放入DS,偏移地址放入reg 指针送寄存器和ES的指令LES LES reg, src;32位地址,段地址放入ES,偏移地址放入reg 标志位传送指令 取标志位Load AH Flag对标志位无影响 LAHF;将SF、ZF、AF、PF、CF存入AH的7、6、4、2、0位存标志位Save AH Flag明显对标志位有影响 SAHF;将AH的7、6、4、2、0位存入SF、ZF、AF、PF、CF 标志位入栈PUSHF;将16位标志位入栈保护 标志位出栈POPF;将栈顶字单元弹出到标志位

8086指令系统记忆表

数据寄存器分为: AH&AL=AX(accumulator):累加寄存器,常用于运算;在乘除等指令中指定用来存放操作数,另外,所有的I/O指令都使用这一寄存器与外界设备传送数据. BH&BL=BX(base):基址寄存器,常用于地址索引; CH&CL=CX(count):计数寄存器,常用于计数;常用于保存计算值,如在移位指令,循环(loop)和串处理指令中用作隐含的计数器. DH&DL=DX(data):数据寄存器,常用于数据传递。他们的特点是,这4个16位的寄存器可以分为高8位: AH, BH, CH, DH.以及低八位:AL,BL,CL,DL。这2组8位寄存器可以分别寻址,并单独使用。 另一组是指针寄存器和变址寄存器,包括: SP(Stack Pointer):堆栈指针,与SS配合使用,可指向目前的堆栈位置; BP(Base Pointer):基址指针寄存器,可用作SS的一个相对基址位置; SI(Source Index):源变址寄存器可用来存放相对于DS段之源变址指针; DI(Destination Index):目的变址寄存器,可用来存放相对于ES 段之目的变址指针。指令指针IP(Instruction Pointer) 标志寄存器FR(Flag Register) OF(overflow flag) DF(direction flag) CF(carrier flag) PF(parity flag) AF(auxiliary flag) ZF(zero flag) SF(sign flag) IF(interrupt flag) TF(trap flag) 段寄存器(Segment Register) 为了运用所有的内存空间,8086设定了四个段寄存器,专门用来保存段地址: CS(Code Segment):代码段寄存器; DS(Data Segment):数据段寄存器; SS(Stack Segment):堆栈段寄存器; ES(Extra Segment):附加段寄存器。 第一部分:指令助记符: 一、数据传送指令

8086 8088指令系统记忆表

8086/8088指令系统记忆表 来自: [已注销]2011-10-21 22:44:12 在这之前,先说一下寄存器: 数据寄存器分为: AH&AL=AX(accumulator):累加寄存器,常用于运算;在乘除等指令中指定用来存放操作数,另外,所有的I/O指令都使用这一寄存器与外界设备传送数据. BH&BL=BX(base):基址寄存器,常用于地址索引; CH&CL=CX(count):计数寄存器,常用于计数;常用于保存计算值,如在移位指令,循环(loop)和串处理指令中用作隐含的计数器. DH&DL=DX(data):数据寄存器,常用于数据传递。他们的特点是,这4个16位的寄存器可以分为高8位: AH, BH, CH, DH.以及低八位:AL,BL,CL,DL。这2组8位寄存器可以分别寻址,并单独使用。 另一组是指针寄存器和变址寄存器,包括: SP(Stack Pointer):堆栈指针,与SS配合使用,可指向目前的堆栈位置; BP(Base Pointer):基址指针寄存器,可用作SS的一个相对基址位置; SI(Source Index):源变址寄存器可用来存放相对于DS段之源变址指针; DI(Destination Index):目的变址寄存器,可用来存放相对于ES 段之目的变址指针。 指令指针IP(Instruction Pointer) 标志寄存器FR(Flag Register) OF(overflow flag) DF(direction flag)

CF(carrier flag) PF(parity flag) AF(auxiliary flag) ZF(zero flag) SF(sign flag) IF(interrupt flag) TF(trap flag) 段寄存器(Segment Register) 为了运用所有的内存空间,8086设定了四个段寄存器,专门用来保存段地址:CS(Code Segment):代码段寄存器; DS(Data Segment):数据段寄存器; SS(Stack Segment):堆栈段寄存器; ES(Extra Segment):附加段寄存器。 第一部分:指令助记符: 一、数据传送指令 1.通用数据传送指令 MOV(Move)传送 PUSH(Push onto the stack)进栈 POP(Pop from the stack)出栈 XCHG(Exchange)交换

Intel8086ASMCode汇编指令的机器码

8086指令码汇总表 8086指令有汇编语言指令和指令码两种形式,汇编语言指令形式经过汇编程序处理后生成指令码形式。 通过指令码形式可帮助理解汇编语言指令格式的含义和用法。 O、8086指令码格式 0B/1B 1B或2B 0B/1B 0B/1B/2B/4B 0B/1B/2B/4B 指令前缀操作码段寻址方式段偏移量参数立即数参数说明:偏移量参数和立即数参数的有无由寻址方式段决定。 一、传送类指令 MOV指令 REG/MEM→/←REG 100010dw mod reg r/m IMME→REG/MEM 1000111w mod 000 r/m data data if w=1 IMME→REG 1011wreg data data if w=1 MEM→AX 1010000w addr-low addr-high AX→MEM 1010001w addr-low addr-high REG/MEM→段REG 10001110 mod reg r/m 8E 段REG→REG/MEM 10001100 mod reg r/m 8C PUSH指令 REG/MEM 11111111 mod 110 r/m FF REG 01010reg 段REG 000reg110 POP指令 REG/MEM 10001111 mod 000 r/m 8F REG 01011reg 段REG 000reg111 XCHG指令 REG/MEM←→REG 1000011w mod reg r/m REG←→AX 10010reg XLAT指令11010111 D7 LEA指令10001101 mod reg r/m 8D LDS指令11000101 mod reg r/m C5 LES指令11000100 mod reg r/m C4 LAHF指令10011111 9F SAHF指令10011110 9E PUSHF指令10011100 9C POPF指令10011101 9D

8086与8051指令对比

8086指令集 一、数据传输指令 作用:它们在存贮器和寄存器、 寄存器和输入输出端口之间传送数据. 1. 通用数据传送指令. MOV 传送字或字节. MOVSX 先符号扩展,再传送. MOVZX 先零扩展,再传送. PUSH 把字压入堆栈. POP 把字弹出堆栈. PUSHA 把 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,E CX,EAX 依次弹出堆栈. BSWAP 交换32位寄存器里字节的顺序 XCHG 交换字或字节.( 至少有一个操作数为寄存器,段寄存器不可作为操作数) CMPXCHG 比较并交换操作数.( 第二个操作数必须为累加器AL/AX/EAX ) XADD 先交换再累加.( 结果在第一个操作数里 ) XLAT 字节查表转换. BX 指向一张 256 字节的 表的起点, AL 为表的索引值 (0-255,即 0-FFH); 返回 AL 为查表结果. ( [BX+AL]-> AL ) 2. 输入输出端口传送指令. IN I/O 端口输入. ( 语法: IN 累加器, {端口号│DX} ) OUT I/O 端口输出. ( 语法: OUT {端口号│DX},累加器 ) 输入输出端口由立即方式 指定时, 其范围是 0-255; 由寄存器 DX 指定时,其范围是 0-65535. 3. 目的地址传送指令. LEA 装入有效地址. 例: LEA DX,string ;把偏移地址存到DX. LDS 传送目标指针,把指针内容装入DS. 例: LDS SI,string ;把段地址:偏移地址存到DS:SI. LES 传送目标指针,把指针内容装入ES. 例: LES DI,string ;把段地址:偏移地址存到ESI. LFS 传送目标指针,把指针 内容装入FS. 例: LFS DI,string ;把段地址:偏移地址存到FSI. LGS 传送目标指针,把指针内容装入GS. 例: LGS DI,string ;把段地址:偏移地址存到GSI. LSS 传送目标指针,把指针内容装入SS. 例: LSS DI,string ;把段地址:偏移地址存到SS I. 4. 标志传送指令. LAHF 标志寄存器传送,把标志装入AH. SAHF 标志寄存器传送,把AH 内容装入标志寄存器. PUSHF 标志入栈. POPF 标志出栈. PUSHD 32位标志入栈. POPD 32位标志出栈. 二、算术运算指令 ADD 加法. ADC 带进位加法. INC 加 1. AAA 加法的ASCII 码调 整. DAA 加法的十进制调整. SUB 减法. SBB 带借位减法. DEC 减 1. NEC 求反(以 0 减之). CMP 比较.(两操作数作减

8086指令集

8086指令集 一、数据传送指令 1.通用数据传送指令 MOV(Move)传送 PUSH(Push onto the stack)进栈 POP(Pop from the stack)出栈 XCHG(Exchange)交换 .MOV指令 格式为: MOV DST,SRC 执行的操作:(DST)<-(SRC) .PUSH进栈指令 格式为:PUSH SRC 执行的操作:(SP)<-(SP)-2 ((SP)+1,(SP))<-(SRC) .POP出栈指令 格式为:POP DST 执行的操作:(DST)<-((SP+1),(SP)) (SP)<-(SP)+2 .XCHG 交换指令 格式为:XCHG OPR1,OPR2 执行的操作:(OPR1)<-->(OPR2) 2.累加器专用传送指令 IN(Input) 输入 OUT(Output) 输出 XLAT(Translate) 换码 这组指令只限于使用累加器AX或AL传送信息. .IN 输入指令 长格式为: 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 输出指令 长格式为: OUT PORT,AL(字节) OUT PORT,AX(字) 执行的操作: (PORT)<-(AL)(字节) (PORT+1,PORT)<-(AX)(字) 短格式为: OUT DX,AL(字节) OUT DX,AX(字) 执行的操作: ((DX))<-(AL)(字节) ((DX)+1,(DX))<-AX(字) 在IBM-PC机里,外部设备最多可有65536个I/O端口,端口(即外设的端口地址)为0000~FFFFH.其中前256个端口(0~FFH)可以直接在指令中指定,这就是长格式中的PORT,此时机器指令用二个字节表示,第二个字节就是端口号.所以用长格式时可以在指定中直接指定端口号,但只限于前256个端口.当端口号>=256时,只能使用短格式,此时,必须先把端口号放到DX寄存器中(端口号可以从0000到0FFFFH),然后再用IN或OUT指令来传送信息. .XLAT 换码指令 格式为: XLAT OPR 或: XLAT 执行的操作:(AL)<-((BX)+(AL)) 3.有效地址送寄存器指令 LEA(Load effective address)有效地址送寄存器LDS(Load DS with Pointer)指针送寄存器和DS LES(Load ES with Pointer)指针送寄存器和ES .LEA 有效地址送寄存器 格式为: LEA REG,SRC 执行的操作:(REG)<-SRC 指令把源操作数的有效地址送到指定的寄存器中. .LDS 指针送寄存器和DS指令 格式为: LDS REG,SRC 执行的操作:(REG)<-(SRC) (DS)<-(SRC+2) 把源操作数指定的4个相继字节送到由指令指定的寄存器及DS寄存器中.该指令常指定SI寄存器. .LES 指针送寄存器和ES指令 格式为: LES REG,SRC 执行的操作: (REG)<-(SRC) (ES)<-(SRC+2) 把源操作数指定的4个相继字节送到由指令指定的寄存器及ES寄存器中.该指令常指定DI寄存器. 4.标志寄存器传送指令 LAHF(Load AH with flags)标志送AH SAHF(store AH into flags)AH送标志寄存器PUSHF(push the flags) 标志进栈 POPF(pop the flags) 标志出栈 .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) 二、算术指令 1.加法指令 ADD(add)加法 ADC(add with carry)带进位加法 INC(increment)加1 .ADD 加法指令 格式: ADD DST,SRC 执行的操作:(DST)<-(SRC)+(DST) .ADC 带进位加法指令 格式: ADC DST,SRC 执行的操作:(DST)<-(SRC)+(DST)+CF .ADD 加1指令 格式: INC OPR 执行的操作:(OPR)<-(OPR)+1

相关文档