主讲人 刘雪洁

Click here to load reader

Upload: dustin

Post on 05-Jan-2016

72 views

Category:

Documents


7 download

DESCRIPTION

主讲人 刘雪洁. 汇编语言程序设计. Assembly Language Programming. 第 2 章 80x86 的指令系统. 2.1 指令格式 2.2 寻址方式 2.3 数据传送类指令 2.4 算术运算类指令 2.5 位操作类指令 2.6 串操作类指令 2.7 控制转移类指令 2.8 处理机控制类指令. 2.1 指令格式. 计算机是通过执行指令序列来解决问题的。计算机的指令系统就是指该计算机能够执行的全部指令的集合。 指令的一般格式: - PowerPoint PPT Presentation

TRANSCRIPT

  • Assembly Language Programming

  • 2 80x862.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8

  • 2.1 [] OPD OPS [] [] OPD []

  • 2.2 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 2.2.7 2.2.8

  • 2.2.1 816

  • MOV AX 10AX=10

    10AXAX=000AH

  • 2.2.2 AX=BX= MOV AX1234H MOV BX5678H ADD AXBX MOVADDAXBXAXBX

  • 1234HAX 5678HBX AX+BXAXAX=68ACHBX=5678H

  • 2.2.3 [EA] EA

  • AX=1212HBUF2000HDS=3000H32000H=4545HMOV AX BUFMOV AX , [2000H]AX=?

    32000HAXAX=4545H

  • 2.2.4 EA[R]REA

  • EAEA=[SI]SI [DI]DI[BX]BX[BP]BP

  • MOV AX [BP] AX=?

    20030HAXAX=1234HAX=0BP=0030HSS=2000H20030H=1234H

  • 2.2.5 EAX[R]X816RXEA

  • EA

  • AX=0040HBX=0030HDS=2000H20036H=0050H ADD 6[BX]AX(AX=?BX=?DS=? 20036H=?

    20036H+AX 20036HAX=0040HBX=0030HDS=2000H20036H=0090H

  • 2.2.6 EAX [BR+IR]BRIRXEA

  • EA

  • 2.2.7 BPPASS4EAPADS4EA

  • MOVAXDS[BP] MOVCXSS[SI] DSSSPA4EA2PA1 =DS4+[BP]PA2 =SS4+[SI

  • 2.2.8 CALLIP816 +IPEA IP

  • IP8816 JMP NEAR PTR PROGIA JMP SHORT QUEST PROGIAQUEST16NEAR PTR;8SHORT

  • IP JMPCALL

  • (DS)=2000H,(BX)=1256H,=20A1H,(232F7H)=3280H,(264E5H)=2450H. JMP BX BX(IP)=1256H JMP TABLE[BX] (IP)=(16d*(DS)+BX+) =(20000+1256+20A1) =(232F7) =3280H

  • IPCS JMP FAR PTR NEXTROUTINT NEXTROUTINTFAR PTR

  • IPCS JMP DWORD PTR [INTERS+BX] [INTERS+BX]DWORD PTREAIPCS

  • 2.3 2.3.1 2.3.2 2.3.3 2.3.4 2.3.5

  • 2.3.1 1MOV2XCHG3 XLAT

  • 1MOVMOV OPDOPSOPSOPDMOV :CS .

  • MOV AXBUF BUFMOV BH[DI] MOV DIES3[SI] MOV BP3[BX+SI]MOV BUFADLBUFAMOV [BP]AXSSMOV DS[BP]DLMOV BUFDSBUFMOV ES BUF

  • 2XCHGXCHG OPDOPSOPDOPSOPSOPD2.9MOVAX5678HAX=5678HMOVBX0FFFFHBX=0FFFFHXCHGAXBXAX=0FFFFH BX=5678H

  • 3 XLATXLAT OPSXLATBX,ALAL[BX+AL]AL

  • 2.3.2 1PUSH2POP

  • 1PUSH PUSH OPS2: (SP)-SP (OPS)15~8[SP] (SP)-SP (OPS)7~0[SP]

  • 2POP POP OPD CS2POPPUSH [SP]OPD7~0SP+SP [SP]OPD15~8SP+SP

  • 2.3.3 1AHLAHF2AHSAHF3PUSHF4POPF

  • 1AHLAHFLAHF8AHFLAGS7-0AHFLAGS=0485HAX=0FFFFH LAHFFLAGS=0485HAX=085FFH

  • 2AHSAHFSAHFAH88AH FLAGS7-0SAHFLAHF

  • 3PUSHFPUSHFFLAGSSP

  • 4POPF SPFLAGSPOPFPUSHFTFPUSHFFLSGSSPPOP AXSPAXOR AX 0100HD8=TF=1PUSH AXAXSPPOPFSPFLAGSAXFLAGS

  • 2.3.4 1 LEA2LDS3LES

  • 1 LEA LEA OPDOPS2.15MOV BX0100HBX=0100HMOV SI 0210HSI =0210HLEA BX1234[BX+SI]BX=1544H

  • 2LDSLDS OPDOPSDSOPSOPDOPS+2DS

  • 3LESLES OPDOPSOPSOPDOPS+2ES

  • 2.3.5 1IN2OUT

  • 1IN 1INALPORT PORTAL 2INAXPORT PORTAX 3INALDX [DX]AL 4INAXDX [DX]AL

  • 2OUT 1OUTPORTAL ALPORT 2OUTPORTAX AXPORT 3OUTDXAL AL[DX] 4OUTDXAX AX[DX]

  • 80x86I/0CPUINOUTINI/0CPUOUTCPUI/0CPU(ALAX)65536I/00000H-FFFFH256256DXINOUTIN AX28H MOV DAAX 28AXDAOUT 5AL AL5.

  • 2.4 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6

  • 2.4.1 11 INC2ADD3ADC

  • 11 INCINC OPD1OPD+1OPDINC INC BXBX+1BX1

  • 2ADDADD OPD OPS OPD+OPSOPD3ADCADC OPDOPS OPD+OPS+CF OPD

  • MOV AX4652H (AX)=4652H ADD AX0F0F0H(AX)=3742H CF=1 MOV DX0234H(DX)=0234H ADC DX0F0F0H(DX)=0F325H CF=0

  • 2.4.2 11DEC2SUB3 SBB4NEG5 CMP

  • 11DECDEC OPD 1OPD1OPDDEC DEC CXCX1CX1DEC

  • 2SUBSUB OPDOPS OPDOPSOPD MOV AX 5678HAX=5678H SUB AX 1234HAX=4444H MOV BX 3354HBX=3354H SUB BX 3340HBX=0014H

  • 3 SBBSBB OPD OPSCF OPDOPSCF OPD4NEGNEG OPD1 0FFFF -OPD+1OPD

  • MOVAX0FF64H 1111 1111 0110 0100 NEGAL AX=0FF9CH (1001 1100) SUBAL9DH AX=0FFFFH CF=1 NEGAXAX=0001H DECALAX=0000H NEGAXAX=0000H

  • 5 CMPCMP OPDOPS OPDOPSAL CMP AL50(AL)50 JBBELOWAL=50(AL)50AL INCAHAH+1AHBELOW

  • 2.4.3 1MUL2IMUL

  • 1MUL MUL OPS ALOPSAXAXOPSDXAX AL* OPS AX AX * OPS DXAX 0A3H11H MOVAL0A3HAL=0A3H MOVBL 11HBL=11H MULBL AX=0AD3H

  • 2IMULIMUL OPSAL*OPSAX AX*OPSDXAXIMULMUL 0B4H11H MOVAL0B4HAL=B4H MOVBL11HBL=11H IMULBL AX=0FAF4H

  • 2.4.4 1DIV2IDIV

  • 1DIVDIV OPS :(AX)/(OPS) AL()AH() :(DXAX)/(OPS) AX()DX()0400H/0B4H MOVAX0400HAX=0400H MOVBL0B4HBL=0B4H DIVBL (AL)=05H(AH)=7CH

  • 2IDIVIDIV OPS :(AX)/(OPS)AL(),AH() :(DX,AX)/(OPS)AX(),DX()DIVIDIV0400H/0B4H MOVAX0400HAX=0400H MOVBX0B4HBX=0B4H IDIVBX AL=0F3HAH=24H

  • 2.4.5 1CBW2CWD

  • 1CBWCBWALAH MOVAL0A5HAL=0A5H CBW AX=0FFA5H ADDAL70HAL=25H CBW AX=0025H

  • 2CWDCWDAXDX MOVDX 0DX=0 MOVAX 0FFABHAX=0FFABH CWDDX=0FFFFH AX=0FFABH

  • 2.4.6 1BCD2BCD

  • 1DAADAAAL49AF=1AL=AL+6AF=1AL>=0A0HCF=1AL=AL+60HCF=1SFZFPFBCD MOV AL68HAL=68HBCD68 MOV BL28HBL=28HBCD28 ADD ALBL:(AL)=68H+28H=90H DAA AL=96H BCD68+28=961BCD

  • 2DASDASAF=1AL49AL=AL6AF=1AL>=0A0HCF=1AL=AL60HCF=1SFZFPFBCD MOVAL67H ;(AL)=67H,BCD67 MOVBL28H ;(BL)=28H,BCD28 SUBALBL ; (AL)=67H-28H=3FH DAS AL=39H BCD6728=39

  • 2BCD1BCDAAAAAA AL49AF=1 AL=AL+6 AH=AH+1 AF=CF=1 AL4 CF=AF=0 AL4

  • 2BCDAASAAS AL49AF=1AL=AL6 AH=AH1 AF=CF=1 AL4 CF=AF=0 AL4 OFPFSFZF

  • 3BCDAAMAAM AXAL10 AL0AHAHAL AHALAFCFOFPFSFZF

  • 4BCDAADAAD AX AL=AL+AH*0AH AH=0

  • 2.5 2.5.1

    2.5.2

  • 2.5.1 1NOT2AND3TEST4OR5XOR

  • 1NOTNOT OPDOPDOPD MOV AX878AH(AX)=878AH 1000 0111 1000 1010 B NOT AX AX=7875H

  • 2ANDAND OPD OPS OPDOPSOPD011=110=001=000=0AL37 MOVAL0FFH ANDAL77H ;0111 0111 B

  • 3TESTTEST OPDOPS OPDOPSAX1200L TESTAX1000H ; 0001 0000 0000 0000B JNE L

  • 4OROR OPDOPS OPDOPSOPD11=110=101=100=0AL371 MOVAL0 OR AL88H

  • 5XOR XOR OPDOPS OPD(OPS) OPD11=010=101=100=0 MOVAL45HAL=45H XORAL31HAL=74H

  • 2.5.2 [] OPD1 [] OPDCL1CL0~255816

  • 1SALSHLSAL OPD1 SHL OPD1 SAL OPDCL SHL OPDCLOPDCLCF

    2SARSAR OPD1SAR OPDCLOPDCLCF

  • MOVBH0F4H (BH)=0F4H,1111 0100B MOVCL 2CL=2 SARBH CLBH=0FDHCF=0SARBHCLBHBHSAR2nn

  • 3SHRSHR OPD1SHR OPDCLOPDCLCF

  • 4ROLROL OPD1ROL LPDCLCLCF

  • 5ROR ROR OPD1ROR OPDCLCLCF

  • 6RCL RCL OPD 1 RCL OPDCLCFCL

  • 7RCRRCR OPD1 RCR ODCLCF

  • 2.6 8086

  • MOVS CMPS SCAS LODS STOS INS OUTS REP REPE/REPZ / REPNE/REPNZ /

  • 1REPREPZREPNZ1REP :REPMOVSSTOS LODSINSOUTS REP string primitive string primitiveMOVSLODS (1)(CX)=0REP (2)(CX)=(CX)1 (3) (4)(1)-(3)

  • 2REPZ/REPE:CMPSSCAS REPE(REPZ) string primitive string primitiveCMPSSCAS (1)(CX)=0ZF=0 (2)(CX)=(CX)1 (3) (4)(1)-(3) REP(CX)=0ZF=0

  • 3REPNZ/REPNE :CMPSSCAS REPE(REPZ) string primitive string primitiveCMPSSCAS (1)(CX)=0ZF=1 (2)(CX)=(CX)1 (3) (4)(1)-(3) REP(CX)=0ZF=1

  • 2MOVS MOVS DSTSRC MOVSB MOVSW,.: MOVS ES:BYTE PTR[DI],DS:[SI]SIDI DS[SI]ES[DI] DF=0SIDI DF=1SIDI

  • (SI)(DI)1 (SI)(DI)2 REPREP I.(); II.(); .; .

  • 17 data segment mess1 db personal computer$data endsextra segment mess2 db 17 dup(?)extra endscode segment assume cs:code,ds:data,es:extra mov ax,data mov ds,ax mov ax,extramov es,ax lea si,mess1 lea di,mess2 mov cx,17 cld rep movsb code ends

  • 3CMPS CMPS SRCDST CMPSB CMPSWSIDI [SI][DI] DF=0SIDIDF=1SIDI (SI)(DI)1 (SI)(DI)2

  • 4SCAS SCAS DST SCASB SCASWALAXDI AL[DI]AX[DI] DF=0DIDF=1DI (SI)(DI)1 (SI)(DI)2

  • 34REPEREPNE REPNZ SCASB REPE CMPSB

  • 5LODS LODS SRC LODSB LODSWSIALAX [SI]AL[SI]AX SIDF=0SIDF=1SI (SI)(DI)1 (SI)(DI)2

  • 6STOS STOS DST STOSB STOSWALAXDI AL[DI]AX[DI] DIDF=0DIDF=1DI (SI)(DI)1 (SI)(DI)2

  • (1)DSES MOVS [DI]ES[SI] (2)(CX)1

  • 2.7 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5

  • 2.7.1 123. [ ] IPIP

  • 1

  • 2AX CMPAX BX AXBX JNBNEXT AX>=BXNEXT XCHGAXBX AX
  • 3.

    AX CMPAXBXAXBX JNLNEXT AX>=BXNEXT XCHGAXBXAX

  • 2.7.2 JMP SHORT OPR(IP8) JMP NEAR PTR OPR(IP16)JMP WORD PTR OPR JMP FAR PTR OPR JMP DWORD PTR OPR (EA)->(IP),(EA+2)->CS

  • 2.7.3 1LOOP2/LOOPE3/LOOPNE 4CXJCXZ

  • 1LOOP LOOP CX1 0LOOP DEC CX JNE 2/LOOPE LOOPE LOOPZ CX1 0ZF=1

  • 3/LOOPNE LOOPNE LOOPNZ CX10ZF=04CXJCXZ JCXZ CX10

  • ASCII_STR(ASCII20H)NOT_FOUND MOV CX,L MOV SI,-1 MOV AL,20HNEXT:INC SI CMP AL,ASCII_STR[SI] LOOPNE NEXT JNZ NOT_FOUND NOT_FOUND:

  • 2.7.4 1CALL 1 CALL DST PUSH (IP) (IP)
  • (2) CALL DST PUSH (IP) (IP)
  • (4) CALL DST PUSH (CS) PUSH (IP) (IP)
  • 2.7.5 CPU(IP)(CS)(FLAGS)(IP)(CS)(FLAGS)

  • 1INTINT n;n0-255FLAGSSP0 IFTF CS SP4*n+2 CS IP SP4*n IP2IRETIRETSPIP SP CS SP FLAGS

  • 2.8 2.8.1

    2.8.2 CPU

  • 2.8.1 1 CLC 0 CMC STC 12 CLD 0 STD 13 CLI 0 STI 1

  • 2.8.2 CPU1NOP2LOCK3HLT

  • 4ESC5WAITWAIT

  • 80x86 80x86