Click here to load reader

第四章 汇编语言 程序设计

Embed Size (px)

DESCRIPTION

第四章 汇编语言 程序设计. 任课教师 : 王晓甜. [email protected]. 1. 2. 3. 4. 5. 6. 汇编语言程序设计基础. 子 程序 的设计. 源程序的汇编、链接与调试. 分支程序的设计. 循环程序的设计. 综合程序的设计. 本章要点. 1. 汇编语言程序设计基础. 算法. 所谓算法,简单地说就是计算机能够实现的有限的解题步骤。我们知道,计算机只能进行最基本的算术运算和逻辑运算,要完成较为复杂的运算和控制操作,必须 选择合适的算法,这是正确编程的基础。. - PowerPoint PPT Presentation

Citation preview

PowerPoint Template

[email protected]

[email protected]@mail.xidian.edu.cn1. [email protected] 1234I/O5()1Reg2 3 4 5 [email protected]@mail.xidian.edu.cn61.1 7 ()1~4[] [][] ()1321.1.1 8(1): A~Z, a~z; : 0~9; : ? . @ _ $ . 31, 9(2) 8086/8088 (3) RET COUNT INC CX MOV CXDI ADD AX[BP4] (4) 101 / ANDORLT MOV AX, [DI+BX] ADD AX, FIRST+1MOV AX, ((choice LT 20) AND 5) OR ((choice GE 20) AND 6 )

1.1.2 11+, -122 1) $$BLOCK DB HELLO!NUM EQU $-BLOCKHELLO!BLOCK$;NUM 613SEG OFFSETSEG: OFFSET: SLOT DW 25MOV AXSLOT SLOTAX MOV AXSEG SLOT SLOTAX MOV AXOFFSET SLOT SLOTAX 143) TYPE 3-1 NEAR FAR 1 2 4 1 2

154) LENGTH SIZEDUPLENGTH: SIZE

SIZE=LENGTH TYPE MULT-WORD DW 50 DUP0 LENGTH MULT-WORD=50 SIZE MULT-WORD=100 TYPE MULT-WORD=2163 1) PTR PTR F2 DW 3456HMOV AL, BYTE PTR F2MOV [BX], 3MOV BYTE PTR [BX], 3; AL: 56H; ; 171.1.3 181 (B)(Q)(H)(D)()100 01100100B 244Q 64HBD This is a classroom.192 COUNT EQU 10 NAME=J ASCII 203 21(SEG) (OFFSET) ()(TYPE) DB(1) DW(2) DD(4) NEARFAR 22DATA SEGMENT X DB 5, 4 Y DW 40H Z DD 2030HDATA ENDS05H04H40H00H30H20H00H00HDS:0000HXYZX,Y,Z234 , PORTVAL1 OFFSET SUM SEG SUMTYPE CYCLE 245 SUM2CYCLE5 SUM2CYCLE5SUMCYCLESUMCYCLE25 251.1.4 26.ASM.OBJ.EXE MASM.EXE LINK.EXE1)2)3)4)

27DOSDOS28.EXEROM00000HDS,ES100SSFFFFFHCS30INT 20H RETROMDS,ESSSCSDS,ESCPUPSP PUSH DS MOV AX, 0 PUSH AXDS0000HRETPSP0000HCSIPDOSINT 20H00H00HPSPLPSPH314CH) MOV AH, 4CH INT 21HDOS

321.2 33CPUCPU 341.2.1 DBBUFFER DB 2, 3STRING DB NOON03H02HBUFFERDWBUF DW 2, 3, 505H00H00H03H00H02HBUFSTRINGDD: 4DQ4DT1035? n DUP( )nARRAY DB 100 DUP(?)100ARRAY100DATA1 DB 100 DUP(AB)20010041H, 42H41H 42H 41H 42H 41H 42H36VAL DB 14 DUP (5, 2 DUP(FFH, 0 ))VAL101,5,FFH,0,FFH,0,5,FFH,0,FFH DW 1, 2, 5 DUP(YES,2 DUP(3)), 371.2.2 EQU = EQUPURGEPURGE TIMES TIMES EQU 100TIMES EQU 50BUF DB TIMES DUP(?)BUF DB 50 DUP(?)BETA = TIMES-2BETA = TIMES+5 ;38DATA SEGMENT A DW 3 B DW 4 L EQU B-ADATA ENDS03H00H04H00HDS:0000HL2391.2.3 SEGMENTENDS4CodeDataStackExtraENDS SEGMENT [] [] [] ENDS401)2),,,,256(PAGE)**** **** **** 0000 000016***00H (256) (256)00000H000FFH00100H00200H001FFH4116(PARA)**** **** **** **** 000016****0H

(16) (16)***00H***0FH***10H***1FH***20H()422(WORD)(BYTE)(PAGE)(PARA)****0HBYTE: WORD: ;PARA: ();PAGE: 433)NONE: PUBLIC44COMMON: COMMONSTACK: STACKSTACKSSSPSSSP145MEMORY: AT: 464) (CODE)(DATA)(STACK)()471.2.4 ASSUMEASSUME : [: ] CODE SEGMENT ASSUME CSCODEDSDATASSSTACK 48 DOSCSSSDSDSMOVES CODE SEGMENT ASSUME CSCODEDSDATASSSTACK MOV AXDATA DATAAX MOV DSAX AXDSDS CODE ENDS 491.2.5 PROCENDP () PROCENDP PROC [] RET ENDP PROCENDP FARNEAR RET 50MYCODE SEGMENTASSUME CS: MYCODESUB1 PROC FAR RETSUB1 ENDPSUB2 PROC NEAR RETSUB2 ENDPCALL SUB2MYCODE ENDSFAR: CSIPNEAR: IP()CALL: SUB251100msDELAY PROC MOV BL, 10AGAIN: MOV CX, 2801HWAIT1: LOOP WAIT1 DEC BL JNZ AGAIN RETDELAY ENDP521.2.6 531) MACRO ()ENDMMACRO ENDMSHIFT MACRO MOV CL, 4 SAL AL, CLENDM: AL4(16)IN AL, 5FHSHIFTOUT 5FH, AL54XYSHIFT MACRO X, Y MOV CL, Y SAL X, CLENDMMOV BX, WORD PTR BUFSHIFT BX, 4MOV WORD PTR BUF , BXBX4BXX4Y551.2.7 ORG CODE SEGMENT ORG 0100H MOV AX, 0CODE ENDSMOV0100HDATA SEGMENT ORG 2000H NUM DB 05DATA ENDSNUM2000H561.2.8 ENDENDEND [email protected] 1DATA SEGMENT X DB 3 Y DB 5DATA ENDSSTACK SEGMENT STACK STACK DB 100 DUP(?)STACK ENDSCODE SEGMENT ASSUME CS:CODE, DS: DATA, SS:STACK BEGIN MOV AX, DATA MOV DS, AX MOV AH,4CH INT 21H CODE ENDS END BEGINDS(DOS59 2DATA SEGMENT X DB 3 Y DB 5DATA ENDSSTACK SEGMENT STACK STACK DB 100 DUP(?)STACK ENDSCODE SEGMENT ASSUME CS:CODE, DS: DATA, SS:STACK BEGIN PROC FAR PUSH DS XOR AX, AX PUSH AX MOV AX, DATA MOV DS, AX RET BEGIN ENDPCODE ENDSEND BEGINPSPDOSDS([email protected] 1myfileasm 2myfileasmMASM TASMmyfileobj3myfileobjLINK [email protected] CPUASM

myfileasmxtwang@mail.xidian.edu.cn622.MASM.MASMmyfileobjmyfilelstmyfilecrf [email protected] MASM sourceobjectlistcrossrefsource : object : list : crossref

MASM myfilemyfileobjMASM myfileMASM myfilelist [email protected](.lib)(.exe)(.map)

LINK object.exeLINK object [email protected]

MASM

DEBUG [email protected]/[email protected] DEBUG [d:][path][.]DEBUGDEBUG-d:path.exemyfile.exe: DEBUG [email protected]. DEBUGR4.2 PSW8OFDFIFSFZFAFPFCF4.34.2

2.xtwang@mail.xidian.edu.cn10OFOVNVDFDNUPIFEIDISFNGPLZFZRNZAFACNAPFPEPOCFCYNC2.xtwang@mail.xidian.edu.cn3. AXR R AXDEBUGAXAX 0000 [email protected]. R R FNV UP EI PL NZ NA PO NC - [email protected]. U1U CSIP32U2U addraddr3U addr1addr2 [email protected]. GG1G CSIP2Gaddr addr3Gaddr1addr21addr12addr224G addr CSIPaddraddr [email protected].

D

E

F

[email protected] [Daddr]Offset128DaddrDSDSESCSSSOffset2D128DS03D [Daddr]Offset1 Offset21Offset12Offset2 [email protected] [Daddr]OffsetE2E [Daddr]Offset Expression; ExpressionE100 10 20 30 40 50DS100H510H 20H 30H 40H [email protected] [Daddr]Offset1 Offset2 ExpressionExpression1Offset12Offset2F100 200 55 AADS100H200H55HAAH2F [Daddr]Offset L length ExpressionExpressionOffsetlengthF100L100 55 [email protected] [Daddr]Offset1 Offset2 Offset31Offset12Offset2Offset3M100 200 300DS100H200H300H2M [Daddr]Offset1 L length [email protected]

DEBUGTPRTPTPCALL subINT [email protected] [Daddr]OffsetOffsetDEBUGA2AACSIP [email protected] [path] file fileL1L [Daddr]OffsetOffset2L CS100HBXCX32BX16CX16 [email protected] [Daddr]Offset [email protected]

[email protected] [email protected] You [email protected] [email protected]

[email protected]@mail.xidian.edu.cnIP4-1INDATn0 n 9 INSTR88D

[email protected] SEGMENT ;INDAT DB 8DATA ENDSCODE SEGMENT ; ASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX ;DS

MOV DL,INDAT OR DL,30H MOV AH 2 INT 21H MOV DL,'D' MOV AH,2 INT 21H

MOV AH,4CH INT 21H CODE ENDS END [email protected]

PSW-128+127 [email protected]

1CMP AL, BL; JZ LABEL JMP OVER LABEL: MOV AH 00H ..OVER:2

LABEL: DEC BL; JZ LABEL OVER:

[email protected]

CMP AL, BL; JZ LABEL ,A MOV AH 0FFH B ..JMP OVER LABEL: MOV AH 00H OVER: .

[email protected]

CMP AL, BL; JAE LAB1 LAB1 MOV AH, 0FFH AJMP OVER LAB1: JZ LAB2; LAB2 MOV AH, 00H BJMP OVER LAB2: MOV AH, 55H; COVER: .

[email protected] 3.10 4 BX120AL0FFH

TEST BX , 0006HJZ L1 XOR AL, ALJMP L2 L1: MOV AL, 0FFH L2: [email protected] VAR1VAR2VAR33 VAR1VAR3JAJAEJBJBE

[email protected]

AL VAR2AL VAR3 AL [email protected] SEGMENT STACK 'STACK' DW 100H DUP(?)TOP LABEL WORDSTACK ENDSDATA SEGMENTVAR1DB 46HVAR2DB 15HVAR3DB 0A2HDATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA, ES:DATA,SS:STACKSTART: MOV AX, DATA MOV DS, AX MOV ES, AX MOV AX, STACK MOV SS, AX LEA SP,TOP

MOV AL,VAR1 CMP AL,VAR2 JAE NO_CHG1 XCHG AL,VAR2NO_CHG1: CMP AL,VAR3 JAE NO_CHG2 XCHG AL,VAR3NO_CHG2: MOV VAR1,AL VAR1 MOV AL,VAR2 CMP AL,VAR3 JAE NO_CHG3 XCHG AL,VAR3 MOV VAR2,ALVAR2NO_CHG3:

MOV AH,4CHDOS INT 21HCODE ENDS END [email protected]

[email protected] SEGMENT ; X DW -128 Y DW ?DATA ENDSCODE SEGMENT ; ASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX MOV AX,X CMP AX,0 JG ISPN JZ ISZN MOV Y,-1 JMP FINISHISPN:MOV Y,1 JMP FINISHISZN:MOV Y,0FINISH:MOV AH,4CHINT 21HCODEENDS END START

-128+127

[email protected] 162000GREATZZEROLITTLEZJGJGEJLJLEMOVPSW

GREATZZEROLITTLEZ000GREATZ10ZERO10LITTLEZ1xtwang@mail.xidian.edu.cnSTACK SEGMENT STACK 'STACK' DW 100H DUP(?)TOP LABEL WORDSTACK ENDSDATA SEGMENTBUFFER DW 500 ;500 X=17 REPT 500 X=(X+979) mod 65535 DW X ENDMGREATZ DW ?ZERODW ?LITTLEZ DW ?DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK

[email protected]: MOV AX, DATA MOV DS, AX MOV ES, AX MOV AX, STACK MOV SS, AX LEA SP,TOP XOR AX,AX MOV GREATZ,AX MOV ZERO,AX MOV LITTLEZ,AX MOV CX,BUFFER LEA SI,BUFFER+2ST_COUNT:MOV AX,[SI]ADD SI,2AND AX,AXJLE COUNT1INC GREATZJMP COUNT3

COUNT1:JL COUNT2INC ZEROJMP COUNT3COUNT2:INC LITTLEZCOUNT3: DEC CX JNZ ST_COUNT MOV AH,4CH INT 21HCODE ENDS END START

OF [email protected]: 1 , 4, 7, 8 ,9 [email protected] 1 23 4 [email protected]

4 - 3 (a) (b)

[email protected] 4 SIDIBX BP : DS SS SIDIBX [email protected] LEASI, BUFFER MOV AX, [SI]SIBUFFERSI2XORSI, SIMOV AX, BUFFER[SI]SIBUFFER MOV BX, BUFFER[SI][email protected] TABLE100 0AAH FLAG1 FLAG0 0AAH 0AAH 0 Flag 1 Flag SITABLE [email protected] SI, TABLE MOV CX, 100 L1: MOV [SI], 0AAHTEST [SI], 0AAH INC SI INC SI LOOPZ L1 JZ RIGHT MOV FALG, 1 JMP OVER RIGHT: MOV FLAG, 0 OVER: MOV AH,4CHDOS INT 21HCODE ENDS END STARTSTACK SEGMENT STACK 'STACK' DW 100H DUP(?)TOP LABEL WORDSTACK ENDSDATA SEGMENTTABLE DB DUP(100)FLAG DB ?DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA, ES:DATA,SS:STACKSTART: MOV AX, DATA MOV DS, AX MOV ES, AX MOV AX, STACK MOV SS, AX LEA SP,TOP

[email protected] BUFF 308 SUM

0 N SIBUFF [email protected] SI, BUFF XOR CX, CX XOR AX, AX MOV CL , [SI] INC SI L1:ADD AL, [SI] ADC AH, 0 INC SI LOOP L1 MOV SUM AX OVER: MOV AH,4CHDOS INT 21HCODE ENDS END STARTSTACK SEGMENT STACK 'STACK' DW 100H DUP(?)TOP LABEL WORDSTACK ENDSDATA SEGMENTBUFF DB 30 DB SUM DW ?DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA, ES:DATA,SS:STACKSTART: MOV AX, DATA MOV DS, AX MOV ES, AX MOV AX, STACK MOV SS, AX LEA SP,TOP

[email protected] COUNT MAX N-1 BXARRAY [email protected] BX, ARRAY MOV CX, COUNT MOV AX, [BX] DEC CXFINDMAX: JCXZ L1 INC BX INC BX CMP AX, [BX] JA L2 MOV AX,[BX] L2:LOOP FINDMAX L1: MOV MAX, AX OVER: MOV AH,4CHDOS INT 21HCODE ENDS END STARTSTACK SEGMENT STACK 'STACK' DW 100H DUP(?)TOP LABEL WORDSTACK ENDSDATA SEGMENTARRAY DW COUNT DW NMAX DW ?DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA, ES:DATA,SS:STACKSTART: MOV AX, DATA MOV DS, AX MOV ES, AX MOV AX, STACK MOV SS, AX LEA SP,TOP

[email protected] SOURCE5000FFHDESTINATIONNUMBERSIDI0FFHNUMBER1 N=500STACK SEGMENT STACK 'STACK' DW 100H DUP(?)TOP LABEL WORDSTACK ENDSDATA SEGMENTSOURCE LABEL BYTE500 X=17 REPT 500 X=(X+97) mod 256 DB X ENDMDESTINATIONDB N DUP(?)NUMBERDW ?DATA [email protected] SEGMENT ASSUME CS:CODE,DS:DATA, ES:DATA,SS:STACKSTART: MOV AX, DATA MOV DS, AX MOV ES, AX MOV AX, STACK MOV SS, AX LEA SP,TOP XOR AX,AX MOV NUMBER,AX MOV CX,N LEA SI,SOURCE LEA DI,DESTINATIONMOVE1:MOV AL,[SI]INC SICMP AL,0FFHJZ MOVE2MOV [DI],ALINC DIINC NUMBERMOVE2:LOOP MOVE1MOVE_END:MOV AH,4CHINT 21HCODE ENDS END [email protected] DATABUF8DATABUF12

NN-1N-1N-1 [email protected] 7 43 36 65 95 81 12 25 12 43 36 65 95 81 25 12 25 43 36 65 95 81 12 25 36 43 65 95 81 . . 12 25 36 43 65 81 95 [email protected] N=100100STACK SEGMENT STACK STACK DW 100H DUP(?)TOP LABEL WORDSTACK ENDSDATA SEGMENTDATABUF DW N DB N DUP()DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK [email protected]: MOV AX,DATA MOV DS,AX MOV ES,AX MOV AX,STACK MOV SS,AX LEA SP,TOP DATABUF MOV CXDATABUF LEA SIDATABUF+2 MOV BL23 MOV AL11 LP: MOV [SI],AL INC SI ADD AL,BL LOOP LP; MOV CX,DATABUF DEC CX LEA SI,DATABUF2 SI ADD SI,CX SILP1: PUSH CX PUSH [email protected] LP2: CX MOV AL,[SI] CMP AL,[SI-1] JAE NOXCHG XCHG AL,[SI-1] MOV [SI],ALNOXCHG: DEC SI LOOP LP2 POP SI POP CX LOOP LP1 MOV AH,4CH ;DOS INT 21HCODE ENDS END [email protected] (16)BUF, BUF16BUF 4.4 [email protected] SEGMENT STACK 'STACK' DW 100H DUP(?)TOP LABEL WORDSTACK ENDSDATA SEGMENTBUF DW 20 20DW 1000H,0025H,6730H,6758H,7344H,2023H,0025H,6745H,10A7H,0B612HDW 56AAH,15ACH,5789H,56AAH,6666H,7777H,56AAH,8888H,9999H,1111H DW 10 DUP(?)NEW DW 56AAHNEW56AAHDATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACKSTART: MOV AX,DATA MOV DS,AX MOV ES,AX

[email protected] MOV AX,STACK MOV SS,AX LEA SP,TOP MOV CX,BUF LEA SI,BUF+2 MOV AX,NEWL1: CMP AX,[SI] JZ L2 INC SI INC SI LOOP L1MOV [SI],AXINC BUFJMP OKL2: DEC CXINC SIINC SIMOV DI,SI DISI L3:MOV BX,[SI] INC SIINC SICMP AX,BX JZ L4 MOV [DI],BXINC DIINC DIJMP L5L4:DEC BUF L5:LOOP L3OK: MOV AH,4CH DOS INT 21H CODE ENDS END START

[email protected] DAT1DAT28DATDATM00H10H25H67H68HN00H05H12H26H45HM+N00H05H10H12H25HDAT1DAT2DATSIBXDI3DATDIDAT1DAT2SIBX26H45H67H68Hxtwang@mail.xidian.edu.cn BXDAT2ALDAT1DATMOVSBDAT2DATSTOSB

[email protected] DAT1DAT28DATDATSTACK SEGMENT STACK 'STACK' DW 100H DUP(?)TOP LABEL WORDSTACK ENDSDATA SEGMENTDAT1 DW 10DAT110 DB 10H,25H,67H,68H,73H,83H,95H,0A8H,0C2H,0E6HDAT2 DW 13DAT213 DB 05,12H,26H,45H,58H,65H,67H,70H,76H,88H,92H,0CDH,0DEHDAT DW ? DB 200 DUP(?) DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK DAT1 MOV AL, [email protected]: MOV AX,DATA MOV DS,AX MOV ES,AX MOV AX,STACK MOV SS,AX LEA SP,TOP MOV CX,DAT1 CXDAT1 MOV DX,DAT2 DXDAT2 MOV DAT,CX DAT ADD DAT,DX LEA SI,DAT1+2 SIDAT1 LEA BX,DAT2+2 BXDAT2 LEA DI,DAT+2 DIDATCLDL1: MOV AL,[BX] INC BX

L2: CMP AL,[SI] JB L3 MOVSBDAT1DAT DEC CX JZ L4 JMP L2L3: STOSBDAT2DAT DEC DX JZ L5 JMP L1L4: MOV SI,BX DEC SI MOV CX,DXL5: REP MOVSBDAT1DAT2 DAT MOV AH,4CH DOS INT 21H CODE ENDS END START

[email protected] 12848 BUFA20019BUFB30029BUFABUFBxBUFCxBUFABUFBBUFCABUFCB55BUFCBUFCABUFCBxBUFCBUFCABUFCBALDLBL MOV BUFC[DI],ALMOV BUFCA[DI],DLMOV BUFCB[DI],BL MOV ALBUFA[SI][email protected] SEGMENT STACK 'STACK' DW 100H DUP(?)TOP LABEL WORDSTACK ENDS N1=20 N2=30DATA SEGMENTBUFA DB 10H,25H,67H,26H,68H,73H,83H,58H,0,06H,12H,0CDH,95H DB 0A8H,0C2H,48H,0E6H,0F1H,1AH,0F5HBUFB DB 05,12H,26H,45H,53H,60H,6AH,7FH,76H,88H,92H,0C1H,0DEH,0E1H,0F5H DB 09,17H,23H,48H,58H,65H,67H,70H,7CH,82H,96H,0CDH,0D1H,0F1H,0FEHBUFC DB 20 DUP(?)BUFCA DB 20 DUP(?)BUFCB DB 20 DUP(?) DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK

[email protected]: MOV AX,DATA MOV DS,AX MOV ES,AX MOV AX,STACK MOV SS,AX LEA SP,TOP MOV CX,N1 XOR SI,SI XOR DI,DIL1:MOV AL,BUFA[SI]PUSH CXMOV CX,N2XOR BX,BXL2:CMP AL,BUFB[BX]JZ L3INC BXLOOP L2JMP L4

BUFABUFBL3:MOV BUFC[DI],ALMOV DX,SIMOV BUFCA[DI],DLMOV BUFCB[DI],BLINC DIL4:POP CXINC SILOOP L1 MOV AH,4CH DOS MOV AL,0 INT 21HCODE ENDS END START [email protected]:10 ,11, 13,[email protected] You [email protected] [email protected]

[email protected]@mail.xidian.edu.cn4.5 [email protected] 1 SOFTDLY PROC PUSH BX PUSH CX MOV BL10 DELAYMOV CX2801 WAIT LOOP WAIT DEC BL JNZ DELAY POP CX POP BX RET SOFTDLY ENDP

[email protected] 2AX1 COUNT PROC PUSH AX PUSH CX MOV CX16 XOR BL,BL L1: SHL , AX 1 ADC BL, 0 LOOP L1 POP CX POP AX RET COUNT ENDP

[email protected] [email protected] 355H

STACK SEGMENT STACK 'STACK' DW 100H DUP(?)TOP LABEL WORDSTACK ENDSDATA SEGMENTBUF1 DB 10H, DB 23H,32H,55H,34H,98H,55H, DB 43H,55H,97H,64HBUF2 DB ?DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA, ES:DATA,SS:STACKSTART: MOV AX, DATA MOV DS, AX MOV ES, AX MOV AX, STACK MOV SS, AX LEA SP,TOP

CALL COUNT55 MOV AH,4CHDOS INT 21HCOUNT55 PROC NEAR PUSH AX PUSH CX PUSH BX XOR CX, CX MOV CL, BUF1 MOV AL, 55H MOV BUF2, 0 XOR BX,BX L1: INC BX CMP BUF1[BX],AL JNZ L2 INC BUF2 L2: LOOP L1POP BX POP CX POP AX RETCOUNT55 ENDPCODE ENDS END [email protected] 455H

STACK SEGMENT STACK 'STACK' DW 100H DUP(?)TOP LABEL WORDSTACK ENDSDATA SEGMENTBUF1 DB 10H, DB 23H,32H,55H,34H,98H,55H, DB 43H,55H,97H,64HBUF2 DB ?DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA, ES:DATA,SS:STACKSTART: MOV AX, DATA MOV DS, AX MOV ES, AX MOV AX, STACK MOV SS, AX LEA SP,TOP LEA SI, BUF1 LEA DI, BUF2CALL COUNT55 MOV AH,4CHDOS INT 21HCOUNT55 PROC NEAR PUSH AX PUSH CX PUSH BX XOR CX, CX MOV CL, [SI] MOV AL, 55H MOV [DI], 0 XOR BX,BX L1: INC BX CMP [BX][SI],AL JNZ L2 INC [DI] L2: LOOP L1POP BX POP CX POP AX RETCOUNT55 ENDPCODE ENDS END [email protected] [email protected] 4-5

[email protected] 12 [email protected] CPU4.6

[email protected] 4.9 BUFASCIIASCII7071011SETEVENBUFFERASCIIDIDSCXSTACK SEGMENT STACK 'STACK' DW 100H DUP(?)TOP LABEL WORDSTACK ENDS N=22DATA SEGMENTBUFFER DB 'xidian university 2006'DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACKSTART: MOV AX,DATA MOV DS,AX MOV ES,AX MOV AX,STACK MOV SS,AX LEA SP,[email protected] MOV CX,N LEA DI,BUFFERCALL SETEVEN MOV AH,4CH MOV AL,0 INT 21HSETEVEN PROC NEAR PUSH AX PUSH BX PUSH CX PUSH DISETEVEN1: MOV AL,[DI] CALL COUNTBYTE AND BL,01H1 ; JZ SETEVEN2 OR AL,80H1 MOV [DI],AL

SETEVEN2:INC DILOOP SETEVEN1POP DIPOP CXPOP BXPOP AXRETSETEVENENDPCOUNTBYTE PROC NEAR ;1 PUSH AX PUSH CX MOV CX,8 XOR BL,BLCOU1: SHR AL,1 ADC BL,0 LOOP COU1 POP CX POP AX RETCOUNTBYTE ENDPCODE ENDS END [email protected] 4.10 TRANS16TO1016(AX)16x5x10x1y1y1 x110x2y2y2y3 y4y5x5=0y5TRANS16TO10,AXDI [email protected] TRANS16TO10 PROC NEAR PUSH AX PUSH BX PUSH CX PUSH DX PUSH DI MOV BX,10 MOV CX,5TRANS1: XOR DX,DX DIV BX MOV [DI],DL INC DI LOOP TRANS1POP DIPOP DXPOP CXPOP BXPOP AXRETTRANS16TO10 [email protected] 4.11 DISPAXD16(AX)AX5INT 21H02ASCIIDISPAXDAX5STACK SEGMENT STACK 'STACK'DW 100H DUP(?)TOP LABEL WORDSTACK ENDSDATA SEGMENTDECIMAL DB 5 DUP(?)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACKSTART:MOV AX,DATAMOV DS,AXMOV ES,AXMOV AX,STACKMOV SS,AX LEA SP,TOP

[email protected] MOV AX,23456 CALL DISPAXD MOV AH,4CH ; MOV AL,0 INT 21HDISPAXDPROC NEAR PUSH AX PUSH BX PUSH CX PUSH DX PUSH DI LEA DI,DECIMAL CALL TRANS16TO10 MOV CX,5 LEA DI,DECIMAL+4 MOV AH,2

DISPAXD2: MOV DL,[DI] ADD DL,30H DEC DI INT 21H LOOP DISPAXD2 POP DI POP DX POP CX POP BX POP AX RETDISPAXD ENDPTRANS16TO10 PROC NEAR ;4.10TRANS16TO10 ENDP CODE ENDSEND START

[email protected] 4.12 ASCII16BXFFFFH

4.9x1x5x1yy=10*(10*(10*(10*x5+x4)+x3)+x2)[email protected] TRANS10TO16 PROC NEAR PUSH CX PUSH DX PUSH SI XOR AX,AX XOR CX,CXMOV CL,[SI]INC SIMOV AL,[SI]INC SISUB AL,30HDEC CXJCXZ TRANSF2MOV BX,10TRANSF1:MUL BXJC TRANSF_ERRMOV DL,[SI]INC SI SUB DL,30H

ADD AL,DLADC AH,0JC TRANSF_ERRLOOP TRANSF1MOV BX,0TRANSF2:JMP TRANSF_OKTRANSF_ERR:MOV BX,-1TRANSF_OK:POP SIPOP DXPOP CXRETTRANS10TO16ENDP

[email protected] 4.13 164.11INT 21H0AHSTACK SEGMENT STACK 'STACK' DW 100H DUP(?)TOP LABEL WORDSTACK ENDSDATA SEGMENTKEYBUFFER DB 100 DB ? DB 100 DUP(?)STRING1 DB 'Please input decimal data : ','$'DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACKSTART: MOV AX,DATA MOV DS,AX MOV ES,AX MOV AX,STACK MOV SS,AX LEA SP,TOP

[email protected] LEA DX,STRING1 MOV AH,09HINT 21HMOV AH,0AHLEA DX,KEYBUFFERINT 21HLEA SI,KEYBUFFER+1CALL TRANS10TO16CALL DISPCRCALL DISPAXCALL DISPCRMOV AX,BXCALL DISPAXBXMOV AH,4CH ;DOSMOV AL,0INT 21H

[email protected] DISPCR PROC NEAR PUSH AX PUSH DX MOV AH,2 MOV DL,0AH INT 21H MOV AH,2 MOV DL,0DH INT 21H POP DX POP AX RETDISPCR ENDPTRANS10TO16 PROC NEAR4.12TRANS10TO16 ENDPCODE ENDS END STARTDISPAX PROC NEAR AX3.34DISPAX [email protected] 4.14 16BUFFERCOMPUTMEANCOMPUTMEANSTACK SEGMENT STACK 'STACK' DW 100H DUP(?)TOP LABEL WORDSTACK ENDSDATA SEGMENTBUFFER DW 1010DW 521,112,3654,-564,45, -166,771,1288,32709,-32014DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACKSTART: MOV AX,DATA MOV DS,AX MOV ES,AX MOV AX,STACK MOV SS,AX LEA SP,TOP

[email protected] MOV AX, OFFSET BUFFERPUSH AXCALL COMPUTMEANPOP AXCALL DISPAXDISPAXAXMOV AH,4CH DOS INT 21HCOMPUTMEAN PROC NEARPUSH BPMOV BP,SP BPPUSH SIPUSH DIPUSH AXPUSH BXPUSH CXPUSH DXMOV SI,[BP+4]XOR DX,DXXOR BX,BXXOR DI,DIMOV CX,[SI]PUSH CXADD SI,2CPTM1:MOV AX,[SI]ADD SI,2CWDADD BX,[email protected] ADC DI,DXLOOP CPTM1MOV DX,DIMOV AX,BXPOP BXIDIV BXCPTM2:MOV [BP+4],AX POP DXPOP CXPOP BXPOP AXPOP DIPOP SIPOP [email protected] RETCOMPUTMEAN ENDPCODE ENDS END START 4.6PUSHPOPSPBPBP

[email protected] 4.15 y=n!

kfactorialfkk+1f(k+1)=(k+1)f(k)n4.7n!nfactorialk1k=1,[email protected]

[email protected] factorialRESULTfactorialk8RESULTRESULTfactorialN=7 75040 (13B0H)STACK SEGMENT STACK 'STACK' DW 100H DUP(?)TOP LABEL WORDSTACK ENDSDATA SEGMENTRESULT DW ?DATA [email protected] CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACKSTART: MOV AX,DATA MOV DS,AX MOV ES,AX MOV AX,STACK MOV SS,AX LEA SP,TOP LEA SI,RESULT PUSH SI MOV AX,N PUSH AXN CALL [email protected] MOV AX,RESULT CALL DISPAX MOV AH,4CH DOS INT 21HFACTORIAL PROC NEARN! PUSH BP MOV BP,SP PUSH BX PUSH AX MOV BX,[BP+6] MOV AX,[BP+4] k CMP AX,1 JE FACT1 PUSH BX DEC AX [email protected] PUSH AX CALL FACTORIAL FACTORIAL MOV BX,[BP+6] MOV AX,[BX] MUL WORD PTR [BP+4] k!=k*(k-1)! JMP FACT2FACT1: MOV AX,1FACT2: MOV [BX],AX POP AX POP BX POP BP RET 4 SPFACTORIAL ENDP

[email protected] CODE ENDS END STARTFACTORIAL4.8CALLBPBPNFACTORIALCALLBPBPN-1BPN-2N=1RETxtwang@mail.xidian.edu.cn4.5

[email protected] :19, 21, [email protected] You [email protected]

SI

DI

4.3

X

1

2

3

4.4

BP

SI

BP

+2

+4

DI

AX

BX

CX

DX

SP

4.6

factorial

f(1)=1

k=1?

k=k-1

k=n

f(k+1)=kf(k)

factorial

k f(k)

4.7