3 80x86
3.180x86 3.2 80x86 3.3 80x86
34
MOV DST , SRC (DST)(SRC)MOV AX,BX (AX)=1234H, (BX)=4321H (AX)=4321H, (BX)=4321H
(R)(M)(imm)
3.180x86
1.imm8i800HFFH16i160000HFFFFHR/M
3.1 MOV AL, 9 AL= 09H3.2 MOV AX, 3064H AX= 3064H
2. CPUreg8AHALBHBLCHCLDHDL16AXBXCXDXSIDIBPSP4segCSDSSSES
MOV AX, BX AX= 1234HBX= 5678H AX= 5678HBXMOV AXBL
EAEffective Address 8086EA
3Direct addressing
MOV AX, [2000H] DS= 3000HAX= 3050H
MOV AX,[2000h] MOV AX,ES:[2000h] MOV AXVALUE MOV AX[VALUE] MOV AXESVALUE MOV AXES[VALUE]
4. BXBPSIDI[]BXSIDIBP
MOV AX, [BX] DS= 2000H, BX= 1000H = 20000H + 1000H = 21000H AX= 50A0H
MOV AX,[SI] MOV AX, DS:[SI] MOV CL,[BX] MOV CL, DS:[BX] MOV BL,[BP] MOV BL, SS:[BP] MOV AX,ES:[SI] MOV CL,SS:[BX] MOV BL,DS:[BP]
5.816BXBPSIDIBX/SI/DIDSBPSS
MOV AX, COUNT[SI]MOV AX,[COUNT+SI] COUNT16 DS= 3000HSI= 2000HCOUNT = 3000H, = 30000H + 2000H + 3000H = 35000H
MOV AX,10H[SI] MOV AX,DS:10H[SI]MOV AX,ARRAY[BX] MOV AX,DS:ARRAY[BX]MOV TABLE[DI],AL MOV DS:TABLE[DI],ALMOV TABZ[BP],BL MOV SS:TABZ[BP],BL
DSMOV AL,0024H[SI]0024H(SI)=0(AL)=12H(SI)=1(AL)=34H(SI)=2(AL)=56H(SI)=3(AL)=78H(SI)=4(AL)=9AHEA=24H+(SI)(SI)SI
6.BXBPSIDIEABX/BPSI/DIBXDSBPSS
MOV AX, [BX][DI] MOV AX, [BX+DI] (DS ) = 2100HBX= 0158HDI= 10A5H EA = 0158H +10A5H = 11FDH = 21000H +11FDH = 221FDH
MOV AX,[BX][SI] MOV AX,DS:[BX+SI]MOV AX,[BP][DI] MOV AX,SS:[BP+DI]MOV AX,DS:[BP][DI] MOV AX, DS:[BP+DI]
7.BX/BPSI/DI816EABX/BPSI/DI8/16BX/BPSI/DIBXDSBPSS
MOV AX, MASK[BX][SI] MOV AX, MASK[BX+SI] MOV AX, [MASK+BX+SI] DS= 3000HBX= 2000HSI= 1000HMASK = 0250H = 30000H + 2000H + 1000H + 0250H = 33250HAX= 1234H
MOV AX, 06H[BX+SI] MOV AX, DS:[BX+SI+06H]MOV AL,TAB[BX][DI] MOVAL,DS:TABLE[BX][DI] MOV TAB1[BP][SI],DXMOV SS:TAB1[BP][SI],DX
MOV AX,ARRAY[BX][BP] MOV AX,DA[SI][DI]
BXSIMOV AL,ARRAY[BX][SI] [ ][BX][SI] [BX+SI]
16/32
8 MOV EAX, COUNT[ESI*4]
9 MOV ECX, [EAX][EDX*8]
10 MOV EAX, TABLE[EBP][EDI*4]
CS:IP
3.3 80x86
DEST,SRCDEST
1. MOV(move)MOVSX(move with sign-extend)MOVZX(move with zero-extend)PUSHPOPPUSHA/PUSHAD(push all registers)POPA/POPAD(pop all registers)XCHG(exchange)
MOVmoveMOVdst, src ;move (dst) (src) dstsrc dstCS dstsrc MOV
MOV
MOVmoveMOV AL,5MOV AX,BXMOV BP,DSMOV DS,AXMOV [BX],AXMOV ES:VAR,12MOV AL,BX MOV DS,1234H MOV CS,AX MOV DS,CS MOV VAR1,VAR2 MOV 12,AL
MOVSXMOVSX DST,SRC DSTSRC MOVSX reg1reg2 MOVSX regmem8/1616/32 MOVSX EAXCL MOVSX EDX[EDI]
MOVZXMOVZX DSTSRC DSTSRC MOVSX reg1reg2 MOVSX regmem MOVZX DXAL MOVZX EAXDATA
PUSHPUSH SRC 16 SPSP2 ((SP)+1,(SP)) (SRC) 32ESPESP4 ((ESP)+3,(ESP)+2, (ESP)+1, (ESP)) (SRC)R/M
POPPOP DST 16 (DST) ((SP)+1,(SP)) (SP) (SP)+2 32 (DST) ((ESP)+3,(ESP)+2, (ESP)+1, (ESP)) ESPESP4
R/M
push axpush bxpush ds...pop dspop bxpop ax
PUSHA/PUSHADPUSHA PUSHAD 16 32
POPA/POPADPOPA POPAD 16 32
XCHGexchangeXCHG DST,SRCDST SRC
XCHGmov ax,1234hax=1234hmov bx,5678hbx=5678hxchg ax,bxax=5678hbx=1234hxchg ah,alax=7856hxchg ax,ds:[2000h]xchg al, ds:[2000h]
XCHG: (BX)=6F30H, (BP)=0200H, (SI)=0046H, (SS)=2F00H,(2F246H)=4154H, XCHG BX,[BP+SI]=(SS) 16+(BP)+(SI)=2F000H+0200H+0046H=2F246H(BX) (2F246H)(BX)=4154H,(2F246H)=6F30H
2.INinput OUToutputXLATtranslateEAXAXAL
IN IN ALPORT IN AXPORT IN EAXPORT ALPORT AX PORT1PORT EAX PORT3PORT+2PORT1PORT
IN IN ALDX IN AXDX IN EAXDX AL((DX)) AX ((DX)+1,(DX)) EAX ((DX)+3,(DX)+2, (DX)+1,(DX))
OUT OUT PORTAL OUT PORTAX OUT PORTEAX ALPORT AX PORT1PORT EAX PORT3PORT+2PORT1PORT
OUT OUT DXAL OUT DXAX OUT DXEAX AL ((DX)) AX ((DX)+1,(DX)) EAX ((DX)+3,(DX)+2, (DX)+1,(DX))
378H379H37AH MOV DX379H IN ALDX
MOV DX37AH OUT DXAL
XLAT XLAT OPR XLAT16: (AL)((BX)+(AL)) 32: (AL)((EBX)+(AL))
XLAT Mov ax,1234H mov cl,4 mov bx,100hloop1:ror ax,4 Xlat ; ;loop1
3.LEA(load effective address)LDS(load DS with pointer)LES(load ES with pointer)LFS(load FS with pointer)LGS(load GS with pointer)LSS(load SS with pointer)
LEALEA REGSRCREGSRC16/32
LEABX0400HSI003CH 0403CH1234H MOV BX[BXSI] LEA BX[BX+SI]
LDSLDS REGSRC REGSRC DS SRC2 DSSRC4
: (DS)=B000H, (BX)=080AH, (0B080AH)=05AEH, (0B80CH)=4000H, (405AEH)=9634H,LDS DI,[BX]MOV AX,[DI](AX)=?(DI)=05AEH(DS)=4000H: (DS)=4000H (DI)=05AEH (AX)=9634H
LAHFload AH with flagsSAHF (store AH into flags)PUSHF/PUSHFD(push the flags or eflags)POPF/POPFD(pop the flags or eflags)
LAHFAHLAHF AHFLAGSSAHF AHSAHF (FLAGS) AH
PUSHF/PUSHFDPUSH PUSHFD (SP) (SP)2 ((SP)+1,(SP)) (FLAGS): (ESP) (ESP)2 ((ESP)+3,(ESP+2),(ESP)+1,(ESP)) (EFLAGS) AND 0FCFFFFH
POPF/POPFDPOPF POPFD (FLAGS) ((SP)+1,(SP)) (SP) (SP)+2 (EFLAGS) ((ESP)+3,(ESP)+2,(ESP)+1,(ESP)) (ESP) (ESP)+4
5.CBW (convert byte to word)CWD /CWDE (convert word to double word)CDQ (convert double to quad)BSWAP (byte swap)
CBWCBW ALAHAXCWD/CWDE CWD CWDECWD AXDXDXAXCWDE AXEAX
CDQ4CDQEAXEDXEDXEAX4
BSWAP BSWAP r32321423BSWAP EAXEAX11223344HEAX44332211H486CPU
1.ADDADCadd with carryINCincrementXADDexchange and add
ADD ADD DSTSRCDSTSRC+DSTADCADC DSTSRC DSTSRC+DST+CFINCINC OPROPR OPR+1
XADD XADD DSTSRCTEMPSRCDST SRC DST DST TEMP486CPU
ZFSFCF OF INCCF
ADD AX,BXADD AL,BLSUB CX,20HADD DL,DA_BYTESUB DA_WORD,DX(AL)=0E5HADD AL,0A4H AL
CF=1,ZF=0,SF=1,OF=0229+164=393=256+137
(-27)+(-92)=-119
2F365H2E024HMOV DX,2MOV AX,0F365HADD AX,0E024HADC DX,5CF=1,ZF=0,SF=1,OF=0CF=0,ZF=0,SF=0,OF=0AXDX
2.SUBsubtractSBBsubtract with borrowDECdecrementNEGnegateCMPcompareCMPXCHGcompare and exchangeCMPXCHG8Bcompare and exchange 8 byte
SUBSUB DSTSRCDSTDSTSRCSBBSBB DSTSRCDSTDSTSRCCF
DECDEC OPROPROPR1NEG NEG OPROPROPR
CMP CMP OPR1OPR2OPR1OPR2CMPEXCHG CMPXCHG DSTSRCACDST ACDST ZF1DSTSRC ZF0ACDSTSRC81632ALAXEAX
CMPXCHG8BCMPXCHG8B DST EDXEAXDST EDXEAXDST ZF1DST ECXEBX ZF0EDXEAXDST
ZF SFCF OF DECCFNEG0CF01 1283276865536OF10
MOV AL,-73SUB AL,-87AL
1011 01111010 1001
0000 1110CF=0,ZF=0,SF=0,OF=0-7314-87AL=0EH
AL=13H,NEG ALALALAL=-13HCF=1,ZF=0,SF=1,OF=0
CMPXYX>YX>Y>=0 X-Y SF=0OF00>=X>Y X-Y SF0OF0X>=0,YY
CMP(CMP AL,BL)AL=-2BL=127AL=-2BL=-1
CMP(CMP AL,BL)AL=-1BL=-2AL=127BL=-2
3.MUL(unsigned multiple) IMUL(signed multiple)
MULIMULMUL / IMUL SRC: (AX) (AL)(SRC) : (DX, AX) (AX)(SRC) : (EDX,EAX) (EAX)(SRC)
CFOFMUL0CF0OF0CF1OF1IMULCF0OF0CF1OF1
4.DIV(unsigned divide)IDIV(signed divide)
DIVIDIVDIV / IDIV SRC (AL) (AX) /SRC (AH) (AX) /SRC (AX) (DX, AX) / SRC (DX) (DX, AX) / SRC (EAX) (EDX, EAX) / SRC (EDX) (EDX, EAX) / SRC
5.BCDBCD
()
1.AND DST,SRCOR DST,SRCXOR DST,SRCNOT DST TEST OPR1OPR2 (DST)(DST) (SRC) (DST)(DST) (SRC) (DST)(DST) (SRC) (DST)(DST) (OPR1) (OPR2) NOTCF0OF0SFZF
AL01 MOV AL,0BFHAND AL,0FCH 1011 1111 AND 1111 1100 1011 1100(AL)=0BCH
MOV AL,43HOR AL,20H 0100 0010 OR 0010 0000 0110 0000 (AL)=63HAL51
AL01
MOV AL,11HXOR AL,03H 0001 0001 XOR 0000 0011 0001 0010 (AL)=12H
4.
SHL OPR,CNT SHR OPR,CNTOPR CNT / CF0 DST OF ( CNT=1) CF ,ZF,SF,PFOPR RMCNT1CL/ 2
SAL OPR,CNT SAR OPR,CNTSALSHLSAR1 CF OPR OF ( CNT=1) CF ,ZF,SF,PFDST RMCNT1CL
MOV CL,4MOV AL,0F0HAL=F0HSHL AL,1AL=E0HCF=1SF=1ZF=0PF=0OF=0SHR AL,1AL=70HCF=0SF=0ZF=0PF=0OF=1SAR AL,CLAL=03HCF=1SF=0ZF=0PF=1SAR AL,1AL=38HCF=0SF=0ZF=0PF=0OF=0
ROL (rotate left)ROR (rotate right)RCL (rotate left through carry)RCR (rotate right through carry)
ROLROL OPRCNT RORROR OPRCNT
RCLRCL OPRCNTRCRRCR OPRCNT
DX.AX32SHL AX,1RCL DX,1DXAXCF0
ALBLALROR AL,1
RCL BL,1
ROL AL,1ALD0
8086StringWB
MOVS(move string)CMPS(compare string)SCAS(sacn string)LODS(load from string)STOS(store in to string)INS(input from port to string)OUTS(output string to prot)
REPMOVS,STOS,LODS,INSOUTSREPCount Reg0REP string primitiveCount Reg=0,REPCount RegCount Reg-113
MOVSMOVS DEST,SRCMOVSBMOVSWMOVSD
MOVS ES:BYTE PTR[DI], DS:[SI]((Destination-index))((Source-index))(Source-index))(Source-index)) 1(Destination-index)(Destination-index) 1(Source-index))(Source-index) 2(Destination-index)(Destination-index) 2(Source-index))(Source-index) 4(Destination-index)(Destination-index) 4DF=0DF=1
20 DATSEG SEGMENT DATAX DB ABCDEFGHIJKLMNOPQRST DATAY DB 20 DUP(?) DATSEG ENDS
CODSEG SEGMENT ASSUME CS:CODSEG,DS:DATSEG,ES:DATSEG START: MOV AX,DATSEG MOV DS,AX MOV ES,AX CLD MOV SI,OFFSET DATAX MOV DI,OFFSET DATAY MOV CX,20 REP MOVSB MOVAX,4C00H INT 21H CODSEG ENDS END START REP MOVS byte ptr [di],[si]
SIDICX CLDSTD
STOS STOS DST STOSB STOSW STOSD
((Destination-index))(AL)(Destination-index)(Destination-index) 1((Destination-index))(AX)(Destination-index)(Destination-index) 2((Destination-index))(EAX)(Destination-index)(Destination-index) 4DF=0DF=1
1020Hextra segment mess2 db 10 dup(?)extra ends lea di,mess2 mov cx,10 cld rep stosb
lea di,meass2mov ax,2020hmov cx,5rep stosw
LODS LODS SRC LODSB LODSW LODSD(AL)((Source-index)), (Source-index)(Source-index)) 1(AX)((Source-index)), (Source-index)(Source-index)) 2(EAX)((Source-index)), (Source-index)(Source-index)) 4
3.37 1STOS0AAH100 2LODS0AAHbad memory DTSEG SEGMENT DATAM DB 100 DUP(?) MESG DB bad memory, $ DTSEG ENDS
CDSEG SEGMENT ASSUMECS:CDSEG,DS:DTSEG,ES:DTSEG START: MOV AX,DTSEG MOV DS,AX MOV ES,AX CLD MOV CX,50 MOV DI,OFFSET DATAM MOV AX,0AAAAH REP STOSW MOV SI,OFFSET DATAM MOV CX,100
AGAIN: LODSB XOR AL,0AAH JNZ OVER LOOPAGAIN JMP EXIT OVER:MOV AH,09 MOV DX,OFFSET MESG INT 21H EXIT:MOV AX,4C00H INT 21HCDSEG ENDS END START
REPE/REPZREPNE/REPNZCMPSSCASREPE/REPZ/REPE(REPZ) String PrimitiveCount Reg=0ZF=0Count RegCount Reg-113
REPNE/REPNZ/REPNE(REPNZ) String PrimitiveCount Reg=0ZF=1Count RegCount Reg-113
CMPS CMPS SRC,DST CMPSB CMPSW CMPSD
((Destination-index))-((Source-index))(Source-index))(Source-index)) 1(Destination-index)(Destination-index) 1(Source-index))(Source-index) 2(Destination-index)(Destination-index) 2(Source-index))(Source-index) 4(Destination-index)(Destination-index) 4DF=0DF=1
SCAS SCAS DST SCASB SCASW SCASD
(AL)((Destination-index)), (Destination-index)(Destination-index)) 1(AX)((Destination-index)), (Destination-index)(Destination-index)) 2(EAX)((Destination-index)), (Destination-index)(Destination-index)) 4
"LABEL""LABLE" 1"The spelling is correct" 2"Wrong splling" DATASEG SEGMENT DAT_DICT DB 'LABEL' DAT_TYPE DB 'LABLE' MESS1 DB 'The spelling is correct ','$' MESS2 DB 'Wrong spelling ','$' DATASEG ENDS CODESEG SEGMENTASSUME CS:CODESEG,DS:DATASEG,ES:DATASEG
START: MOV AX,DATASEG MOV DS,AX MOV ES,AX CLD MOV SI,OFFSET DAT_DICT MOV DI,OFFSET DAT_TYPE MOV CX,05 REPECMPSB JEOVER MOV DX,OFFSET MESS2 JMP DISP OVER: MOV DX,OFFSET MESS1 DISP: MOV AH,09 INT 21H MOV AX,4C00H INT 21H CODSEG ENDS END START
HU DAMINGHU DANINGDATA SEGMENT NAME DB 'HU DAMING', '$DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA START: MOV AX,DATA MOVDS,AX MOVES,AX
CLD MOV AL,'M' MOV DI,OFFSET NAME MOVCX,09 REPNESCASB JNEDISP DECDI MOVBYTE PTR [DI],'N' DISP: MOVAH,09 MOVDX,OFFSET NAME INT21H MOVAX,4C00H INT21H CODE ENDS ENDSTART
STRBUFSTRINGDSEG SEGMENT PARA 'Data'
STRBUFDB 'ASASAASASSASSAASASAS'COUNTEQU $-STRBUFSTRINGDB 'AS'MESSGDB "THE NUMBER OF 'AS' IS : "NUMDB ?DB 0AH,0DH,'$
DSEG ENDS
STRBUFSTRING2CMPSWSISI+2AASSISI-1CMPSWDI DI+2STRDI DI-2-2
SI STRBUFDI STRINGCX -1DF 0LOPNEXT1NEXT
LEA SI,STRBUFLEA DI,STRINGMOV CX,COUNT-1CLDMOV BL,0LOP:CMPSWJNZ NEXT1INC BLDEC CXJMP NEXTNEXT1:DEC SINEXT:DEC DIDEC DICMP CX,0;CX0-1JZ OUTPUTLOOP LOPOUTPUT:ADD BL,30HMOV NUM,BLMOV AH,9LEA DX,MESSGINT 21H
JMP JMP SHORT OPR(IP)(IP)+8JMP NEAR PRT OPR(IP)(IP)+16 lea si,str1 lea di,str2Next: dec di dec si mov al,20h jmp next
JMP JMP WORD PTR ORP (IP)(EA)JMP BX JMP WORD PTR[BX+TABLE] JMP [BX][SI](DS)=2000H,(BX)=1256H,(SI)=528FH,TABLE=20A1H,(232F7H)=3280H,(264E5H)=2450H
JMP JMP FAR PTR OPR (IP)OPR (CS) OPR JMP FAR PTR NEXTROUTINTJMP DWORD PTR OPR (IP)(EA) (CS) (EA+2)JMP DWORD PRT[INTERS+BX]
COUNT (COUNT) -1(COUNT)=0?
LOOP loopLOOPZ/LOOPNEloop while zero, or equalLOOPNZ/LOOPNE loop while nonzero, or not equal
LOOPLOOP OPR(Count Reg)0LOOPZ/LOOPE LOOPZ(LOOPE) OPRZF=1(Count Reg)0LOOPNZ/LOOPNE LOOPNZ(LOOPNE) OPRZF=0(Count Reg)0(Count Reg)(Count Reg)-1IPIP
BLOCK1BLOCK2BLOCK2 DATA SEGMENT BLOCK1 DW 100 DUP() BLOCK2 DW 100 DUP() DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA START: CLD MOV CX,100 MOV SI,OFFSET BLOCK1 MOV DI,OFFSET BLOCK2 NEXT:LODSW ADD AX,ES:[DI] STOSW LOOP NEXT CODE ENDS END START
LASCII_STRASCII20HNOT_FOUND MOVCX,L MOVSI,-1 MOVAL,20HNEXT: INC SICMPAL,ASCII_STR[SI]LOOPNENEXTJNZNOT_FOUND
NOT_FOUND:
1.
3.4 80x86CPU
MOV ADD SUB AND
1AX\ALimmw
2REG D5D4D3 38R
REGw=1w=0000AXAL001CXCL010DXDL011BXBL100SPAH101BPCH110SIDH111DIBH
2MOD: D7D62R/M: D2D1D032) 3) 1R/M
MODR/MEA11000110w=0W=1000( BX+SI)DS( BX+SI) +D8DS( BX+SI ) +D16DSALAX001( BX+DI)DS( BX+DI)+D8DS( BX+DI)+D16DSCLCX010( BP+SI )SS( BP+SI ) +D8SS( BP+SI )+D16SSDLDX011( BP+DI )SS( BP+DI ) +D8SS( BP+DI ) +D16SSBLBX100( SI )DS(SI) +D8DS(SI) +D16DSAHSP101(DI)DS(DI) +D8DS(DI) +D16DSCHBP110D16DS(BP) +D8SS(BP) + D16SSDHSI111(BX)DS(BX) +D8DS(BX) + D16DSBHDI
3MOD=11/00 MOD=01, 3MOD=10, 34
41
ADDR-R3MOVR-R2IMULR16128-154IDIVR16165-184R ,12JMP15416
28086 1 -- 2 -- 3 -- 4 --
Top Related