第 4 章 指令系统与汇编语言

Click here to load reader

Upload: buffy

Post on 11-Jan-2016

120 views

Category:

Documents


5 download

DESCRIPTION

第 4 章 指令系统与汇编语言. 4.1 指令系统概述 4·2 寻址方式 4·3 8086/8088 指令系统 4·4 汇编语言简述. 1. 4. 2. 5. 3. 6. 本章学习目标. 8086CPU 指令系统 的寻址方式及地址计算方法. 8086CPU 指令及其应用. 汇编语言基本格式. 汇编语言程序设计基本步骤和基本方法. 顺序程序、分支程序、循环程序、子程序的基本结构和设计方法. 常用 DOS 中断调用. 返回本章. 4.1 指令系统概述. 4.1.1 指令的格式 4.1.2 指令 中的操作数. 返回本章. - PowerPoint PPT Presentation

TRANSCRIPT

  • 4 4.1 42 43 8086/8088 44

  • 8086CPU8086CPUDOS

  • 4.1 4.1.1

    4.1.2

  • 4.1.1

  • IP

  • 1.

    MOVSB

  • 2. 1 INC AXAX1AX MUL BLALBLAX

  • 3.

    21ADD AX, BX

  • 4.1.2 8086 1. 816 MOV AX1234H

  • , MOV AX, 12345H MOV 1234H, AX

    2 168MOV AXBX MOV DLCH

  • 3. 124 []MOV AX[1234H] [1234H]1234H 8086

  • CPU4-14-1

  • 4.2 4.2.1

    4.2.2

  • 1.

    CPU

    8161688 MOV AX,3344H 163344HAX AH=33HAL=44H4.2.1

  • 2.

    CPU816

    AX,BX,CX,DX41688AH,AL,BH,BL,CH,CL,DH,DLSI,DI,BP,SP

    MOV SI, AX AXSI

  • 3.

    1688

    MOV AX,[2233H] EA2233H2234HAX DS=2000H PA=DS*16+EA =20000H+2233H=22233H

  • 4.

    SI DI BXBP 4 SI, DI, BXDS PA=(DS)*16+(BX)(SI)(DI)

  • BPSS PA=(SS)*16+(BP) MOV AX[SI] DS=6000HSI=1200H PA=DS*16+EA =(DS)*16+(SI) =6000H*10H1200H=61200H6120061200H=44AL, 6120161200H=33AH, (AX)=3344H

  • 5.

    816BP PA=(DS)*16+(BX)(SI)(DI)+ PA=(SS)*16+(BP) +

  • M0V AXDATA[BX] DS=6000HBX=1000HDATA=08HPA =DS*16+EA=(DS)*16+(BX)DATA=60000H+1000H+08H=61008HM0V AXDATA[BX] M0V AX[BX]DATAM0V AXDATA+[BX]M0V AX[BX]+DATAM0V AX[DATA+BX]M0V AX[DATA+BX]

  • 6.

    (BXBP)(SIDI)BXDSBP,SS MOV AX[BX][SI] 8086CPUMOV AX,[BX][BP]MOV AX,[SI][DI]

  • 7.

    816: MOV AX,DATA[BX][DI]MOV AXDATABX[SI]MOV AX, [BXDATA][SI]MOV AX, [BXSIDATAMOV AX, [BX]DATA[SI]MOV AX, [BXSI[DATA

  • MOV AX,DATA[SI][DI] MOV AX,[BX][BP]DATA

  • 4.2.2 BIUIP1BIUCSIPIPCSIP IPCSIP

  • 1.

    1) IP816IP,CS8-128+12716-32768+32767 JMP NEAR PTR NEXT JMP SHORT EXIT NEXTEXIT

  • 2) IP JMP BX JMP WORD PTR [BX+TABLE] WORD PTR

  • 2. IPCS 1) (NEXT)1616CSIP JMP FAR PTR NEXT NEXT FAR PTR

  • 2) 4CSIP JMP DWORD PTR [BX+TABLE] DWORD PTR[BX+TABLE]

  • 4.3 8086/80884.3.1

    4.3.2

    4.3.3

    4.3.4

    4.3.5

    4.3.6

  • 4.3.1

    11MOVMOV dstsrc dst(src)

    dstsrc

  • MOVIPCS4-8

    CSIPCS

  • .816ASCII

    MOV AL, 32H 852H ALMOV CL, 'D' D ASCIICLMOV SI, COUNT COUNTSIMOV DX, 3250H 163250HDX

    .816 MOV AX, BX 16MOV DL, CL 8

  • .

    MOV AX, [2100H] AX MOV [5210H], SI SI

    .816

    MOV ARRAY, 32HARRAY32HARRAY

  • .16CS

    MOV DS, AX AX DS

    .

    MOV [SI], DS DSSI MOV ES, [BX] BXES

  • MOVCPUCPUCSMOVMOV

  • 2XCHG XCHG oprlopr2 oprlopr2 oprlopr2 XCHG AX,BX AXBX AX=325AHBX=2130H (AX) =2130H (BX) =325AH

  • 3

    ,8086SP8086/8088

  • .PUSH

    PUSH src SPSP-2(SP)1, (SP)srcSP2srcSPsrcPUSH AX SPSP-2((SP)1) (AH)((SP))(AL)PUSH CSPUSH [SI]

  • .POP

    POP dst dst(SP)1, (SP)SPSP+2 SPdstSP2dstCS POP BX SS=2000H,SP=0100HBX=78C2H20100H=6B48HBX=6B48H. (SP) =0102H

  • 2.

    AX8086/

    (1) .IN Acc,port Accport8/16port0255AL/AXAcc816 IN AL, 30H 30H8AL

  • .IN Acc, DX AccDXDX 8/16AL/AXAcc816255MOV DX, 1FFH 1FFHDX IN AL, DX DXAL

  • (2) .OUT port, Acc port Acc AL/AX8/16I/Oport0255 OUT 20H, AL AL20H .OUT DX, Acc DXAcc AL/AX8/16DXI/O255 MOV DX, 1FFH

  • (3)XLAT

    XLATALBX+AL BXALAL

    ALAL

  • 3.lLEALEA reg16memmem16reg16LEA BX,[SI+BP] (SI)BPBX LEA BX,buffer bufferBX2LDSLDS reg16mem32mem32reg1616mem32DS LDS BX,ARR[SI]ARR=0010HSI=0020HDS=2000H, BX=6AE0H20030H. =0080H20032H=4000H(BX) =0080H DS=4000H

  • 3LESLDS reg16mem32LDS,ESDS

    LES DI,[BX](DS)=2000H,(BX)=0020H,(20020H)=18H,(20021H)=A5H, (20022)=00H(20023H)=50H(ES)=4000H

    (DI)=A518H(ES)=5000H

  • 4.

    4AH1LAHF FLAG5SF, ZF, AF, PFCFAH4-9

    4-9 LAHF

    AHFLAGOFDFIFTFSFZFAFPFCF

  • 2SAHF SAHFLAHFAH7, 6, 4, 2, 0SAHFFLAGSF ZF AFPFCFAHOF DFIFTF3PUSHF PUSHFSP2,FLAG164POPF POPFPUSHFFLAG2POPFPUSHFPOPF

  • 4.3.2 80864BCD CFOF CF=1OF=10, ZF=11, SF=1;1PF=1

  • 1

    1ADD dst, src dst(dst)+(src) srcdst,ADD AL, BL ADD AL, [0210H]ADD [SI],AX ADD BYTE PTR[SI],34H

  • 2ADC dst, src dst(dst)+(src)+ (CF)CFADDADC31INC opr opr1oprINC AL INC CX INC BYTE PTR [SI+BX]

  • 2

    1SUB dst, src dst(dst)-(src) dstsrcSUB AX, BX AXBXAX2SBB dst, src dst(dst)-(src)- (CF)dstsrcCFSBBSBB DX, CX DX-CX-CF,DX31 DEC opr opr(opr)-11DEC CX CX1CXDEC BYTE PTR[SI] SI1

  • 4NEG opr opr0-(opr) 0opr1oprAL=0FFHNEG ALAL=01H4CMP oprlopr2oprl -opr2SUBCMP AL,0 AL0 JGE NEXT AL0NEXT

  • 3

    8161632 8ALAX16AXDXAXDX16AX161MUL src srcAXsrcxALsrc,DX AXsrcxAXsrc: MUL AH (AH) xALAX MUL BX (BX) x (AX)DX, AX2IMUL src MUL

  • 4

    8086CPU16832161DIV src DIV src AL (AX)src AH (AX)src src AX (DX)(AX)src DX (DX)(AX)src 2IDIV src DIV

  • 5.

    8161632 AL816AX MOV AL ,0FBH (AL)=11111011B XOR AH ,AH (AH)=00000000B 01

  • 1CBW ALAHALD7=0,AH=00HALD7=1AH=FFH

    2CWDAXDXAXD15=0DX=0000HAXD15=0(DX) =FFFFH

  • 6

    BCD1BCDDAA ADDADCBCDALDAAA-FAF=1AL06HALA-FCF=1AL60H DAAOF ADD AL BL DAA AL=28HBL=69HADDAL=91HAF=1DAAAF=1AL(AL) +06HAL97H,09H

  • 2BCDAAA

    ADDADCBCDALAXAFCFAAAAL49AF=1ALAL+06HCF=AF1AH(AH) +1AL40ADD AL BL AAAAX=0505H (BL)=09HADDAL=0EHBCDAAAAX=0104H14BCD

  • 3BCDDAS

    SUBSBBBCDALDASOFDASAF=1AL4A-FAL06H,AF1CF=lAL4A-F,AL60H,CF1SUB AL, AH DAS(AL) =97H, (AH)=39H, SUB(AL) =5EH AF=1ALBCDDASAL(AL)-06HAL=58HCF=0AL409H

  • 4BCDAAS

    SUBSBBBCDALAXAFCFAASAL4>9AF=1ALAL-06H CF=AF=1AHAH-1 AL40SUB AL, CL AASAX=0205HCL=08HSUBAF=1CF=1AL=0FDHAAS (AX) =0107H

  • 4.3.3

    81618161AND dst, src dst(dst) (src) ANDCFOF SF PFZF,CF=0OF=0AND001

  • AND AL,0FH AL=38HAL=08HAL4

    2OR dst, src dst(dst) (src)

    ORAND OR1 OR AL,80H (AL) =25H(AL) =A5H71

  • 3XOR dst, src

    XORANDXOR10AL01AL00000011B03HMOV AL 0FHXOR AL 03HAL=00001100B

  • 4NOT dst

    NOTNOT ALAL=01101011BAL=10010100B

    5TEST dst, src (dst) (src)

    TESTSF PFZF,CF=0OF=001 DL20TEST DL00000100BJZ EXIT

  • 2.

    1SHL dst, 1/ CL

    dst1CLCF0dst8161CLSHLCFOFSFZFPF12SHL AL,1 AL1(AL) X2 MOV CL, 4 CL SHL AL, CL AL40

  • 2SHR dst 1/ CL

    dst1CLCF0,4-11 SHRCFOFSF ZF PFl2SHR BL, 1BL1(BL) /2

  • 3SAL dst1/ CL

    4SAR dst1/ CL

    dst1CLCFSHR4-12SARZFSFPFOFCFCF12

  • 3.

    4CF OFSFZFPF1ROL dst, 1/ CL

    dst1CLCF4-13

  • 2ROR dst, 1/ CL

    dst1CLCF3-14

  • 3RCL dst, 1/ CL

    dst1CLCFCF4-15

  • 4RCR dst1/ CL

    dst1CLCFCF4-16

  • 4.3.4

    8086 SIDIDSES DFDF=012DF=112

  • REP,CX ZFCMPSSCASREPE/REPZREPNE/REPNZCX0ZF(REPZZF=1, REPNZZF=0) B"W"BW

  • 1.REP Sting Primitive String PrimitiveMOVSSTOSLODSREPCXCX1CX=02. CLDCLDDF=03. STDSTDDF=1

  • 4.MOVS dstsrc MOVSB MOVSW DISISIDISISI1, DI DI1 SISI2DI DI2DF=0DF=1-MOVSSIDIDF10

  • 4.1 17Datarea segment ;define data segment Mess1 db personnal computer $Datarea endsExtra segment ;define extra segment Mess2 db 17 dup(?)Extra endsCode segment Assume cs:code , ds:datarea, es:extraStart: mov ax, datarea mov ds, ax mov ax, extrea mov ds, ax

  • lea si, mess1 lea di, mess2 mov cx, 17 cld rep movsb mov ah ,4CH int 21H Code ends End start

  • 5. STOS dst STOSB STOSW STOSBSTOSWALAX(DI) (AL) ALDIDI (DI) 1 DI11 (DI) (AX) AXDIDIDI2DI22ALAXDIDFDIALAXDFDI

  • 6.

    LODS srcLODSB LODSW SIALAXDFSIAL-((SI)) SIALSI(SI)1 SI11 AX-((SI)) SIAXSI(SI)2 SI22LODSALAX

  • 7./

    REPE/REPZ String PrimitiveString PrimitiveCMPSSCAS(cx)0cx

    8.

    REPNE/REPNZ String PrimitiveString PrimitiveCMPS, SCAS(CX)0CX

  • 9. CMPS src, dstCMPSB CMPSW (SI)(DI)((SI))-((DI)) SIDI(SI) (SI)1 SI11(DI) (DI)1 DI11 ((SI))- ((DI)) SIDI(SI) (SI)2 SI22(DI) (DI)1 DI22CMPSREPE/REPZREPNE/REPNZ

  • 4.2 STR1STR2FLAG10 MOV FLAG 1 1 LEA SI STR1 SI LEA DI STR2 DI MOV CX CN CX CLD DF0 REPZ CMPSB JZ NEXT NEXT MOV FLAG 0 FLAG0NEXT HLT

  • 10.

    SCAS dstSCASB SCASW ALAX(DI)()AL- ((DI)) ALDI(DI) (DI)1 DI11 AX- ((DI)) AXDI(DI) (DI)2 DI22ALAXDIDF

  • 4.3.5

    IPCS IPIPCS

  • 1.JMP

    JMP5 1JMP SHORT opr oprSHORT8IP8 JMP SHORT hello hello MOV AL3

  • 2JMP NEAR PTR opr NEAR PTR16IP163JMP WORD PTR opr EAoprIPIPJMP WORD PTR[BX](IP)=0012HBX=0100HDS=2000H20100H=80H(20101H) =00HEA=BX=0100HPA=DS x 10H+EA=20100HIP =0080H.

  • 4JMP FAR PTR opr IP opr CS opropropr4

  • 5JMP DWORD PTR opr IP (EA) CS (EA+2)EAoprIPCSJMP DWORD PTR[BX+20H]CS=3000HIP=0012H,BX=0100HDS=2000H,20120H=A0H20121H=00H20122H=00H20123H=50HEA=BX+20H=0120HPA=DS x10H+EA=20120HIP=00A0HCS) =5000H

  • 2.

    JCC opr CC(YES/NO)ZFSFPFOFCFAbove/BelowEqualGreet/LowEqual opr8-128+127

  • 4-2

    /JE/JZ/JNE/JNZJSJNSJP/JPEJNP/JPOJOJNOJCJNC/JB/JNAE/JAE/JNB/JA/JNBE/JBE/JNA/JG/JNLE/JGE/JNL/JL/JNGE/JLE/JNG

  • 4.3 X1X2RESULT10 MOV AL, Xl AL CMP ALX2 JZ NEXT NEXT MOV RESULT, 0 RESULT0 JMP EXIT EXITNEXTMOV RESULT, 1 RESULT1EXITHLT

  • 4.4 NUM1NUM2MAX MOV AL, NUM1 AL CMP AL, NUM2 JA NEXT NEXT MOV AL, NUM2 AL JMP EXITNEXTMOV MAX. AL ALMAXEXIT

  • MOV AL, NUM1 AL CMP AL, NUM2 JG NEXT NEXT MOV AL, NUM2 AL JMP EXITNEXTMOV MAX, AL ALMAXEXIT

  • 3.CX0

    JCXZ opr(CX)=0

    4

    IP-128+127CXCX108086

  • 1 LOOPLOOP oprCXCX-1CX0LOOPCXopr2 LOOPZLOOPELOOPZ oprCXCX-1CX0ZF=13 LOOPNZLOOPNELOOPNZ oprCXCX-1CX0ZF=0

  • 4.5 NDATABUF0ADDR MOV SI OFFSET DATABUF MOV CXN MOV AL0 DEC SI LP INC SI 1 CMP AL [SI] AL LOOPZ LP 0LP JZ EXIT ZF,1,EXIT MOV ADDRSI ZF0SIADDREXIT HLT

  • 0NZF1ZF100SI

    5

    CALL NEAR PTR opr CALL FAR PTR opr RET opr

  • 4.6 MAIN PROC FAR MOV AX, DATA MOV DS, AX CALL DISPLAY DISPLAY PROC NEAR PUSH AX PUSH BX RET

  • 4.3.6

    CPU1.1CFCLC CF0STC CF12DFCLD DF0STD DF13IFCLIIF0STIIF1

  • 2.CPU

    HLTCPUCPUCPUCPUHLT

    WAITCPUCPUCPUCPUCPUWATT

  • NOP LOCKCPUESC808680878086CPUESC8087

  • 4.4 4.4.1 4.4.2 4.4.3 4.4.4 DOS4.4.5

  • 4.4.1

    1 CPUI/OCPU *.ASM(*.OBJ)

  • ASCIIASMAssembler MASM (MacroAssembler )ASM

  • (*.OBJ)LINK*.EXEDOS

  • 2.1-4[] [] [] NEXTMOV AL[SI] DATA1 DB 0F8H60H74H 1

  • 3

    CSDSFS

    16

    NEARFAR

  • (2)

    CPU

    (3)

  • 8086816

    CPU8086/8088CPU 8AHALBHBLCHCLDHDL 16AXBXCXDXSIDIBPSPDSESSSCS

  • JMPLOOPCALL

  • (4)

    3.

    808654-3

  • (1)(2)NOT3(3)1,0(4)3

  • 4-4 TYPESEGMOV AXSEG OPER1OFFSETMOV BXOFFSET DATA1TYPE4-4

  • LENGTH

    SIZEDUPDUPTYPE

    (5)

  • PTRVAR1 DB 30H40HVAR2 DW 2050HMOV AXWORD PTR VAR1MOV BLBYTE PTR VAR2VAR1VAR130HVAR1+l40HVAR2VAR22050HPTRVARlVARl+lAXVAR2BLAX=4030HBL=50H

  • DSESSSCS MOV AXES[SI]SHORTJMP-128+127THISPTRTHISTHIS AREA1 EQU THIS WORD AREA2 DB 10 DUP(?)AREAlAREA210AREA1WORDAREA2BYTEHIGHLOW16

  • 4.4.2

    CPUCPUCPUCPU1

  • DB (Define Byte)BYTE,DB1 DW (Define Word)WORD, DW2 DDDefine Double word DD24

  • DQ (Define Quadruple word)4DQ48 DT (Define Ten b)10 DT10BCD

    DB0255 -128+127DB

  • 4.7 B1 DB 20H30H 20H30HB2 DB 2*3+5 0BHS1 DB ABCDE 55ASCW1 DW 2000H2030H 2000H2030HS2 DB AB ASC41H,42HS3 DW AB 42H41H123567DB, DWAB

  • DUPn DUPnn DUPDUP

  • 4.8 DUP BUF1 DB 1 BUF2 DB 5 DUP(0) 50 BUF3 DW 8 DUP(?) 8 BUF4 DW 10 DUP1, 2, 301, 2, 10 BUF5 DB 20 DUP2,2DUP(4),6)802, 4, 4620

  • 2.

    EQULABLE1 EQU EQU

  • 4.9 EQU COUNT1 EQU 20 COUNT120 COUNT2 EQU COUNT1+10 COUNT230 C EQU CX CCX M EQU MOV MMOV B EQU DS[BP+20] DS[BP+20] VAL EQU ASCII-TABLE VALASCII-TABLEEQU

  • 2=

    = EQU COUNT EQU 20 COUNT EQU 20+1 COUNT20 COUNT20+1 EQU = EQU =

  • 3LABLE

    LABLE LABLEBYTE WORDDWORDNEARFAR.LABLEBYTEWORD

  • 4.10 LABLE VALl LABLE BYTE VAL1 VAL2 DW 20 DUP VAL2 VALlVAL2

    4.11 LABLE FNEXT LABEL FAR NNEXT ADD AX ,BX FNEXTNNEXTNNEXTFNEXT

  • 3.

    1SEGMENT/ENDS SEGMENT [] [] [] ENDSSEGMENTSEGMENTENDS

  • SEGMENT1)4BYTEWORD0PARA1640xxxx0HPAGE25680xxx00H.PARA

  • 2SEGMENT26NONEPUBLICSTACKSTACKPUBLICSTACKCOMMON

  • MEMORYMEMORYMEMORYCOMMONATAT 5800H,5800H58000H3SEGMENT3

  • 2ASSUME ASSUME [..]ASSUMESEGMENTCSDSESSSASSUMEASSUMECSCS

  • 4.12 ASSUMECSDSDATA1SEGMENT ADB 123DATA1ENDSDATA2SGEMENT BDB 123ABCDATA2ENDSCODESEGMENT ASSUMEDSDATA1ESDATA2CSCODESTART: MOVAXDATA1 MOVDSAX DATA1DSh MOVAXDATA2 MOVESAX DATA2ES CODEENDS END START

  • 4.

    CALLPROC/ENDP PROC [NEAR]/FARRET ENDPPROCNEARFARNEARENDPCALLCALL

  • 3NEARFAR.RETRETRET

  • 5.1STRUCENDS STRUC ENDS4.13 STUDENT STRUC NAME1 DB WANG NUMBER DB ENGLISH DB MATHS DB COMPUTER DB STUDENT ENDSSTUDENT

  • 2

  • DUP4.14 DATA STRUC A1 DB 20H A2 DB 10H30H A3 DW A4 DB ABCDE' A5 DW DUP

  • 4.15 STUDENTS1 STUDENT ZHOU11879089S2 STUDENT WANG12688371S3 STUDENT CHEN1392869533(3 []S1ENGLISH1MOV AL S1ENGLISH2MOV BX OFFSET S1 MOV AL[BX] ENGLISH

  • 6.NAMENAME ENDEND[]

  • ENDSTARTSTARTPUBLICPUBLIC[]EXTRNPUBLICEXTRN[]

  • 7.ORG10 ARRAY DW 4000H5000H6000H COUNT EQU $ - ARRAY/ 2 COUNT3ARRAYORG

  • 2ORGORG 00ORGORGORG 0100H0100HORG $+88

  • 4.4.3

    exeCOM1.exeNAME SEGMENT ENDS SEGMENT

  • ENDS SEGMENT ENDS SEGMENT ASSUME CSDS ESSSstart1 2 n MOV AH, 4CH INT 21H ENDS END start

  • 43SEGMENTENDSASSUMEDSESMOV AX MOV DSAS DSMOV AXMOV ESAX ES

  • CS MOV AXMOV CSAXDOSDOS21H4CHDOS, MOV AH, 4CH INT 21H80861MB

  • 2.ComNAME SEGMENT ASSUME ORG 100HStart JMP begin begin 1 2 n MOV AH, 4CH INT 21H ENDS END start

  • Com100HENDEXEJMPJMP100H

  • 3.execomexecomexe14comexecom100Hexe64KB256KBcom64KBexecomSPcomexecomdebugaecomexeexe2bincomc>exe2bin exe .com

  • 4.4.4 DOS 8086MS-DOSMS-DOS DOS80DOS DOS MOV AH INT 21H(1) AH(2) (3) INT 21H(4)

  • 1.1MOVAH1 INT21HASCIIALALASCII ASCIICTrl + BreakALASCIIAL2.2MOV DLASCII MOV AH2 INT 21HDLDLCTrl + Break

  • 3.(5) MOV DL , ASCII MOV AH , 5 INT 21HDL4.(8) MOV AH , 8 INT 21H ASCIICTrl + BreakASCIIAL ALASCII

  • 5.09 MOV DX , MOV AH ,09 INT 21HDXDXDS$

  • 4.16 9 DATASEGMENT STRDB 0DH0AHNice to meet youDATAENDSCODESEGMENT ASSUMEDSDATACSCODEBEGINMOVAX DATA MOVDSAX ;DS LEA DXSTR MOVAH 9 ; INT21H MOVAH4CH DOS INT 21HCODE ENDSEND BEGIN

  • 6.10LEADX MOVAH10 INT21HDXDS$1~2550 0AH

  • DATA SEGMENT BUF DB 81 (0) DB ? DB 81 DUP(?) DATA ENDS

    7.DOS4CHMOVAH4CHINT21H

  • 4.4.5

    1.8086IBM PC/XT

  • DOSDOSDOS 5.0Windows EDITUltraEditWORD 8086ASM.EXEMASM.EXEMASM.EXEo 8086LINK.EXE DEBUG.COM

  • 2.

    4-17

    4-17

  • 1UltraEdit.ASM.ASM2MASM.EXE .OBJ3LINK.EXE .EXE4DOS

  • 4.4.5 1.4-17

  • 4.17 ABCC89HAB/ADEDATASEGMENT ADW2 BDW-1 CDW1 DDW? EDW?DATAENDSCODESEGMENT ASSUME CS:CODE,DS:DATASTART: MOVAX,DATA

  • MOVDS,AXMOVAX,CSUBAX,89HCWD MOVCX,DXMOVBX,AXCX,BXMOVAX,AIMULBABADDAX,BXADCDX,CXIDIVAAXDX MOVD,AXMOVE,DXMOVAH,4CHINT21HCODEENDSENDSTART

  • 4.18 DAT6AHASCIIASCII09ASCII30HAFASCII37HASCII30H39H09ASCII30H41H46HAFASCII37HDOSBIOSASCIIDOS2

  • DATASEGMENTDATDB6AH DATAENDSCODESEGMENTASSUME CSCODEDSDATA START: MOVAXDATA MOVDSAX MOVDLDAT MOVALDLAL MOVCL4 SHRDLCL ADDDL30H6ASCII

  • MOVAH02HINT21HMOVDLAANDDL0FHADDDL37HAASCIIINT21HMOVAH4CHINT21HCODEENDSENDSTART

  • 2.

    4-18

  • N

  • 4.19 MAXXYZ4-20STACSEGMENT STACKDB 200 DUP0STACKENDSDATASEGMENTXDW 00ABHYDW 5ZDW 200MAXDW DATAENDSCODESEGMENT ASSUME DSDATASSSTACKCSCODE

  • START MOVAXDATA MOVDSAX MOVAXX CMPAXYAXY JGL1 MOVAXYL1 CMPAXZAXZ JGEXIT MOVAXZEXIT MOVMAXAX MOV AH4CH INT 21HCODEENDSENDSTART

  • 4.20

    XY4-21

  • DATASEGMENTXDB -10YDB DATAENDSSTACKSEGMENT STACK DB 200 DUP0STACKENDSCODESEGMENT ASSUME DSDATASSSTACKCSCODESTART MOVAXDATAMOVDSAXCMPX00 JGEA1X0A1MOVY-1X 0-1YJMPEXIT A1JGA2X0A2MOVY0X=00YJMPEXITA2MOVY1X01Y EXITMOVAH4CHINT21H CODEENDSENDSTART

  • 4.21 DAT

    4.6 DATASEGMENTDATDB0CH DATAENDS CODESEGMENTASSUME CS:CODE,DS:DATA START: MOVAX,DATAMOVDS,AXMOVAL,DATCMPAL,9JGOTHRADDAL,30H1009JMPDISP OTHR: ADDAL,37H10AF DISP:MOVDL,ALMOVAH,2INT21H DONE: MOVAH,4CHINT21H CODE ENDS ENDSTART

  • 3.

  • 23

  • 2344-22

  • 4.22 1400RSLT1400200200200CX200CX2CX400DATASEGMENTRSLTDWDATAENDSCODESEGMENTASSUME CS:CODEDS:DATASTARTMOVAXDATAMOVDSAXMOVCX400XORAXAXNEXTADDAXCXDECCXDECCX JNZNEXT200MOVRSLTAXMOVAH4CHINT21HCODEENDSENDSTART

  • DATASEGMENTRSLTDWDATAENDSCODESEGMENTASSUME CS:CODEDS:DATASTARTMOVAXDATAMOVDSAXMOVBX0MOVCX200XORAXAXNEXTINCBXINCBX ADDAXBXLOOPNEXT200MOVRSLTAXMOVAH4CHINT21HCODEENDSENDSTART

  • 4.23 10MAX

    4-22a4-23BUF MAX CX BX AH

  • DATASEGMENT BUF DB120ABH0CDH 99H0DB156H0CCH 76H56H MAXDBDATAENDSCODESEGMENT ASSUME CS:CODE, DS:DATASTART: MOVAXDATA MOVDSAX LEABXBUF MOVAH [BX] MOVCX 9LOP INCBX CMPAH [BX] AH JAENEXT AH MOVAH [BX] NEXTLOOP LOP MOV MAX AH MOVAH4CH INT21HCODEENDSENDSTART

  • 4.24 DAT,*RSLT

    *4-22b

  • DATASEGMENT DATDW1234H0ABH0ABCDH9999H0DW 1111H1010H, 15678H 0BBCCH DW 9876H5678H0FFH* RSLTDWDATAENDSCODESEGMENTASSUME CS:CODE,DS:DATASTART: MOVAX,DATAMOVDS,AXLEASI,DATSI MOVAX,[SI]NEXT: CMPWORD PTR[SI],*JZSAVECMPAX[SI]JGEGOONAXGOONMOVAX,[SI]AXGOON: ADDSI2JMPNEXTSAVE MOVRSLT,AXMOVAH,4CHINT21HCODEENDSEND START

  • 4.25 STR1STR2MATCHNO MATCH4-24

  • DATASEGMENT Str1 DBgood bye! COUNTEQU $- Str1 Str1 DBgood bye! mess1DBMATCH,13,10,$ mess2DBNO MATCH,13,10,$DATAENDSCODESEGMENTASSUME CS:CODE,DS:DATA,ES:DATASTART:MOVAXDATAMOVDSAXMOVESAXLEA SIStr1LEA DIStr2MOVCXCOUNTCLDREPZCMPSB JZ MATCHLEA DXmess2JMP short DISPMATCH: LEA DXmess1DISP: MOVAH09INT 21HMOVAH,4CHINT21HCODEENDS END START

    END START

  • 4

    CALLRET4-25

  • 4.26 0DATA SEGMENT ARR DW -123456670-34-9089670256 CN EQU -ARR/2 ZER DW PLUS DWDATAENDSCODE SEGMENT ASSUME DSDATA, CSCODESTART:MOVAXDATAMOVDSAX MOVSIOFFSET ARR SiMOVcxCNCXCALLPZN PZN MOVZERBX0ZER MOVPLUSAXPLUS MOV AH4CH INT 21HDOSPZN 0SiCXAX0BXAXBXCXDXSIPSW

  • PZN PROC NEAR PUSH SI PUSH DX. PUSH CX XOR AXAX XOR BXBX 0PZN0MOV DX,[SI] DX CMP DX0 DX0 JL PZN1 0PZN1 JZ ZN 0ZN INC AX AX1 JMP PZN1 PZN1ZN INC BX 0BX1PZN1ADD SI2 2 LOOP PZN0 POP CX POP DX POP SI RET PZN ENDP CODE ENDS END START

  • (1)(2)CPU(3)(4)RETCALL

  • 80868086CPU33 80867 Intel 8086CPU6

  • DOS 34