IBM-PC»ã±àÓïÑÔ³ÌÐòÉè¼Æ´ð°¸£¨µÚ2°æ£© ÏÂÔØ±¾ÎÄ

D_SEG SEGMENT AUGW LABEL WORD AUGEND DD 99251 SUM DD ? D_SEG ENDS £»ÒÔÉ϶¨ÒåÊý¾Ý¶Î £»---------------------------------------------------------------- E_SEG SEGMENT ADDW LABEL WORD ADDEND DD -15962 E_SEG ENDS £»ÒÔÉ϶¨Ò帽¼Ó¶Î £»---------------------------------------------------------------- C_SEG SEGMENT MAIN PROC FAR

ASSUME CS: C_SEG, DS: D_SEG, ES: E_SEG

START: PUSH DS £»ÉèÖ÷µ»ØDOS

SUB AX, AX PUSH AX

MOV AX, D_SEG MOV DS, AX £»¸øDS¸³Öµ MOV AX, E_SEG MOV ES, AX £»¸øES¸³Öµ

£»

MOV AX, AUGW £»ÒÔÏÂ6ÌõÖ¸Áî½øÐмӷ¨¼ÆËã MOV BX, AUGW+2 ADD AX, ES: ADDW ADC BX, ES: ADDW+2 £»²»¿¼ÂÇÓзûºÅÊýÒç³ö MOV WORD PTR SUM, AX MOV WORD PTR [SUM+2], BX RET

MAIN ENDP C_SEG ENDS £»ÒÔÉ϶¨Òå´úÂë¶Î £»----------------------------------------------------------------

END START

4.18 Çë˵Ã÷±íʾ³ÌÐò½áÊøµÄ΢²Ù×÷ºÍ½áÊø³ÌÐòÖ´ÐеÄÓï¾äÖ®¼äµÄ²î±ð¡£ËüÃÇÔÚÔ´³ÌÐòÖÐÓ¦ÈçºÎ±íʾ£¿

´ð£º±íʾ³ÌÐò½áÊøµÄ΢²Ù×÷ÊÇָʾ»ã±à³ÌÐòMASM½áÊø»ã±àµÄ±êÖ¾£¬ÔÚÔ´³ÌÐòÖÐÓÃEND±íʾ£»

½áÊø³ÌÐòÖ´ÐеÄÓï¾äÊǽáÊø³ÌÐòÔËÐжø·µ»Ø²Ù×÷ϵͳµÄÖ¸ÁÔÚÔ´³ÌÐòÖÐÓжàÖÖ±íʾ·½·¨£¬±ÈÈçINT 20H»òMOV AX, 4C00H INT 21HÒÔ¼°RETµÈ¡£ 4.19 ÊÔ˵Ã÷ÏÂÊöÖ¸ÁîÖÐÄÄЩÐèÒª¼ÓÉÏPTR²Ù×÷·û£º

BVAL DB 10H£¬20H WVAL DW 1000H

(1) MOV AL£¬BVAL £»²»ÐèÒª (2) MOV DL£¬[BX] £»²»ÐèÒª (3) SUB [BX]£¬2 £»ÐèÒª£¬ÈçSUB BYTE PTR [BX]£¬2 (4) MOV CL£¬WVAL £»ÐèÒª£¬ÈçMOV CL£¬BYTE PTR WVAL (5) ADD AL£¬BVAL+1 £»²»ÐèÒª ´ð£º¼û×¢ÊÍ¡£

µÚ Îå ÕÂ. ϰ Ìâ

5.1 ÊÔ±àдһ¸ö»ã±àÓïÑÔ³ÌÐò£¬ÒªÇó¶Ô¼üÅÌÊäÈëµÄСд×ÖĸÓôóд×ÖĸÏÔʾ³öÀ´¡£

´ð£º³ÌÐò¶ÎÈçÏ£º

BEGIN: MOV AH, 1 £»´Ó¼üÅÌÊäÈëÒ»¸ö×Ö·ûµÄDOSµ÷ÓÃ

INT 21H CMP AL, ?a¡® £»ÊäÈë×Ö·û

STOP:

JB CMP JA SUB ¿É MOV MOV INT JMP RET

STOP AL, ?z¡® STOP AL, 20H DL, AL AH, 2 21H BEGIN

£»ÊäÈë×Ö·û>?z¡®Âð£¿

£»×ª»»Îª´óд×Öĸ£¬ÓÃAND AL, 1101 1111BÒ²

£»ÏÔʾһ¸ö×Ö·ûµÄDOSµ÷ÓÃ

5.2 ±àд³ÌÐò£¬´Ó¼üÅ̽ÓÊÕÒ»¸öСд×Öĸ£¬È»ºóÕÒ³öËüµÄǰµ¼×Ö·ûºÍºóÐø×Ö·û£¬ÔÙ°´Ë³ÐòÏÔʾÕâÈý¸ö

×Ö·û¡£

´ð£º³ÌÐò¶ÎÈçÏ£º

BEGIN: MOV AH, 1 £»´Ó¼üÅÌÊäÈëÒ»¸ö×Ö·ûµÄDOSµ÷ÓÃ

INT 21H CMP AL, ?a¡® £»ÊäÈë×Ö·û?z¡®Â𣿠JA STOP DEC AL £»µÃµ½Ç°µ¼×Ö·û MOV DL, AL £»×¼±¸ÏÔʾÈý¸ö×Ö·û MOV CX, 3

DISPLAY: MOV AH, 2 £»ÏÔʾһ¸ö×Ö·ûµÄDOSµ÷ÓÃ

INT 21H INC DL

LOOP DISPLAY

STOP: RET 5.3 ½«AX¼Ä´æÆ÷ÖеÄ16λÊý·Ö³É4×飬ÿ×é4λ£¬È»ºó°ÑÕâËÄ×éÊý·Ö±ð·ÅÔÚAL¡¢BL¡¢CLºÍDLÖС£ ´ð£º³ÌÐò¶ÎÈçÏ£º

DSEG SEGMENT STORE DB 4 DUP (?) DSEG ENDS

©«

BEGIN: MOV CL, 4 £»ÓÒÒÆËÄ´Î

MOV CH, 4 £»Ñ­»·ËÄ´Î LEA BX, STORE

A10: MOV DX, AX

AND DX, 0FH £»È¡AXµÄµÍËÄλ MOV [BX], DL £»µÍËÄλ´æÈëSTOREÖÐ INC BX SHR AX, CL £»ÓÒÒÆËÄ´Î DEC CH JNZ A10 £»Ñ­»·ËÄ´ÎÍêÁËÂ룿

B10: MOV DL, STORE £»ËÄ×éÊý·Ö±ð·ÅÔÚAL¡¢BL¡¢CLºÍDLÖÐ

MOV CL, STORE+1 MOV BL, STORE+2 MOV AL, STORE+3

STOP: RET 5.4 ÊÔ±àдһ³ÌÐò£¬ÒªÇó±È½ÏÁ½¸ö×Ö·û´®STRING1ºÍSTRING2Ëùº¬×Ö·ûÊÇ·ñÍêÈ«Ïàͬ£¬ÈôÏàͬÔòÏÔʾ?MATCH¡®£¬ Èô²»ÏàͬÔòÏÔʾ?NO MATCH¡®¡£ ´ð£º³ÌÐòÈçÏ£º

DSEG SEGMENT

STRING1 DB ?I am a student.¡® STRING2 DB ?I am a student!¡® YES DB ?MATCH¡®, 0DH, 0AH, ?$¡®

NO DB ?NO MATCH¡®, 0DH, 0AH, ?$¡® DSEG ENDS

£»-------------------------------------------------------------------------- CSEG SEGMENT MAIN PROC FAR

ASSUME CS: CSEG, DS: DSEG, ES: DSEG

START: PUSH DS £»ÉèÖ÷µ»ØDOS

SUB AX, AX PUSH AX

MOV AX, DSEG MOV DS, AX £»¸øDS¸³Öµ MOV ES, AX £»¸øES¸³Öµ

£»

BEGIN: LEA SI, STRING1 £»ÉèÖô®±È½ÏÖ¸ÁîµÄ³õÖµ

LEA DI, STRING2 CLD

MOV CX, STRING2 - STRING1 REPE CMPSB £»´®±È½Ï JNE DISPNO LEA DX, YES £»ÏÔʾMATCH JMP DISPLAY

DISPNO: LEA DX, NO £»ÏÔʾNO MATCH DISPLAY: MOV AH, 9 £»ÏÔʾһ¸ö×Ö·û´®µÄDOSµ÷ÓÃ

INT 21H RET

MAIN ENDP CSEG ENDS £»ÒÔÉ϶¨Òå´úÂë¶Î £»--------------------------------------------------------------------------

END START

5.5 ÊÔ±àдһ³ÌÐò£¬ÒªÇóÄÜ´Ó¼üÅ̽ÓÊÕÒ»¸ö¸öλÊýN£¬È»ºóÏìÁåN´Î(ÏìÁåµÄASCIIÂëΪ07)¡£

´ð£º³ÌÐò¶ÎÈçÏ£º

BEGIN: MOV AH, 1 £»´Ó¼üÅÌÊäÈëÒ»¸ö×Ö·ûµÄDOSµ÷ÓÃ

INT 21H SUB AL, ?0¡® JB STOP £»ÊäÈë×Ö·û?9¡®Â𣿠JA STOP CBW

MOV CX, AX £»ÏìÁå´ÎÊýN JCXZ STOP

BELL: MOV DL, 07H £»×¼±¸ÏìÁå

MOV AH, 2 £»ÏÔʾһ¸ö×Ö·ûµÄDOSµ÷Óã¬Êµ¼ÊΪÏìÁå INT 21H

CALL DELAY100ms £»ÑÓʱ100ms LOOP BELL

STOP: RET 5.6 ±àд³ÌÐò£¬½«Ò»¸ö°üº¬ÓÐ20¸öÊý¾ÝµÄÊý×éM·Ö³ÉÁ½¸öÊý×飺ÕýÊýÊý×éPºÍ¸ºÊýÊý×éN£¬²¢·Ö±ð°ÑÕâÁ½¸öÊý×éÖÐÊý¾ÝµÄ¸öÊýÏÔʾ³öÀ´¡£ ´ð£º³ÌÐòÈçÏ£º

DSEG SEGMENT COUNT EQU 20 ARRAY DW 20 DUP (?) £»´æ·ÅÊý×é COUNT1 DB 0 £»´æ·ÅÕýÊýµÄ¸öÊý ARRAY1 DW 20 DUP (?) £»´æ·ÅÕýÊý COUNT2 DB 0 £»´æ·Å¸ºÊýµÄ¸öÊý

ARRAY2 DW 20 DUP (?) £»´æ·Å¸ºÊý ZHEN DB 0DH, 0AH, ?The positive number is£º¡®, ?$¡® £»ÕýÊýµÄ¸öÊýÊÇ£º FU DB 0DH, 0AH, ?The negative number is£º¡®, ?$¡® £»¸ºÊýµÄ¸öÊýÊÇ£º CRLF DB 0DH, 0AH, ?$¡® DSEG ENDS

£»-------------------------------------------------------------------------- CSEG SEGMENT MAIN PROC FAR

ASSUME CS: CSEG, DS: DSEG

START: PUSH DS £»ÉèÖ÷µ»ØDOS

SUB AX, AX PUSH AX

MOV AX, DSEG MOV DS, AX £»¸øDS¸³Öµ

BEGIN: MOV CX, COUNT

LEA BX, ARRAY LEA SI, ARRAY1 LEA DI, ARRAY2

BEGIN1: MOV AX, [BX]

CMP AX, 0 £»ÊǸºÊýÂ룿 JS FUSHU MOV [SI], AX £»ÊÇÕýÊý£¬´æÈëÕýÊýÊý×é INC COUNT1 £»ÕýÊý¸öÊý+1 ADD SI, 2 JMP SHORT NEXT

FUSHU: MOV [DI], AX £»ÊǸºÊý£¬´æÈ븺ÊýÊý×é

INC COUNT2 £»¸ºÊý¸öÊý+1 ADD DI, 2

NEXT: ADD BX, 2

LOOP BEGIN1 LEA DX, ZHEN £»ÏÔʾÕýÊý¸öÊý MOV AL, COUNT1 CALL DISPLAY £»µ÷ÏÔʾ×Ó³ÌÐò LEA DX, FU £»ÏÔʾ¸ºÊý¸öÊý MOV AL, COUNT2 CALL DISPLAY £»µ÷ÏÔʾ×Ó³ÌÐò RET

MAIN ENDP

£»-------------------------------------------------------------------------- DISPLAY PROC NEAR £»ÏÔʾ×Ó³ÌÐò

MOV AH, 9 £»ÏÔʾһ¸ö×Ö·û´®µÄDOSµ÷Óà INT 21H AAM £»½«(AL)ÖеĶþ½øÖÆÊýת»»Îª¶þ¸ö·ÇѹËõBCDÂë ADD AH, ?0¡® £»±äΪ0¡«9µÄASCIIÂë MOV DL, AH MOV AH, 2 £»ÏÔʾһ¸ö×Ö·ûµÄDOSµ÷Óà INT 21H

ADD AL, ?0¡® £»±äΪ0¡«9µÄASCIIÂë MOV DL, AL MOV AH, 2 £»ÏÔʾһ¸ö×Ö·ûµÄDOSµ÷Óà INT 21H LEA DX, CRLF £»ÏÔʾ»Ø³µ»»ÐÐ MOV AH, 9 £»ÏÔʾһ¸ö×Ö·û´®µÄDOSµ÷Óà INT 21H RET

DISPLAY ENDP £»ÏÔʾ×Ó³ÌÐò½áÊø