Click here to load reader
Upload
amayeta-johnson
View
358
Download
1
Embed Size (px)
DESCRIPTION
第三章 Intel-8086 的指令系统. 3-1 8086 的指令格式. 指令由 操作码 和 操作数 两部分字段组成。 如: MOV AX , 2345H MOV 为操作码; AX 和 2345H 为操作数。 操作码 指示计算机执行何种操作。 操作数 参加操作的数据对象或其所在的地址。. 8086 系列指令包括无操作数指令、单操作数指令和双操作数指令。 如 HLT ;无操作数指令 INC CX ;单操作数指令 - PowerPoint PPT Presentation
Citation preview
Intel-80863-1 8086 MOV AX2345H MOVAX2345H
8086 HLT INC CX ADD AX , BX
3-2 80861 )() MOV AL , 08H )() INC CX
)() I/O MOV AX[2500H] MOV AX, [BX] [2500][BX] DS
28086808661
MOV AL, 05H: (AL)=05HMOV AX, 3064H: (AX)=3064H
2) MOV BXAX MOV CL23H
3[] MOV AX[3100H]
MOV AX[3100H] DS=6000H (63100H)=3050H AX=3050H
(SSES) MOV AXES:[3100H]
4), BXSIDIBPSIDIBX DSBP SS
MOV BX[DI]DS=6000H DI=2000H62000H=50A0H (BX)=50A0H []
MOV AX, DS:[BP] MOV CH, SS:[SI] MOV ES:[BX], AL AL=B2HBX=1234H ES=1400H
SIDIBXBP816 MOV AH1000H[BX] MOV AH[BX+1000H] MOV 25H[BP] BX:[] [+]SIDIBXBP
6)BXBPSIDI816 [][] [++] MOV 10H[BX][SI]CX MOV [10H+BX+SI]CX BXBP
3-3 8086
3.3.1 11)MOVMOV DST,SRC;6SRCDST
MOV MOV [1000H] , [DI] MOV AX , [DI] MOV [1000H], AX MOV DS2000H MOV AX, 2000H MOV DS , AX
MOV ES , DS ; MOV BX , DS MOV ES , BXCSMOV CSAX ; MOV AXCS ;
()
2)(PUSH POP) (STACK) (Last In First OutLIFO)
PUSH PUSH src (SP) (SP) - 2 ((SP)+1,(SP)) (src) SPPUSH AX
AX=50A0HSP=2002HSS=6000H PUSH AXPUSH BXBX=0ABCDH
POPPOP dst ; (dst) ((SP)+1,(SP)) (SP) (SP)+2 SP POP BX POP AX
PUSH [2300H]PUSH CS POP CS
PUSH , POP CPUPUSH CS POP CS PUSH , (SP)-2 (SP)SPSP
3XCHG)XCHG dst , src(dst) (src)
2 1IN CPU IN AL, data88 IN AX, data88 IN AL, DX16 IN AX, DX 16
1 IN AL, 80H; 80H;2 MOV DX, 1020H; 16DX IN AX, DX; (DX)16
1CPU 8086CPU816
28086CPU CPUIO/MIO/M
MOV BX[1234H][1234H]BXCPUIO/M=0 MOV DX1234H DX IN AXDX[1234H] CPUIO/M=1
2OUT CPU OUT data8 , AL8 OUT data8, AX 8 OUT DX , AL16 OUT DX , AX 16
3 8086 : LEA LDS LES
1LEA (Load Effective Address) LEA reg16 , memReg16 16 mem 16
LEA AX[DI]DI=1005H LEA AX[DI]AX=1005H LEA BX[BX+SI+0F62H]BX=0400HSI=003CH BX+SI+ 0F62H =0400H+003CH+0F62H=139EHBX=139EH
2LDS (Load pointer using DS)()LDS reg16 , mem 4DS reg16mem DSmem+2
3LES (Load pointer using ES )()LES reg16 mem 4ES reg16mem ESmem+2
: (DS)=0C 000H LDS SI, [0010H]: (SI)=0180H (DS)=2000H
: (DS)=B 000H (BX)=080AH LES DI, [BX]: (DI)=05A2H (ES)=4000H
4 8086 1LAHFLoad AH into flagsLAHF AH AHPSW
2SAHFStore AH into Flags SAHF AH PSWAH
3PUSHFPush Flags PUSHF SPSP-2 SP+1SPPSW4POPFPop Flags POPF PSWSP+1SP SPSP+2
3.3.2 180865:ADD(Addition) ADC(Add with Carry)INC(Increment) 1AAA(ASCII adjust for addition)ASCII()DAA(Decimal adjust for addition)()
1ADDADD dest , src ; (dest) (dest)+(src)SrcdestADD CL,10ADD DX,SIADD AX, [2F00H]ADD 100H[BX], ALADD [DI], 30H
816 , 812812716(-32768 ~ +32767) O=1 82551665535 C=1, S,A,P,Z)
2ADC(Add with carry) ADC destsrc destdest+src+C C: C: ADD ADC CX, 300 ADC AL, BL ADC DX, [SI]
ADC 3212345678H0ABCDEFABHMOV AX, 1234HMOV BX, 5678HADD BX, 0EFABHADC AX, 0ABCDH
3 1 INC (Increment by 1 ) INC dest (dest)dest+1 dest : S, Z, A, P, OC
INC DL; 81 INC SI 161 INC [2100] INC WORD PTR [2100] 1PTR INC BYTE PTR [BX][SI]
2Subtraction) 80867: SUB(Subtraction) SBB(Subtraction with Borrow) DEC(Decrement by 1) 1CMP(Compare) NEG(Negate) ()AAS(ASCII Adjust for Subtraction) ASCII() DAS(Decimal Adjust for Subtraction) ()
1SUB(Subtraction) SUB: destsrc destdest-srcSrcDestSUB AL, 37HSUB BX, DX : ACOPSZ
2 SBB(Subtraction with borrow) SBB destsrc destdest-src-CSrcdest SBB BX, 100H SBB CX, DX SBB WORD PTR 100H[BP], 100
3 1 DEC (Decrement by 1 ) DEC dest (dest)dest-1 dest: S,Z,A,P,O;C
4NEG (Negate) NEG dest ; (dest) 0 - (dest) dest : : +1 ACOPSZC:0,C=0 ; C=1.O: 128 32768O=1; O=0.
5) CMP(Compare)CMP destsrc dest-src ACOPSZsrcdest CMP AL,0AH;CMP CX, DI;CMP AX, [1000H];CMP [BX+5], SI ;
1Z2C 3SO
1111 111125511000 0010130-1261111 1101253-31111 1111 +1000 0010 =1000 0001129-127 ; C=1 O=0 1111 1101+1000 00100111 1111127127C=1O1
3. 1MUL MUL SRC : AX (AL)*(SRC) DX:AX (AX)*(SRC) 2IMUL IMUL SRC MUL,
MUL BL ; AX (AL)*(BL) MUL BL ; AX (AL)*(BL) MUL BX; AX (AX)*(BX)16 DX (AX)*(BX)16 MUL AX;
41DIVDIV SRC AL (AX)/(SRC) AH (AX)/(SRC) AX (DX:AX)/(SRC) DX (DX:AX)/(SRC)
2IDIVIDIV SRC DIV
3CBW CBW Convert Byte to Word AL AH4 CWD CWD Convert Word to Double Word AXDX ALAX
5AAA BCDDAA BCDAAS BCDDAS BCDAAM AAD
3.3.3 ANDTESTORXOReXclusive OR) NOT
1 AND AND dest, src destdest src src: dest: AND AL, 0FH AND CX, DI AND SI, [2456H]
2TEST TEST dest , srcdestsrcsrcdestAND TEST BH, 7TEST SI , BPTEST DI , 1030H[BX]
3 OR OR dest, srcdest: src:
4 XOR XOR dest , src dest: src: 1, 0
5 NOT NOT dest
8SAL (Shift Arithmetic Left) SAR (Shift arithmetic right) SHL (Shift logical left) SHR (Shift logical right) ROL (Rotate left) ROR (Rotate right) RCL (Rotate left with carry) RCR (Rotate right with carry)
reg/mem, Count Count=1CL CL SHL AH,1 SAL SI, CL SAL WORD PTR[BX+5] , 1 ROL BH , 1 ROL DX , CL
1/SHL/SAL 2 MOV AH, 3FH (AH)=0011 1111B SAL AH, 1 (AH)=7EH MOV CL, 2 SAL AH,CL ; (AH)= F8H
2SHR SHR BL , 1SHR AX , CLSHR BYTE PTR [DI+BP], 1 2
3SAR MOV AL, 88H MOV CL2 SAR AL, CL AL=E2H
4ROL ROL BH , 1ROL DX , CLROL WORD PTR 12H[DI], 1
5CROR
6CRCL RCL BX , 1RCL DL , CL
7CRCR RCR DI, 1RCR SI , CL
3.3.4 80865 MOVSMove string CMPSCompare string SCASScan string LODSLoad from string STOS Store in to string
MOVS 2 (1) MOVSBSIDISIDI ES: DIDS: SI SISI1DIDI 1 D=0+ , D=1-
MOV AX, 1000H MOV DS, AX MOV AX, 2000H MOV ES, AX MOV SI, 0013H MOV DI, 1003H MOV CX, 4 STDLP: MOVSB DEC CX JNZ LP 0 HLT
MOV AX, 1000H MOV DS, AX MOV AX, 2000H MOV ES, AX MOV SI, 0013H MOV DI, 1003H MOV CX, 4 LP: MOV AX[SI] MOV ES: [DI]AX DEC SI DEC DI DEC CX JNZ LP HLT
(2) MOVSW ESDIDSSISISI2 DIDI 2 D=0+ , D=1-
REP : (1) (CX)0 (CX) (CX)-1 REP (2) (CX)= 0 REPREP
REP MOV AX, 1000H MOV DS, AX MOV AX, 2000H MOV ES, AX MOV SI, 0010H MOV DI, 1000H MOV CX, 4 REP MOVSB HLT
LODS2(1) LODSB ; AL (DS:SI)(SI) (SI) 1(2) LODSW ; AX (DS:SI),SI (SI)2SIALAX
3. STOS2STOSB ; (ES:DI) (AL) , (DI) (DI) 1(2) STOSW ; (ES:DI) (AX) , (DI) (DI) 2REPCX
4. CMPS2(1) CMPSB (2) CMPSW (ES:DI) (DS:SI), (SI) (SI)1(DI)(DI) 1 (SI) (SI)2(DI) (DI)2
5. SCAS 2 (1) SCASB AL-ES:DI DIDI1 (2) SCASW AX-ES:DI DI DI2
CMPSSCAS REPE / REPZREPNE / REPNZ REPE/REPZ (Equal) / REPNE/REPNZ /
3.3.5
CPUIP 1JMP(Jump) JMP JMP LP;
2 1 Z JZ/JNZ Jump on Zero; Jump on Equal C JC/JNC P JPJPE/JNPJPO Jump on Parity; Jump on Even ;Jump on Odd
S JS/JNS O JO/JNO 2 JBJNAEJNBJAE JBEJNAJNBEJA JBJump on Below; JAEJump on Above or EqualJZJE/JNZJNE
3 JLJNGE/JNLJGE JLEJNG/JNLEJG L LessG Great E Equal-128~+127
( ) CALL
RETreturn
1 LOOP : CX CX- 1 (CX)0 ; LOOP
MOV AX,0000H MOV BX,0001H MOV CX,000AH LP: ADD AX,BX LOOP LP
2 1LOOPZ/LOOPE : CX CX- 1 CX0Z=1; LOOP
2LOOPNZ/LOOPNE : CX CX- 1 CX0Z=0; LOOP -128~127
interrupt 1 INT n n0~255 2IRET
CLC Clear carry flag ) C STCSet carry flag ) C CMCComplement carry flagC CLDClear direction flag )D STDSet direction flag )D CLIClear interrupt flag )I STI Set interrupt enable flag )I3.3.6
NOPNo operation ) HLTHalt ) CPU WAIT CPU ESC LOCKLock bus )