8086 8088数据传送指令
- 格式:pdf
- 大小:2.77 MB
- 文档页数:24
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/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 汇编指令手册一、常用指令二、算术运算指令三、逻辑运算指令四、串指令五、程序跳转指令------------------------------------------计算机寄存器分类简介: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指令系统记忆表——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汇编语言指令集数据传送指令集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 汇编指令手册通用寄存器(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/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指令系统⽬录名称含义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。
第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
微机原理下次课见。