第四章 汇编语言程序设计 3 - 5

Click here to load reader

Upload: mercia

Post on 11-Jan-2016

135 views

Category:

Documents


5 download

DESCRIPTION

第四章 汇编语言程序设计 3 - 5. 一、顺序结构程序设计. 二、分支结构程序设计. 四、码转换程序设计. 三、循环程序设计. 五、列和表. 六、子程序. 七、参数传递技术. 习题 : 4 - 4 , 4 - 6 , 4 - 8 4 - 11 , 4 - 13 , 4 - 16. 例:内存中 TABLE 开始存放 0~9 的平方值,通过人机对话,当任给定一个 X ( 0~9 ),查表得 X 的平方值,放在 AL 中。. DATA SEGMENT - PowerPoint PPT Presentation

TRANSCRIPT

  • 35: 444648 411 413416

  • TABLE0~9X0~9XALDATA SEGMENT TABLE DB 0149162536496481 BUF DB Please input one number0DH0AH,$DATA ENDSSTACK SEGMENT PARA STACK STACK DB 50 DUP TOP THIS WORDSTACK ENDSCODE SEGMENT ASSUME CSCODEDSDATASS STACKMAIN PROC FAR :TOP

  • MAIN ENDP MAIN CODE ENDS END START START MOV AXDATA MOV DSAX MOV AXSTACK MOV SSAX MOV SP OFFSET TOP SP MOV BXOFFSET TABLE BXNEXT MOV DXOFFSET BUF MOV AH9 9 INT 21 MOV AH1 1,( INT 21 AL MOV AH0 AND AL 0FH ADD BXAX MOV AL[BX] AL MOV AH4CH DOS INT 21H RET DOS

  • 4-1

  • 1. ASCII2. SEGMENTOFFSETTYPE

  • 3. CALLSEGMENTOFFSETTYPENEARFAR

  • 42 MASM + * / MOD SHL SHR

  • 43 CPUMASMDBDWDDDQDTEQUSEGMENTENDSASSUMEPROC ENDPORGENDNAME

  • 44 DOS DOSPC/XTDOSDOS * DOSDOS * DOSBIOSINT n n= 0 ~ 4 8088/8086CPU n= 5 ~ 1FH BIOS n= 20 ~ 3FH DOSINT 21100

  • DOSINT 21

    1

    *

    AL=

    2

    DL=

    7

    AL=

    8

    *

    AL=

    9

    ($)

    DSDX=

    0A

    DSDX=

    4C

    DOS

    AL=

  • BUFINAH 09H01H09H0AH09H4CH

  • DATASEGMENTSTRING1DB DO YOU WANT TO INPUT DB STRING(Y/N)0DH0AHSTRING2DB PLEASE INPUT STRING. DB 0DH0AHBUFIN DB 20H 20HBUFINI DB 20H DUP(?) DATAENDSCODESEGMENTASSUME CSCODEDSDATAESDATASTARTPROC FARBEGINGPUSH DS MOV AX0 PUSH AX MOV AXDATA MOV DSAX MOV ESAX DSES LEA DXSTRING1 MOV AH09H INT 21H STRING1 MOV AH01H INT 21H 1AL

  • CMP ALYJNE DONELEA DXSTRING2MOV AH09HINT 21H STRING2LEA DXBUFINMOV AH0AHINT 21H BUFINMOV ALBUFIN1CBW BUFIN LEA SIBUFIN2ADD SIAX SI MOV [SI] MOV AH09HLEA DXBUFIN2INT 21H DONERETSTARTENDPCODEENDSEND BEGIN

  • 45

  • 132*+

  • name 32 bit multiplyDATA SEGMENTMULNUM DW 00000FFFFH00000FFFFH4DUP( ?) DATA ENDSSTACK SEGMENT PARA STACK STACKSTAK DB 100 DUP TOP EQU LENGTH STAKSTACK ENDSCODE SEGMENT ASSUME CSCODEDSDATASS STACK ES DATASTART PROC FARBEGIN PUSH DS MOV AX0 PUSH AX MOV AX, DATA MOV DSAX MOV ES AX MOV AXSTACK MOV SSAX MOV SP OFFSET TOP SP

  • LEA BXMULNUMMULU32: MOV AX [BX] ; B AX MOV SI [BX+4] ; DSI MOV DI [BX+6] ; CDI MUL SI ; B*D MOV [BX+8] AX ; 1 MOV [BX+0AH] DX MOV AX [BX+2] ; AAX MUL SI ; A*D ADD AX [BX+0AH] ADC DX 0 ; 2L1H MOV [BX+0AH] AX 1 MOV [BX+0CH] DX MOV AX [BX] ; BAX MUL DI ; C*B3

  • ADD AX [BX+0AH] 31 ADC DX [BX+0CH] MOV [BX+0AH] AX 2 MOV [BX+0CH] DX PUSHF MOV AX [BX+2] A AX MUL SI AC4 POPF ADC AX [BX+0CH] ; 4L2H ADC DX 0 MOV [BX+0CH] AX MOV [BX+0EH] DX ; 3 RETSTART ENDP CODE ENDS END BEGIN

  • 1 2BUFFER(X)BX(Y)

  • 3BUFNN
  • 2 8P1P2 P88 MOV AH1 INT 21H 1 CMP AL1 JE P1 1P1 CMP AL2 JE P2 2P2

    CMP AL8 JE P8 8P8 JMP ST P1 1 P2 2

    P8 8 ST HLT

  • 31=+ AND AL0FH ADD ALALADD BXAXJMP WORD PTR [BX]MOV BXOFFSET BASE

  • MOV AH1 ALINT 21HAND AL0FHMOV AH0MOV BLALADD ALALADD ALBL =*3MOV BXOFFSET BASEADD BXAX JMP BX 2

  • 3

  • 4BUFFERN=10M=80DX98AX CX=9AX CX=8AX CX=7AX CX=6AX CX=5AX CX=4AX CX=3AX CX=2AX CX=1AX CX=0AX=80 CX=10 DX=10AX BUFFER[SI] 9082AX BUFFER[SI-2] AX BUFFER[SI-2] 80DX=11AX BUFFER[SI-2] MSI=2*DX1CMP AXBUFFER[SI] MOV DIOFFSET BUFFERCLDREPNE SCASWMOV BXBUFFER[SI]MOV BUFFER[SI+2]BXMOV BUFFER[SI+2]AX

  • AX CX=9 DI=BUFFER+2AX CX=8 DI=BUFFER+4AX CX=7 DI=BUFFER+6AX CX=6 DI=BUFFER+8AX CX=5 DI=BUFFER+AAX CX=4 DI=BUFFER+CAX CX=3 DI=BUFFER+EAX = CX=2 DI=BUFFER+10HAX=80 CX=10 DI=BUFFER9098BX=[DI]=BUFFER+10H DI-2 CX-1=1BX=[DI+2]=BUFFER+12H DI-2 CX-1=0DX=9M MOV DIOFFSET BUFFERCLDREPNE SCASW MOV BX[DI]MOV [DI-2]BXADD DI2

  • MAXNCXDXDI CLD

  • DATA SEGMENT BUFFER DW 5103247537789106115124 N DB 10 M EQU 80DATA ENDSCODE SEGEMENT ASSUME CSCODEDSDATAESDATAMAIN PROC FARSTART PUSH DS SUB AXAX PUSH AX MOV AXDATA MOV DSAX MOV ESAX MOV AXM AX MOV CXN CX MOV DXN MOV DIOFFSET BUFFER CLD REPNE SCASW

  • JE DEL ZF=1 DEC DX MOV SIDX ADD SIDXL1 CMP AXBUFFER[SI] JL L2 L2 MOV BUFFER[SI+2] AX JMP L3L2 MOV BXBUFFER[SI] MOV BUFFER[SI+2] BX SUB SI2 JMP L1L3 ADD DX1 JMP NEXT1DEL JCXZ NEXT DEL1 MOV BX[DI] MOV [DI-2]BX ADD DI2 LOOP DEL1NEXT DEC DX NEXT1 RETMAIN ENDPCODE ENDS END START

  • CX(CX)1CX(CX)0 5BLOCK10016bitMAX99()1

  • NAME FOUND DATA SEGMENT BLOCK DW 65C8H 35 694AH0A398H COUNT EQU ($BLOCK)/2 1 $ MAX DW ? MAXDATA ENDS STACK SEGMENT DB 100 DUP(?) 100STACK ENDS CODE SEGMENT ASSUME CSCODE DSDATASSSTACKFOUND PROC FAR DOSBEGIN PUSH DS DOSDS SUB AXAX DOS PUSH AX

  • MOV AXDATA MOV DSAX DS LEA BX BLOCK MOV AX[BX] INC BX INC BX MOV CXCOUNTAGAINCMP AX[BX] JG NEXT MOV AX[BX]NEXT INC BX INC BX LOOP AGAIN MOV MAXAX RET DOS FOUND ENDP CODE ENDS END BEGIN

  • 2 616bit N=90000 X1=90000/200+2=452 X2=90000/452+452/ 2 = 326 X3=90000/326+326/ 2 = 301 X4=90000/301+301/ 2 = 300

  • 3 * * *

  • BUFFER101 2 3

    BUFFER(

    BUFFER

    BUFFER

    BUFFER

    BUFFER

  • 1DATASEGMENTBUFFER DW 22-1240COUNT EQU BUFFER (COUNT=20)DATAENDS3BUFFERMOVAXBUFFER [SI]; ((SI)+OFFSET BUFFER) AX Ej AXCMPAX,BUFFER [SI-2]; EjEj-1 PSW2109MOVCXCOUNTMOVSICXDECSIDECSISHRCX120/210DECCX10-194XCHGAXBUFFER [SI-2]MOVBUFFER[SI]AX AX

  • 1ASCII

    ()ASCII

    ASCII

    9

    0H

    30H

    30H

    1H

    31H

    2H

    32H

    3H

    33H

    4H

    34H

    5H

    35H

    6H

    36H

    7H

    37H

    8H

    38H

    9H

    39H

    10

    AH

    41H

    37H

    30H07H

    BH

    42H

    CH

    43H

    DH

    44H

    EH

    45H

    FH

    46H

  • ASCIIBUFFERSTRINGA42C533B4134433233354233

  • 1AL 2ASCII1ASCIISI 2SI

  • P146313 NAME HEX_CHANGE_ASCIIDATASEGMANT L1 DW 2 216 STRINGDB 34H98H L2 DW 1 ASCII BUFFERDB 2*2 DUP (?) 4DATAENDSCODESEGMENTASSUME CSCODEDSDATA ESDATA

  • STARTPROC FARBEGINPUSH DSMOV AX0PUSH AX DOSDATAMOV AXDATAMOV DSAX DSMOV ESAX ESMOV CXL1LEA BXSTRING LEA SIBUFFER MOV AXCXSAL CX1 L2MOV L2CXMOV CXAX

  • AGAIN MOV AL[BX]AL DLMOV DLALAND AL0FH 404CALL CHANGE ASCIIMOV ALDL PUSH CX CLCXMOV CL4 44SHR ALCL 40POP CX CXCALL CHANGE ASCIIINC BX LOOP AGAIN RETSTARTENDP

  • CHANGE PROCCHANGECMP AL10JL ADD_0ADD ALA010 ASCII07H ADD_0 ADD AL0 MOV [SI]AL INC SI RETCHANGE ENDPCODE ENDS END BEGIN

  • 2ASCII(BCD) STRINGASCIIBCDBUFFEASCIIL1BCDBUFFE

  • () BUFFERKEY1

  • NAMEADD_KEYDATASEGMENTBEFFERDB 10,ABCDEFGHIJDB KEYDB $DATAENDSCODESEGMENTASSUME CSCODEDSDATASTARTPROCFARBEGINPUSHDSMOVAX0PUSHAXMOVAXDATAMOVDSAXMOVESAX

  • LEADIBUFFER MOVCH0MOVCL[DI] INCDI CLDMOVALKEYREPNZ SCASBJEDONEMOV[DI]ALINCBUFFERDONERETSTARTENDPCODE ENDSENDBEGIN

  • STRINGCHARCHAR60 PTRN1PTRN

  • 1() INT[()/2]2 > < 3 (INT)

  • (PROC)CALLRET

  • * * * *

  • * PROC CSCALL (NEAR) PROC CSCALL FAR* (1) (2) (3)()*

  • BCD2BINBCDCXALBCDALBCD2BIN PROC NEARFAR PUSH CX MOV CHAL AND CH0FH MOV CL4 SHR ALCL /16 MOV CL10 MUL CL *10 ADD ALCH + POP CX RETBCD2BIN ENDP* * PUSHPOP

  • MOV CXLENGTHMOV BXOFFSET BUFFER1MOV SI OFFSET BUFFER2CALL SUBR

  • DATA SEGMENT ARY1 DW 100 DUP SUM1 DW ARY2 DW 100 DUP SUM2 DW DATA ENDSSTACK SEGMENT STACK SA DW 50 DUP TOP EQU LENGTH SASTACK ENDSCODE SEGMENT ASSUME CS CODEDSDATASSSTACKMAIN PROC FARSTART PUSH DS SUB AXAX PUSH AX MOV AXDATA MOV DSAX MOV AXSTACK MOV SSAX MOV SPTOP

  • LEA SIARY1 MOV CXLENGTH ARY1 CALL SUM LEA SIARY2 MOV CXLENGTH ARY2 CALL SUM RETMAIN ENDPSUM PROC NEAR XOR AXAXL1 ADD AXWORD PTR[SI] INC SI INC SI LOOP L1 MOV WORD PTR [SI]AX RETSUM ENDPCODE ENDS END STARTSI

  • CALL SUBRDW BUFLDW BUFADW BUFB* * * PUSH BP BP MOV BPSP

    MOV BX[BP+2] IPBX MOV CX[BX] BUFLCX MOV SI[BX+2] BUFASI MOV DI[BX+4] BUFBDI

    ADD BX6 MOV [BP+2]BX

    POP BP RETSP-1SP-1BPLBPH

  • DATA SEGMENTBUFFER1 DW BUFABUFFER2 DW BUFBLENGTH DW BUFL

    DATA ENDSLEA BXBUFFER1PUSH [BX] PUSH [BX+2]PUSH [BX+4]CALL SUBRSUBR PUSH BP MOV BPSP MOV CX[BP+4] MOV DI [BX+6] MOV SI [BX+8]

    POP BP RET 6SP-2SP-1SPIPHBUFAH BUFALBUFLLBUFBLBUFLHBUFBHIPLSP-7SP-5SP-6SP-8SP-4SP-3BPLBPHSP-9SP-A

  • MDATA SEGMENT ARY1 DB 20 DUP SUM1 DW ARY2 DW 100 DUP SUM2 DW MDATA ENDSMSTACK SEGMENT STACK SB DW 100 DUP TOP EQU LENGTH SBMSTACK ENDSMCODE SEGMENT ASSUME CS MCODEDSMDATASSMSTACKMAIN PROC FARSTART PUSH DS SUB AXAX PUSH AX MOV AXMDATA MOV DSAX MOV AXMSTACK MOV SSAX MOV SPTOP

  • MOV AXOFFSET ARY1 PUSH AX MOV AXSIZE ARY1 PUSH AX CALL FAR PTR PADD MOV AXOFFSET ARY2 PUSH AX MOV AXSIZE ARY2 PUSH AX CALL FAR PTR PADD RETMAIN ENDPMCODE ENDSPCODE SEGMENT ASSUME CS PCODEDSMDATASSMSTACKPADD PROC FAR PUSH BX PUSH CX PUSH BP MOV BPSP PUSHF

  • MOV CX[BP+10] MOV BX[BP+12] MOV AX0NEXT ADD AL[BX] DAA MOV DLAL MOV AL0 ADC ALAH DAA MOV AHAL MOV ALDL INC BX LOOP NEXT MOV [BX]AX POPF POP BP POP CX POP BX RET 4PADD ENDPPCODE ENDS END START

  • DATA SEGMENT P DW 125368 SUM DW DATA ENDS

    MOV SIOFFSET PCALL PADD

  • PADDAXBXCXDXMOV AX[SI] ADD AX[SI+2] MOV SUMAX CALL DISPAXBXCXDXRETDISPBX04HCH ASCIIRET

  • NN>=0N=N*N-1*N-2 *1 N=1 N=0 N= N*N-1NFACT NAL=NDX=NCX

    DATA SEGMENT D1 DB 6 D2 DW 2 DUP DATA ENDS

    MOV BXOFFSET D1MOV AL[BX]CALL FACTMOV [BX+1]DX

  • FACT

  • SEGMENT ....ENDS SEGMENT ENDS SEGMENT .ENDSSEGMENT ....ENDSSEGMENTENDS

  • Align Type* BYTE* WORD* PAGE256* PARAPARA

  • Combine Type* NONE NONE* PUBLIC * COMMON* AT16* STACK* MEMORY

  • Class Name
  • ASSUMEASSUME CSDSSSES ASSUMECS SSSP

  • 16NUMBERASCIIBCDDATASEGMENTTABLEDB 0123456789ABCDEF ASCIIDB 012345678910H11H12H DB 13H,14H15H BCDDB 013298 BUFFERDB 3 DUP(?) (3)DATAENDS

    1 2

  • 2XLATMOVBXTABLEMOVAL NUMBERXLAT XLAT (BX) (AL)1 LEASI TABLEMOVBXNUMBERMOVAL[SI][BX] (SI) ASCIITABLE BCD TABLE16 TABLE32 (BX)