8086 8088数据传送指令
04 8088(8086)的指令系统
INC OPRD
操作数:通用寄存器、存储器 (不能是段寄存器或立即数) 执行的操作:OPRD OPRD + 1
功能: 用于在循环中修改地址指针及循环次数等。
注:该指令影响标志位
例: INC BX INC byte ptr [SI]
1. 先将SP所指单元内容 送至AL, 然后 SP+1SP ;
2. 再SP所指单元内容送 至AH, 然后 SP+1 SP
例:MOV AX,5678H POP AX
(3) 交换指令 XCHG OPRD1, OPRD2
在寄存器间或寄存器与存储器间交换信息(不允许使用段寄存器)。
源操作数: 寄存器、存储器 目的操作数:寄存器、存储器 执行的操作:( OPRD1) (OPRD2 )
DS=1000h
buffer 10100h 00 02 00 20
0100h BX
(2) LDS 把源操作数指定的内存的4个相继字节的内容送至指定寄存器及DS中
LDS REG, SRC
(REG) (SRC)
(DS) (SRC+2)
目的操作数
源操作数
(16位通用寄存器) (内存操作数)
• 该指令完成一个32位地址指针的传送; • 该指令通常指定 SI 作寄存器 REG。
• CPU内部寄存器之间的数据传送(除CS,IP外) MOV AL,BL MOV DX, DI MOV SI, BP MOV DS, BX MOV AX,DX
• 立即数传送到CPU内部通用寄存器组(AX,BX,CX,DX,BP,SP,DI,SI)
MOV CL, 4 MOV DX, 03FFH MOV DI, 04BFH
DST+SRC+C
8086 8088数据传送指令
AX=5678H
SP=1000H
例:MOV AX,5678H MOV SP,1000H PUSH AX
3条指令执行后 AX=5678H SP=0FFEH
微机原理
2.通用数据传送指令
(3)POP指令 格式: POP DST 功能: ( SRC) ← (SP+1,SP) , SP ←SP+2
微机原理
例:将CX寄存器内容送至DX。 MOV DX,CX
例:将AX的内容送至ES 。
MOV ES,AX
2.通用数据传送指令
CS
DS,SS,ES
AX,BX,CX,DX BP,SP,SI,DI
存 储 器
立即数
微机原理
例:将立即数2000H送至数据段 偏移地址为1000H单元的存储器。 方法1:MOV [1000H],2000H 方法2:MOV BX,1000H
1.基本情况
微机原理
数据传送指令 (1)通用数据传送指令 (2)累加器专用传送指令
用于寄存器、存储器单元、输入输 出端口之间传送数据或地址。
MOV PUSH、POP、XCHG
IN、 OUT、 XLAT
(3)地址传送指令
LEA、LDS、LEA
(4)状态标志寄存器传送指令 LAHF、SAHF、 PUSHF、 POPF
IN、 OUT、 XLAT
(3)地址传送指令
LEA、LDS、LEA
(4)状态标志寄存器传送指令 LAHF、SAHF、 PUSHF、 POPF
2.通用数据传送指令
(2)PUSH指令 格式: PUSH SRC
操作数需以字为单位
功能: SP ←SP-2,(SP+1,SP) ←( SRC)
微机原理
80868088指令系统
第4章 80x86指令系统
2. 地址指针装入 指令 地址指针装入DS指令 指令格式: 指令格式: LDS reg16, mem32 此指令的功能是将源操作数所对应的双字长的 内存单元中的高字内容(一般为16位段基址 送入DS, 位段基址) 内存单元中的高字内容(一般为 位段基址)送入 , 低字内容(一般为偏移地址) 低字内容(一般为偏移地址)送入指令所指定的寄存 器中。例如: 器中。例如: LDS DI, [2130H] DM
第4章 80x86指令系统
②间接寻址的输入指令 指令格式及操作: 指令格式及操作: IN acc, DX ;(acc) ←((DX)) ⑵ 输出指令 ①直接寻址的输出指令 指令格式及操作: 指令格式及操作: OUT port, acc ; (port) ← (acc) ②间接寻址的输出指令 指令格式及操作: 指令格式及操作: OUT DX, acc ; ((DX)) ← (acc)
第4章 80x86指令系统
⑵ 弹出堆栈指令 指令格式及操作: 指令格式及操作: POP dst ; (dst) ←((SP)+1:(SP)), (SP) ←(SP)+2 dst 目的操作数可以是寄存器操作数和存储器操作 且必须是16位的操作数 但不能是立即数。 位的操作数, 数,且必须是 位的操作数,但不能是立即数。 3.交换指令 交换指令 指令格式及操作: 指令格式及操作: XCHG opr1, opr2
;(opr1) ←→ (opr2)
第4章 80x86指令系统
(二) 累加器专用指令 二 这类指令中的一个操作数必须是累加器。 这类指令中的一个操作数必须是累加器 。 累加 器操作数可以是8位的 也可以是16位的 位的, 位的。 器操作数可以是 位的,也可以是 位的。 1.输入 输出指令 输入/输出指令 输入 输入输出指令可以分为两大类: 输入输出指令可以分为两大类 : 一类是直接端 口地址的输入/ 输出指令: 一类是通过DX寄存器间 口地址的输入 / 输出指令 : 一类是通过 寄存器间 接端口地址的输入/输出指令。 接端口地址的输入/输出指令。 ⑴ 输入指令 ①直接寻址的输入指令 指令格式及操作: 指令格式及操作: IN acc, port ;(acc) ←(port)
第3章 8086 8088指令系统
字节2
6 5 4 3 2 1 0 7· · · 0 7· · · · ·0 7· · · · · 0 7· · · · · 0 DISPH DATAL DATAH
OP code
D w MOD REG R/M DISPL
操作码字节 寻址方式字节 位移量 立即数 •OP code为操作码,表示该指令要完成的操作。 为操作码, OP code为操作码 表示该指令要完成的操作。 •D=0:第一个操作数是目的操作数, 1:第二个操作数是目的操作数 D=0: 是目的操作数, 第二个操作数是目的操作数 D=0 第一个操作数是目的操作数 •W=0:8位操作数, 1:16位操作数 W=0: 位操作数, 16位操作数 W=0 •MOD指明寻址方式: MOD=11 寄存器寻址 MOD指明寻址方式 MOD指明寻址方式: MOD= MOD≠11存储器寻址 MOD≠11存储器寻址 00没有偏移量 1016 16位偏移量 00没有偏移量 01 8位偏移量 1016位偏移量 •REG用编码方式指明操作中所使用的寄存器。 REG用编码方式指明操作中所使用的寄存器 REG用编码方式指明操作中所使用的寄存器。 •R/M用编码方式指出存储器有效地址计算方法。 R/M用编码方式指出存储器有效地址计算方法 R/M用编码方式指出存储器有效地址计算方法。 •DISP表示地址偏移量。DATA则指明立即数。 DISP表示地址偏移量 则指明立即数。 DISP表示地址偏移量。DATA则指明立即数
DATA
操作码 00 02
DS : 80000 BX: 1000 DI: + 2000 DATA: + 0200 83200H
AX 30 40
码 段
40 30
83200 83201
数 据 段
80868088的指令系统(通用数据传送指令)
通用数据传送指令
PUSH 和 POP指令 • 基本格式和功能
• •
指令格式:
PUSH POP SRC DEST
执行的操作: PUSH 压入。源操作数进栈至栈顶。“先减再压”
(SP) ← (SP)-2 SS:((SP),(SP)+1) ← (SRC)
POP 弹出。栈顶出栈到目的操作数。“先弹再加” (DEST) ← SS:((SP),(SP)+1) (SP) ← (SP)+2
通用数据传送指令
PUSH 和 POP指令 • 基本格式和功能
• •
与标志的关系:
与各标志位无关,不影响标志位
寻址方式: PUSH mem / reg POP mem / reg
注意: 操作数一律为16位操作数。允许使用段寄存器,但 POP操作数不允许为CS。可以使用除立即数以外的任 何数据寻址方式。
通用数据传送指令
MOV 指令 • 例子
• reg ←→reg
MOV DH, AL MOV DS, AX
• r ←→m
MOV DL, DA_BYTE MOV DL, [SI] MOV AX, DA_WORD
通用数据传送指令
MOV 指令 • 例子
• m →m
MOV DL, DA_BYTE1 MOV DA_BYTE2, DL
传送实质上是复制,对源操作数无影响。 16位数据的传送遵循地址“高对高,低对低”的原
则。这个原则不仅对MOV指令适用,对所有的传送 皆适用。
通用数据传送指令
MOV 指令 • 例子
• 立即数→r/m
MOV CL, 05H MOV AX, 1234H MOV ADDR, 12H MOV ADDR, 1234H
8086CPU中的数据传送类指令
8086CPU 中的数据传送类指令数据传送类指令注意点1. 除 SAHF 、POPF 指令外,其余传送类指令CPU 执⾏后,对6个状态标志均⽆影响。
也就是说,除 SAHF 、POPF 指令外,CPU 只是做了数据传送,并没有进⾏数据运算,对状态标志位⽆影响。
2. 语法规则1)⽴即数只能做源操作数2)类型⼀致3)类型明确4)当ES 、DS 、SS 做⽬的操作数时,源操作数不能是⽴即数。
5)CS 、IP 不能做⽬的操作数6)两存储器单元之间不能直接操作数据传送类指令通⽤数据传送指令-MOVmov 指令的格式为取有效地址指令-LEALEA 指令的格式为REG_16表⽰⼀个16位寄存器,理论上只要是16位即可,但是因为存放有效地址,所以最好是 BX 、BP 、SI 、DIMEM 是5种存储器寻址⽅式之⼀指明的⼀个存储器单元。
例如等同于功能⼀样。
取地址指针指令-LDS 、LES这两个指令是将双字变量MEM 内容中的⾼16位送⼊DS/ES ,低16位送⼊指定的REG16中。
这⾥REG16不允许为段寄存器。
不常⽤,了解。
以LDS 为例,格式为REG_16表⽰⼀个16位寄存器MEM 是5种存储器寻址⽅式之⼀指明的⼀个存储器单元例如得到地址指针,就可以很容易取数据MOV DST ,SRCLEA REG_16,MEMLEA BX ,data1 ;data1是变量,直接寻址找到这个存储单元把有效地址送给BXMOV BX ,OFFSET data1LDS REG_16,MEMTABLE DB 10H ,20H...LDS BX ,TABLE ;TABLE 的段地址->(DS ),TABLE 的偏移地址->(BX)Processing math: 100%MOV DX,[BX]实际中LEA⽤的⽐较多。
标志传送指令-LAHF、SAHF指令LAHF(load AH register from flags)可以将PSW寄存器中的低8位传送到AH中,指令SAHF(store AH register from flags)可以将AH 的内容传送到PSW寄存器中的低8位。
8086指令系统
8086/8088的指令系统8086/8088指令系统有133条指令,共6组,功能较强数据传送指令串处理指令算术指令控制转移指令逻辑指令处理机控制指令一、数据传送指令1、基本传送指令MOV X, Y;X←Y2、堆栈操作指令PUSH 源;将源操作数推入堆栈POP 目的;将当前SP所指向的堆栈顶部的一个字传送到指定目的操作数中对标志寄存器进行堆栈操作PUCHFPOPF3、交换指令XCHG X,Y ;X←→Y,RR←→[MEM],RR’将一个字或字节的源操作数目的操作数相交换4、换码指令XLAT (OPR);AL←[BX+AL] 将一个字节从一种代码转换成另一种代码5、LDS RR,[MEM] ;RR←[MEM],DS←[MEM+2]该指令RR常用SI,它是将地址指针送寄存器和DS。
6、LES RR,[MEM];RR←[MEM],ES←[MEM+2],指针送寄存器和ES,该指令RR常用DI。
7、LEA RR,[MEM];RR←MEM的有效地址。
8、LAHF;AH←PSW的低字节,AH←PSWL 标志传送指令SAHF;PSWL←AH9、输入输出指令输入指令输出指令IN AC,DX OUT DX,ACIN AC,PORT OUT PORT,AC二、算术运算指令1、加/减指令a.不带进位位的加/减指令ADD X,Y;X←X+YSUB X,Y;X←X-Yb. 带进位位的加/减指令ADC X,Y;X←X+Y+CFSBB X,Y;X←X-Y-CFc. 加1/减1指令INC Z ;Z←Z+1 对目的操作数加1,结果送回目的操作数DEC Z ;Z←Z-12、比较指令CMP X,Y ;X-Y,X,Y的定义与前相同注意:X-Y的差不送回X,但影响标志位。
3、求补指令NEG Z;Z←0-Z将目的操作数每一位求反后加1,包括符号位。
结果送入目的地址4、乘法指令MUL Z;无符号数乘法IMUL Z;带符号数乘法①AX←AL*Z,Z为单字节数,单字节乘法;②DXAX←AX*Z,Z为双字节数,双字节乘法5、除法指令DIV Z;无符号数除法Z;无符号数出法AX÷Z,AH←余数,AL←商,16位÷8位②DXAX÷Z,DX←余数,AX←商,32位÷16位6、扩展指令CBW ;把AL的符号位(D7)扩展到AH,字节扩展;CBD ;把AX的符号位(D15)扩展到DX,使AX扩展扩展成双字扩展指令多用于带符号数运算,被扩展数的符号位为0,则所扩展的寄存器每位为0,被扩展数的符号位为1,扩展寄存器的每位为1。
8086(8088)指令手册
ADC d,s
;d←d+s+CF
带进位加法。
指令的操作过程与ADD指令基本相同,惟一的不同是进位标志位CF的原状态也将一起参与加法运算,待运算结束,CF将重新根据结果置成新的状态。
IN AL,DX;AL←(端口(DX))
IN AX,DX;AX←(端口(DX))
注意:I/O指令只能用累加器作为执行I/O数据传送的机构,而不能用其他寄存器代替。另,当用直接I/O指令时,寻址范围仅为0~255,这适用于较小规模的微机系统;当需要寻址大于255的端口地址时,则必须用间接寻址的I/O指令。例如,在IBM PC/XT微机系统中,既用了0~255范围的端口地址,也用了255~65535范围的端口地址。
IMUL s
有符号乘法指令,它完成两个带符号的8/16位二进制相乘的功能。
对于两个带符号的数相乘,如果简单采用与无符号数乘法相同的操作过程,那么会产生完全错误的结果。为此,专门设置了IMUL指令。
IMUL指令除计算对象是带符号二进制数以外,其他都与MUL是一样的,但结果不同。
IMUL指令对OF和CF的影响是:若乘积的高一半是低一半的符号扩展,则OF=CF=0;否则均为1。它仍然可用来判断相乘的结果中高一半是否含有有效数值。另外,IMUL指令对其他标志位没有定义。
表三、数据寄存器的隐含使用………………………………………………第19页
表四、标志寄存器……………………………………………………………第20页
8086/8088指令分类
8086/8088的指令按功能可分为6类:数据传送、算术运算、逻辑运算、串操作、程序控制和CPU控制。
8086 8088 汇编 指令 手册
8086 8088 汇编指令手册一、常用指令二、算术运算指令三、逻辑运算指令四、串指令五、程序跳转指令------------------------------------------计算机寄存器分类简介:32位CPU所含有的寄存器有:4个数据寄存器(EAX、EBX、ECX和EDX)2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP)6个段寄存器(ES、CS、SS、DS、FS和GS)1个指令指针寄存器(EIP) 1个标志寄存器(EFlags)1、数据寄存器数据寄存器主要用来保存操作数和运算结果等信息,从而节省读取操作数所需占用总线和访问存储器的时间。
32位CPU有4个32位的通用寄存器EAX、EBX、ECX和EDX。
对低16位数据的存取,不会影响高16位的数据。
这些低16位寄存器分别命名为:AX、BX、CX和DX,它和先前的CPU中的寄存器相一致。
4个16位寄存器又可分割成8个独立的8位寄存器(AX:AH-AL、BX:BH-BL、CX:CH-CL、DX:DH-DL),每个寄存器都有自己的名称,可独立存取。
程序员可利用数据寄存器的这种“可分可合”的特性,灵活地处理字/字节的信息。
寄存器EAX通常称为累加器(Accumulator),用累加器进行的操作可能需要更少时间。
可用于乘、除、输入/输出等操作,使用频率很高;寄存器EBX称为基地址寄存器(Base Register)。
它可作为存储器指针来使用;寄存器ECX称为计数寄存器(Count Register)。
在循环和字符串操作时,要用它来控制循环次数;在位操作中,当移多位时,要用CL来指明移位的位数;寄存器EDX称为数据寄存器(Data Register)。
在进行乘、除运算时,它可作为默认的操作数参与运算,也可用于存放I/O的端口地址。
在16位CPU中,AX、BX、CX和DX不能作为基址和变址寄存器来存放存储单元的地址,在32位CPU中,其32位寄存器EAX、EBX、ECX和EDX不仅可传送数据、暂存数据保存算术逻辑运算结果,而且也可作为指针寄存器,所以,这些32位寄存器更具有通用性。
8086、8088指令大全
8086/8088指令系统记忆表——10月28日第二次更新我现将指令系统中各种助记符的英文全名写出来,各种助记符的记忆就会变得很简单o(∩_∩)o...一、数据传送指令1.通用数据传送指令MOV(Move)传送PUSH(Push onto the stack)进栈POP(Pop from the stack)出栈XCHG(Exchange)交换2.累加器专用传送指令IN(Input) 输入OUT(Output) 输出XLAT(Translate) 换码3.有效地址送寄存器指令LEA(Load effective address) 有效地址送寄存器LDS(Load DS with Pointer) 指针送寄存器和DSLES(Load ES with Pointer) 指针送寄存器和ES4.标志寄存器传送指令LAHF(Load AH with flags) 标志送AHSAHF(store AH into flags) AH送标志寄存器PUSHF(push the flags) 标志进栈POPF(pop the flags) 标志出栈二、算术指令1.加法指令ADD(add) 加法ADC(add with carry) 带进位加法INC(increment) 加12.减法指令SUB(subtract) 减法SBB(subtract with borrow) 带借位减法DEC(Decrement) 减1NEG(Negate) 求补CMP(Compare) 比较3.乘法指令MUL(Unsigned Multiple) 无符号数乘法IMUL(Signed Multiple) 带符号数乘法4.除法指令DIV(Unsigned divide) 无符号数除法IDIV(Signed divide) 带符号数除法CBW(Convert byte to word) 字节转换为字CWD(Contert word to double word) 字转换为双字三、逻辑指令1.逻辑运算指令AND(and) 逻辑与OR(or) 逻辑或NOT(not) 逻辑非XOR(exclusive or) 异或TEST(test) 测试2.移位指令SHL(shift logical left) 逻辑左移SAL(shift arithmetic left) 算术左移SHR(shift logical right) 逻辑右移SAR(shift arithmetic right) 算术右移ROL(Rotate left) 循环左移ROR(Rotate right) 循环右移RCL(Rotate left through carry) 带进位循环左移RCR(Rotate right through carry) 带进位循环右移四、串处理指令1.重复前端指令REP(Repeat) 重复串操作直到(CX)=0为上REPE(Repeat when empty) 若(CX)=0,则退出,否则CX=CX+1;REPZ(Repeat when flag ) 若ZF=0,则退出,否则CX=CX+1;REPC(Repeat when carry flag)REPNE(Repeat when not empty)REPNZ(Repeat when not zero flag)REPNC(Repeat when not carry flag)2.串操作指令MOVSB (Move string of byte) 串传送指令MOVSW(Move string of word) 串传送指令CMPSB(Compare string of byte) 串比较指令CMPSW(Compare string of word) 串比较指令SCASB(Scan string of byte) 串搜索指令SCASW(Scan string of word) 串搜索指令STOSB(Store string of byte) 存串指令STOSW(Store string of word) 存串指令LODSB(Load string of byte) 取串指令LODSW(Load string of word) 取串指令CLD(Clear direction flag)该指令使DF=0,在执行串操作指令时可使地址自动增量; STD(Set direction flag) 该指令使DF=1,在执行串操作指令时可使地址自动减量. DAA(Decimal adjust after addition) 组合BCD码的加法调整指令DAS(Decimal adjust after substract) 组合BCD码的减法调整指令AAA(ASCII adjust after addition) 非压缩BCD码加法调成指令AAS(ASCII adjust after substract) 非压缩BCD码减法调成指令AAM(ASCII adjust after multiple) 非压缩BCD码乘法调成指令AAD(ASCII adjust after divid) 非压缩BCD码除法调成指令五、控制转移指令1.无条件转移指令JMP(jmp) 跳转指令2.条件转移指令(1)根据单个条件标志的设置情况转移JZ(或JE)(Jump if zero,or equal) 结果为零(或相等)则转移JS(Jump if sign) 结果为负则转移JNS(Jump if not sign) 结果为正则转移JO(Jump if overflow) 溢出则转移JNO(Jump if not overflow) 不溢出则转移JNP(或JPO)(Jump if not parity,or parity odd) 奇偶位为0则转移JP(或JPE)(Jump if parity,or parity even) 奇偶位为1则转移JB(或JNAE,JC)(Jump if below,or not above or equal,or carry)低于,或者不高于或等于,或进位位为1则转移JNB(或JAE,JNC)(Jump if not below,or above or equal,or not carry)不低于,或者高于或者等于,或进位位为0则转移(2)比较两个无符号数,并根据比较的结果转移JB(或JNAE,JC)JNB(或JAE,JNC)JBE(或JNA)(Jump if below or equal,or not above)低于或等于,或不高于则转移JNBE(或JA)(Jump if not below or equal,or above)不低于或等于,或者高于则转移(3)比较两个带符号数,并根据比较的结果转移JL(或LNGE)(Jump if less,or not greater or equal)小于,或者不大于或者等于则转移JNL(或JGE)(Jump if not less,or greater or equal)不小于,或者大于或者等于则转移JLE(或JNG)(Jump if less or equal,or not greater)小于或等于,或者不大于则转移JNLE(或JG)(Jump if not less or equal,or greater)不小于或等于,或者大于则转移(4)测试CX的值为0则转移指令JCXZ(Jump if CX register is zero) CX寄存器 3.循环指令LOOP(loop) 循环指令4.子程序CALL(call) 调用指令RET(return) 返回指令5.中断INT(interrupt)指令IRET(interrupt return) 从中断返回指令INTO(interrupt if overflow) 若溢出则中断六、处理机控制指令1.标志处理指令CLC(Clear carry) 进位位置0指令CF<-0CMC(Complement carry) 进位位求反指令CF<-CF STC(Set carry) 进位位置1指令CF<-1CLD(Clear direction) 方向标志置0指令DF<-0STD(Set direction) 方向标志置1指令DF<-1CLI(Clear interrupt) 中断标志置0指令IF<-0STI(Set interrupt) 中断标志置1指令IF<-02.其他处理机控制指令NOP(No Opreation) 无操作HLT(Halt) 停机WAIT(Wait) 等待ESC(Escape) 换码LOCK(Lock) 封锁。
8086_8088汇编语言指令集
8086_8088汇编语言指令集8086/8088汇编语言指令集数据传送指令集MOV功能: 把源操作数送给目的操作数语法: MOV 目的操作数,源操作数格式: MOV r1,r2MOV r,mMOV m,rMOV r,dataXCHG功能: 交换两个操作数的数据语法: XCHG格式: XCHG r1,r2 XCHG m,r XCHG r,mPUSH,POP功能: 把操作数压入或取出堆栈语法: PUSH 操作数POP 操作数格式: PUSH r PUSH M PUSH data POP r POP m PUSHF,POPF,PUSHA,POPA功能: 堆栈指令群格式: PUSHF POPF PUSHA POPALEA,LDS,LES功能: 取地址至寄存器语法: LEA r,m LDS r,m LES r,mXLAT(XLATB)功能: 查表指令语法: XLAT XLAT m算数运算指令ADD,ADC功能: 加法指令语法: ADD OP1,OP2 ADC OP1,OP2格式: ADD r1,r2 ADD r,m ADD m,r ADD r,data影响标志: C,P,A,Z,S,OSUB,SBB功能:减法指令语法: SUB OP1,OP2 SBB OP1,OP2格式: SUB r1,r2 SUB r,m SUB m,r SUB r,data SUB m,data 影响标志: C,P,A,Z,S,OINC,DEC功能: 把OP的值加一或减一语法: INC OP DEC OP格式: INC r/m DEC r/m影响标志: P,A,Z,S,ONEG功能: 将OP的符号反相(取二进制补码)语法: NEG OP格式: NEG r/m影响标志: C,P,A,Z,S,OMUL,IMUL功能: 乘法指令语法: MUL OP IMUL OP格式: MUL r/m IMUL r/m影响标志: C,P,A,Z,S,O(仅IMUL会影响S标志)DIV,IDIV功能:除法指令语法: DIV OP IDIV OP格式: DIV r/m IDIV r/mCBW,CWD功能: 有符号数扩展指令语法: CBW CWDAAA,AAS,AAM,AAD功能: 非压BCD码运算调整指令语法: AAA AAS AAM AAD影响标志: A,C(AAA,AAS) S,Z,P(AAM,AAD)DAA,DAS功能: 压缩BCD码调整指令语法: DAA DAS影响标志: C,P,A,Z,S位运算指令集AND,OR,XOR,NOT,TEST功能: 执行BIT与BIT之间的逻辑运算语法: AND r/m,r/m/data OR r/m,r/m/data XOR r/m,r/m/data TEST r/m,r/m/data NOT r/m影响标志: C,O,P,Z,S(其中C与O两个标志会被设为0) NOT指令不影响任何标志位SHR,SHL,SAR,SAL功能: 移位指令语法: SHR r/m,data/CL SHL r/m,data/CL SAR r/m,data/CL SAL r/m,data/CL影响标志: C,P,Z,S,OROR,ROL,RCR,RCL功能: 循环移位指令语法: ROR r/m,data/CL ROL r/m,data/CL RCR r/m,data/CL RCL r/m,data/CL影响标志: C,P,Z,S,O程序流程控制指令集CLC,STC,CMC功能: 设定进位标志语法: CLC STC CMC标志位: CCLD,STD功能: 设定方向标志语法: CLD STD标志位: DCLI,STI功能: 设定中断标志语法: CLI STI标志位: ICMP功能: 比较OP1与OP2的值语法: CMP r/m,r/m/data标志位: C,P,A,Z,OJMP功能: 跳往指定地址执行语法: JMP 地址JXX功能: 当特定条件成立则跳往指定地址执行语法: JXX 地址注:A: ABOVE,当C=0,Z=0时成立B: BELOW,当C=1时成立C: CARRY,当弁时成立CXZ: CX寄存器的值为0(ZERO)时成立E: EQUAL,当Z=1时成立G: GREATER(大于),当Z=0且S=0时成立L: LESS(小于),当S不为零时成立N: NOT(相反条件),需和其它符号配合使用O: OVERFLOW,O=1时成立P: PARITY,P=1时成立PE: PARITY EVEN,P=1时成立PO: PARITY ODD,P=0时成立S: SIGN,S=1时成立Z: ZERO,Z=1时成立LOOP功能: 循环指令集语法: LOOP 地址LOOPE(Z)地址LOOPNE(Z) 地址标志位: 无CALL,RET功能: 子程序调用,返回指令语法: CALL 地址RET RET n标志位: 无INT,IRET功能: 中断调用及返回指令语法: INT n IRET标志位: 在执行INT时,CPU会自动将标志寄存器的值入栈,在执行IRET时则会将堆栈中的标志值弹回寄存器字符串操作指令集MOVSB,MOVSW,MOVSD功能: 字符串传送指令语法: MOVSB MOVSW MOVSD标志位: 无CMPSB,CMPSW,CMPSD功能: 字符串比较指令语法: CMPSB CMPSW CMPSD标志位: C,P,Z,S,OSCASB,SCASW功能: 字符串搜索指令语法: SCASB SCASW标志位: C,P,Z,S,OLODSB,LODSW,STOSB,STOSW功能: 字符串载入或存贮指令语法: LODSB LODSW STOSB STOSW标志位: 无REP,REPE,REPNE功能: 重复前缀指令集语法: REP 指令S REPE 指令S REPNE 指令S标志位: 依指令S而定AT&T与Intel汇编语法的区别比较1. 前缀:在Intel的语法中,寄存器和立即数都没有前缀,但是在AT&T中,寄存器前冠以"%",而立即数前冠以"$"。
8086_8088_汇编_指令_手册
8086 8088 汇编指令手册通用寄存器(1)数据寄存器数据寄存器共有4个寄存器AX、BX、CX、DX,用来保存操作数或运算结果等信息。
AX寄存器称为累加器。
使用频度最高,用于算术、逻辑运算以及与外设传送信息等。
BX寄存器称为基址寄存器。
常用于存放存储器地址。
CX寄存器称为计数器。
一般作为循环或串操作等指令中的隐含计数器。
DX寄存器称为数据寄存器。
常用来存放双字数据的高16位,或存放外设端口地址。
(2)变址和指针寄存器变址和指针寄存器包括SI、DI、SP、BP 4个16位寄存器,主要用于存放某个存储单元的偏移地址。
SI是源变址寄存器。
DI是目的变址寄存器,在字符串操作中,SI和DI都具有自动增量或减量的功能。
SP为堆栈指针寄存器,用于存放当前堆栈段中栈顶的偏移地址。
BP为基址指针寄存器,用于存放堆栈段中某一存储单元的偏移地址。
2.段寄存器8086 CPU的4个16位的段寄存器分别称为代码段寄存器CS,数据段寄存器DS,堆栈段寄存器SS,附加数据段寄存器ES。
段寄存器用来确定该段在内存中的起始地址。
代码段用来存放程序的指令序列。
CS存放代码段的段首址,指令指针寄存器IP指示代码段中指令的偏移地址。
3.指令指针8086 CPU中的指令指针IP,它总是保存下一次将要从主存中取出指令的偏移地址,偏移地址的值为该指令到所在段段首址的字节距离。
在目标程序运行时,IP的内容由微处理器硬件自动设置,程序不能直接访问IP,但一些指令却可改变IP的值,如转移指令、子程序调用指令等。
3.1 标志寄存器8086 CPU中有一个很重要的16位标志寄存器,它包含9个标志位,主要用于保存一条指令执行后,CPU所处状态信息及运算结果的特征。
条件标志(1)进位标志CF (2)零标志ZF (3)符号标志SF (4)溢出标志 OF(5)奇偶标志 PF (6)辅助进位标志AF状态控制标志(1)方向标志DF (2)中断允许标志IF (3)追踪标志TF运算结果标志位1、进位标志CF(Carry Flag)进位标志CF主要用来反映运算是否产生进位或借位。
8086指令系统
8086/8088C PU指令系统分为6大类(传送指令、算术指令、逻辑运算和移位指令、串操作指令、程序控制指令、处理器控制指令)。
一、数据传送类指令数据传送类指令是指令系统中用得最多的一类指令,也是条数最多的一类指令(14条),常用于将原始数据、中间运算结果、最终结果及其他信息在CPU的寄存器和存储器之间进行传送。
根据功能的不同,数据传送类指令可分为:通用数据传送指令:M OV交换指令:X CHG堆栈操作指令:PUS H ,P OP地址传送操作指令:LEA,LDS,LES标志寄存器传送指令:LAHF,SAHF,PUS HF,P OPF累加器专用传送指令:IN,OU T,X LA T1.通用数据传送指令MOV 传送指令格式:M OV DS T,S RC执行的操作:(DST)(SRC)其中DST表示目的操作数,S RC表示源操作数。
功能:此指令把一个字节或一个字操作数从源传送到目的,源操作数内容未变,目的操作数内容和源操作数内容相同。
①从累加器送到存储器格式:M OV MEM,A C ;(mem) ac(ac表示AX,AH,A L)②从存储器送累加器格式:MOV AX,DISP[BP][SI];把地址SS×10H+(BP)+(S I)+DISP存储单元的内容送AX③从存储器或寄存器送到段寄存器格式:M OV se gre g,mem/reg ;se gr eg (mem/re g)其中se gr eg表示不包括CS的段寄存器(SS,DS,ES),本指令只能是字操作。
④从段寄存器到寄存器或存储器格式:M OV mem/reg,se gr eg ;(mem/re g) se gre g规定同③,但se gre g包括CS,即CS,SS,DS,ES。
⑤从寄存器到寄存器格式:M OV re g1,re g2;r eg1 re g2注:两个寄存器之间传送时,只能相同字长的寄存器之间传送,不能在不同字长寄存器之间传送。
80868088指令系统
80868088指令系统⽬录名称含义IM (Immediate)⽴即数REG (Register)寄存器操作数MEM (Memory)存储器操作数SEG (Segment)段寄存器(CS、DS、ES、SS)OPR (Operand)操作数OPS (Source Operand)源操作数OPD (Destination Operand)存储器操作数⼀、数据传送指令(⼀)通⽤数据传送指令(MOV、XCHG、PUSH、POP、PUSHA、POPA)1、通⽤数据传送指令:MOV指令格式:MOV OPD,OPS作⽤:将源操作数指定的内容传送到⽬的操作数,即 OPD<=(OPS),当指令执⾏完后,⽬的操作数原有的内容被源操作数内容覆盖,即⽬的操作数和源操作数具有相同内容注意事项:MOV指令可以是字节数据传送也可以是字数据传送,但是源操作数和⽬的操作数的长度必须⼀致⽴即数只能作源操作数,且不能传送给段寄存器段寄存器CS只能作源操作数,段寄存器之间不能直接传送存储单元之间不能直接传送数据MOV指令对标志寄存器的各位⽆影响(1)⽴即数传送到通⽤寄存器或存储单元⽴即数只能作为源操作数,⽴即数不能传送给段寄存器例:MOV AH,10HMOV AX, 2345HMOV M-BYTE, 64HMOV M-WORD,2364H(2)寄存器之间的传送段寄存器CS只能作源操作数,不能作⽬的操作数例:MOV AH,CHMOV DS, AXMOV ES, BXMOV AX,CSMOV CS, AX; 错误:段寄存器CS只能作源操作数,不能作⽬的操作数(3)寄存器与存储单元之间传送例:MOV AL,[SI]MOV [DI],AHMOV AX, 10[BX]MOV TABLE[BP], BXMOV DS, [SI][BX]MOV [BX], [BP][SI]; 错误:存储单元之间不能直接传送数据2、交换指令:XCHG指令格式:XCHG OPD,OPS作⽤:源操作数和⽬的操作数两者内容相互交换,即: (DEST)<=>(SRC)注意事项:数据交换可以在寄存器之间或寄存器与存储器单元之间进⾏数据交换不能在存储单元之间直接进⾏数据交换寄存器只能使⽤通⽤寄存器指令对标志寄存器各位⽆影响(1)寄存器之间数据交换例:XCHG AX,BXXCHG AH,CH例:两个存储单元(DA_BYTE1和DA_BYTE2)之间的数据交换可以使⽤以下三条指令来实现MOV AL,DA-BYTE1; AL <= (DA_BYTE1)XCHG AL,DA-BYTE2 ; (AL)<=>(DA-BYTE2)XCHG AL,DA-BYTE1 ; (AL)<=>(DA-BYTE1)或 MOV DA-BYTE1,AL; (DA_BYTE1)<=(AL)3、堆栈指令(1)进栈指令:PUSH指令格式:PUSH OPS作⽤:将寄存器、段寄存器或存储器中的⼀个字数据压⼊堆栈,堆栈指针减2即:(SP)-1 => SP 、(OPS)15⾄8 => ([SP])(SP)-1 => SP 、(OPS)7⾄0 => ([SP])注意事项:源操作数可以是CPU内部的16位通⽤寄存器、段寄存器和存储器操作数(所有寻址⽅式)进栈操作对象必须是16位数(2)出栈指令:POP指令格式:POP OPD作⽤:将栈顶数据弹出传送⾄某⼀寄存器、段寄存器(CS除外)或存储器,堆栈指针加2即:([SP]) => (OPD)7⾄0、(SP)+1 => SP([SP]) => (OPD)15⾄8、(SP)+1 => SP注意事项:CS段寄存器不可以存放⽬标操作数(3)所有寄存器进栈指令:PUSHA指令格式:PUSHA作⽤:16位通⽤寄存器依次进栈,次序为AX、CX、DX、BX,指令执⾏前的SP、BP、SI、DI。
8086指令
第3章
3.3.3 标志寄存器传送指令
8088/8086MPU的指令系统
标志寄存器传送(有四条标志传送指令) HF (Load AH from FLAG)读取标志指令
将标志寄存器中的 SF、ZF、AF、PF和CF(即低8位)传送至AH寄存器的指
定位,空位没有定义。 2.SAHF (Store AH to FLAG)设置标志指令
对堆栈有两种操作:入栈,出栈
①入栈,也叫压栈,是把一个16位数据推入栈中 压栈的操作顺序: SP 的内容先减 2 ,指示一个新的字单元 ,然后再把该压的字压入这个单元中。 例如:设AX内容为1234H,栈的数据为(SS)=2000H, (SP)=0108H,将AX内容压入堆栈。 由图可见,压栈前(SP)=0108H,压栈后(SP)=0106 H,SP永远指示栈顶。
功能:带进位的加法,将源操作数、目的操作数以及标志寄存器中的进位标 志位CF相加,并将和放入目的操作数中。 DSTSRC+DST+CF 格式3:INC OPR
功能:将目的操作数加1,放入目的操作数中. OPROPR+1
第3章
8088/8086MPU的指令系统
注意事项:
ADD和ADC指令是双操作数指令,它们的两个操作数不能
位。
• 2 、编写执行双精度数( DX,CX) 和( BX,AX) 相加的指令 序列。 • 3、写出25H*65H的运算指令序列。 • 4、用指令实现将AL的高4位清0.
CF
OF=1 1
乘积高一半不为0
对于IMUL,CF OF=0 0
乘积的高一半为低一半的符号 扩展.
CF OF=1 1 其他情况.
第3章
第3章 8086指令系统(2)
8086/8088指令系统按其功能分为以下类型:数 据传送指令、地址传送指令、标志寄存器传送 指令、算术运算指令、逻辑运算指令、移位指 令、控制转移指令、串操作指令、中断指令和 处理器控制指令。
一.数据传送指令
数据传送指令用于寄存器、存储单元、或输入
输出端口之间传送数据或地址。8086/8088有14
CMP AL,100
29
CMP指令执行后对标志位的影响
操作数类型
带符号的 二进制
CF ZF SF OF
两操作数的关系
01 0 0
等于
-010
小于
- 0 0 1 目的操作数 小于 源操作数
-000
大于
-011
大于
不带符号的 二进制
01 0 0
等于
10 -
- 目的操作数 低于 源操作数
00 -
-
高于
举例: n=8 bit 带符号数(-128~127), 无符号数(0~255)
PUSH AX
PUSH DX
78H
POP AX
56H
POP DX
34H
12H
9
(4)XCHG指令 格式:XCHG OP1,OP2 操作:源、目的操作数之间交换一个字节 或字的数据。源操作数或目的操作数只能 取通用寄存器或通用寄存器与存储器 例: XCHG AX,CX
XCHG AL,BL XCHG AX,[BP+DI]
中的数相乘,结果放在累加器中
乘积为双字节长时,结果放在AX中;乘积为双 字长时,分别放在DX(乘积的高16位)和AX中。 该指令的运行结果只影响标志位CF和OF 例:MOV AL,FIRST
MUL SECOND MOV THIRD,AX (2)IMUL指令 格式:IMUL SRC 该指令为带符号数相乘指令
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第3章 8086/8088指令系统数据传送指令(1)
MOV AX,1234H MOV AX,[1234H]
MOV AX,BX MOV AX,[BX]
MOV AX,[BX+02H] MOV AX,[BX+SI]
MOV AX,[BX+SI+02H]
请说出右边7条指令中源操作数的寻址方式
用于寄存器、存储器单元、输入输数据传送指令
出端口之间传送数据或地址。
(1)通用数据传送指令MOV、PUSH、POP、XCHG (2)累加器专用传送指令IN、 OUT、 XLAT
(3)地址传送指令LEA、LDS、LEA
(4)状态标志寄存器传送指令LAHF、SAHF、 PUSHF、 POPF
数据传送指令
用于寄存器、存储器单元、输入输
出端口之间传送数据或地址。
(1)通用数据传送指令MOV
PUSH、POP、XCHG
(2)累加器专用传送指令IN、 OUT、 XLAT
(3)地址传送指令LEA、LDS、LEA
(4)状态标志寄存器传送指令LAHF、SAHF、 PUSHF、 POPF
MOV 指令
格式: MOV DST, SRC
功能: DST ←(SRC ) ;将源操作数送至目的操作数地址
目的操作数地址
源操作数地址
源/目的操作数之间传送关系图:
CS
DS,SS,ES
存储器
立即数
AX ,BX ,CX ,DX BP ,SP ,SI ,DI
MOV 指令
格式: MOV DST, SRC 功能: DST ←(SRC )
目的操作数地址
源操作数地址
源/目的操作数之间传送关系图:
例:将DX 寄存器内容送至CX 。
MOV CX,DX
例:将立即数2000H 送至寄存器BX 。
MOV BX,2000H
例:将CX 寄存器内容送至DX 。
MOV DX,CX
例:将AX 的内容送至ES 。
MOV ES,AX
CS
DS,SS,ES
存储器 立即数
AX ,BX ,CX ,DX BP ,SP ,SI ,DI
微机原理
2.通用数据传送指令
CS
DS,SS,ES
存储器
立即数
AX ,BX ,CX ,DX BP ,SP ,SI ,DI
例:将立即数2000H 送至数据段
偏移地址为1000H 单元的存储器。
方法1:MOV [1000H],2000H
方法2:MOV BX,1000H MOV [BX],2000H 方法3:MOV BX,0FFEH MOV [BX+02H],2000H 方法4:MOV BX,0FFEH MOV SI,0002H
MOV [BX+SI],2000H 方法5:请你来写
微机原理
2.通用数据传送指令
CS
DS,SS,ES
存储器
立即数
AX ,BX ,CX ,DX BP ,SP ,SI ,DI
例:将1000H 送至ES 。
MOV AX,1000H
MOV ES,AX
微机原理第3章 8086/8088指令系统
数据传送指令(2)
微机原理1.基本情况
数据传送指令
用于寄存器、存储器单元、输入输
出端口之间传送数据或地址。
(1)通用数据传送指令MOV
PUSH、POP、XCHG
(2)累加器专用传送指令IN、 OUT、XLAT
(3)地址传送指令LEA、LDS、LEA
(4)状态标志寄存器传送指令LAHF、SAHF、 PUSHF、 POPF
微机原理
(2)PUSH 指令 格式: PUSH SRC
功能: SP ←SP -2,(SP+1,SP ) ←( SRC )
2.通用数据传送指令
操作数需以字为单位
例:MOV AX,5678H MOV SP,1000H PUSH AX
AX=5678H
SP=1000H
微机原理
例:MOV AX,5678H MOV SP,1000H PUSH AX 3条指令执行后AX=5678H SP=0FFEH
微机原理
(3)POP 指令 格式: POP DST
功能: ( SRC ) ← (SP+1,SP ) , SP ←SP+2
2.通用数据传送指令
例: POP BX
微机原理(4)XCHG指令
格式: XCHG OPR1,OPR2
功能:( OPR1)(OPR2)
2.通用数据传送指令
例: MOV AX,1234H
MOV BX,5678H
XCHG AX, BX
MOV [1000H],BX XCHG AH, AL
XCHG AX,[1000H]
AX 34H
12H
BX 78H
56H
AX 78H
56H BX 34H
12H DS:1000H 34H
12H BX 34H
12H AX 56H
78H
AX 34H
12H DS:1000H 56H
78H
其中1个操作数须是通用寄存器
微机原理第3章 8086/8088指令系统数据传送指令(3)
微机原理1.基本情况
用于寄存器、存储器单元、输入输数据传送指令
出端口之间传送数据或地址。
(1)通用数据传送指令MOV、PUSH、POP、XCHG
(2)累加器专用传送指令IN、 OUT、 XLAT
(3)地址传送指令LEA、LDS、LEA
(4)状态标志寄存器传送指令LAHF、SAHF、 PUSHF、 POPF
(1)IN 指令
格式功能寻址方式地址范围
IN AL,PORT AL (PORT)
直接I/O端口寻址00H~FFH IN AX,PORT AX (PORT+1,PORT)
IN AL,DX AL (DX)
间接I/O端口寻址0000H~FFFFH IN AX,DX AX (DX+1,DX)
(2)OUT 指令
格式功能寻址方式地址范围
OUT PORT, AL (PORT) AL
直接I/O端口寻址00H~FFH OUT PORT, AX (PORT+1,PORT) AX
OUT DX, AL (DX) AL
间接I/O端口寻址0000H~FFFFH OUT DX, AX (DX+1,DX) AX
例1:将端口地址为20H的键盘接口8位内容送至AL 中。
例2:将8位数34H送至端口地址为2000H的打印机中。
IN AL,20H
或 MOV DX,0020H
IN AL,DX
MOV DX,2000H MOV AL,34H OUT DX, AL
微机原理(3)XLAT指令
格式: XLAT
功能: AL←(BX+AL)
2.通用数据传送指令
例: MOV BX,1000H MOV AL,02H XLAT
BX 00H
10H AX 02H BX+AL=1002H AX 98H
格式功能名称
LEA REG,SRC REG SRC 有效地址传送指令
LDS REG,SRC REG (SRC)
DS (SRC+2) 指针送寄存器和DS
LES REG, SRC REG (SRC)
ES (SRC+2) 指针送寄存器和ES
例3:MOV SI,1000H
MOV [SI],1234H MOV [SI+2],5678H MOV [SI+4],9012H LEA BX, [SI]
LDS DI, [SI]
LES DI,[SI+2]
微机原理4.标志寄存器传送指令
格式功能
LAHF AH FLAG寄存器的低字节
SAHF FLAG寄存器的低字节 AH
PUSHF
SP SP-2 (SP+1,SP) FLAG
POPF FLAG (SP+1,SP) SP SP+2
微机原理下次课见。