΢»úÔ­Àí¼°Ó¦ÓÃÆÚÄ©¿¼ÊÔÌâ ÏÂÔØ±¾ÎÄ

LEA SI£¬ASC1 LEA DI£¬ASC2 LEA BX£¬ASC3 MOV CX£¬2 CLC

NEXT£º MOV AX£¬[SI] MOV DX£¬[DI] SBB AX£¬DX MOV [BX]£¬AX INC SI INC SI INC DI

INC DI INC BX INC BX

LOOP NEXT

CH03 »ã±àÓïÑÔ³ÌÐòÉè¼Æ ϰÌâÓë˼¿¼Ìâ

1£®ÏÂÁÐÓï¾äÔÚ´æ´¢Æ÷ÖзֱðΪ±äÁ¿·ÖÅä¶àÉÙ×ֽڿռ䣿²¢»­³ö´æ´¢¿Õ¼äµÄ·ÖÅäͼ¡£

VAR1 DB 10£¬2

VAR2 DW 5 DUP£¨£¿£©£¬0

VAR3 DB ?HOW ARE YOU£¿?£¬3 DUP£¨1£¬2£© VAR4 DD -1£¬1£¬0

½â´ð£º×Ö½Ú¿Õ¼ä----VAR1£º2£»VAR2£º12£»VAR3£º20£»VAR4£º12¡£ ´æ´¢¿Õ¼äµÄ·ÖÅäͼ£º

DS£º0000 0A 02 00 00 00 00 00 00¡ª00 00 00 00 00 00 48 4F 0010 57 20 20 41 52 45 20 20¡ª59 4F 55 3F 01 02 01 02 0020 01 02 FF FF FF FF 01 00¡ª00 00 00 00 00 00

2£®¼Ù¶¨VAR1 ºÍVAR2 Ϊ×Ö±äÁ¿£¬LAB Ϊ±êºÅ£¬ÊÔÖ¸³öÏÂÁÐÖ¸ÁîµÄ´íÎóÖ®´¦¡£

£¨1£©ADD VAR1£¬VAR2 £¨2£©SUB AL£¬VAR1 £¨3£©JMP LAB[CX] £¨4£©JNZ VAR1

£¨5£© MOV [1000H]£¬100 £¨6£©SHL AL£¬ 4 ½â´ð£º(1)Á½¸ö²Ù×÷ÊýÖÐÖÁÉÙÓÐÒ»¸öΪ¼Ä´æÆ÷£» (2)AL Ϊ×Ö½Ú£¬VAR1 Ϊ×Ö±äÁ¿£¬²»Æ¥Å䣻 (3)[]Öв»ÄÜÓÃCX£¬LAB Ϊ±êºÅ£¬·Ç±äÁ¿£» (4)תÏòµØÖ·Ó¦Îª±êºÅ£¬²»ÄÜÊDZäÁ¿£» (5)Ä¿µÄ²Ù×÷ÊýµÄÀàÐͲ»È·¶¨£»

(6)SHL Ö¸ÁîÖУ¬µ±ËùÒÆÎ»Êý³¬¹ý1 ʱ£¬±ØÐëÓÃCL »òCX À´È¡´úËùÒÆÎ»Êý¡£ 3£®¶ÔÓÚÏÂÃæµÄ·ûºÅ¶¨Ò壬ָ³öÏÂÁÐÖ¸ÁîµÄ´íÎó¡£ A1 DB £¿ A2 DB 10 K1 EQU 1024

£¨1£© MOV K1£¬AX £¨2£©MOV A1£¬AX £¨3£©CMP A1£¬A2 £¨4£©K1 EQU 2048

½â´ð£º(1)K1 Ϊ³£Á¿£¬²»ÄÜÓÃMOV Ö¸Áֵ£» (2)A1 Ϊ×Ö½Ú£¬AX Ϊ×Ö±äÁ¿£¬²»Æ¥Å䣻 (3)A1 䶨Ò壬ÎÞ·¨×ö±È½ÏÖ¸Á

(4)K1 ÖØÐ¸³ÖµÇ°£¬±ØÐëÓÃPURGE ÊÍ·Å¡£ 4£®Êý¾Ý¶¨ÒåÓï¾äÈçÏÂËùʾ:

FIRST DB 90H£¬5FH£¬6EH£¬69H SECOND DB 5 DUP(?) THIRD DB 5 DUP(?)

×ÔFIRST µ¥Ôª¿ªÊ¼´æ·ÅµÄÊÇÒ»¸öËÄ×Ö½ÚµÄÊ®Áù½øÖÆÊý(µÍλ×Ö½ÚÔÚǰ),ÒªÇó: ±àÒ»¶Î³ÌÐò½«Õâ¸öÊý×óÒÆÁ½Î»ºó´æ·Åµ½×ÔSECOND ¿ªÊ¼µÄµ¥Ôª,ÓÒÒÆÁ½Î»ºó´æ·Åµ½×Ô

THIRD ¿ªÊ¼µÄµ¥Ôª¡£(×¢Òâ±£ÁôÒÆ³ö²¿·Ö) ½â´ð£º DATA SEGMENT

FIRST DB 90H£¬5FH£¬6EH£¬69H SECOND DB 5 DUP(?) THIRD DB 5 DUP(?) DATA ENDS CODE SEGMENT

ASSUME CS£ºCODE£¬DS£ºDATA START£ºMOV AX£¬DATA MOV DS£¬AX LEA SI£¬FIRST LEA DI£¬SECOND MOV CX£¬2 CLC

£»×óÒÆ2 λ

MOV AX£¬[SI]£»AX=5F90H ΪµÍÊ®ÁùλÊý¾Ý INC SI INC SI

MOV DX£¬[SI]£»DX=696EH Ϊ¸ßÊ®ÁùλÊý¾Ý PUSH DX£»±£´æÔ­ÓеĸßÊ®ÁùλÊý¾Ý PUSH AX£»±£´æÔ­ÓеĵÍÊ®ÁùλÊý¾Ý

ROL DX£¬CL£»½«¸ßλÊý¾Ý²»´ø½øÎ»Ñ­»·×óÒÆÁ½Î»£¬¼´¸ß2 λÊý¾ÝÔÚDL µÄµÍ2 λ

AND DL£¬03H£»ÈÃDL Öнö±£´æÒƳöµÄ¸ß2 λÊý¾Ý

MOV [DI+4] £¬DL£»½«ÒƳöµÄ¸ß2 λÊý¾Ý·ÅÈëSECOND ÖеÄ×î¸ßµ¥ÔªÖÐ

ROL AX£¬CL£»½«µÍλÊý¾Ý²»´ø½øÎ»Ñ­»·×óÒÆÁ½Î»£¬¼´AX µÄ¸ß2 λÔÚAL µÄµÍ2 λ

AND AL£¬03H£»ÈÃAL Öнö±£´æÒƳöµÄAX ¸ß2 λÊý¾Ý MOV BL £¬AL£»½«AL ÖеÄÊý¾Ý·ÅÈëBL Öб£´æ POP AX£»µ¯³öÔ­ÓеĵÍÊ®ÁùλÊý¾Ý POP DX£»µ¯³öÔ­ÓеĸßÊ®ÁùλÊý¾Ý

SHL DX£¬CL£»½«¸ßλÊý¾ÝËãÊõÂß¼­×óÒÆ2 λ SHL AX£¬CL£»½«µÍλÊý¾ÝËãÊõÂß¼­×óÒÆ2 λ

OR DL£¬BL£»½«AX ÖÐÒÆ³öµÄ¸ß2 λÊý¾Ý·ÅÈëDX µÄµÍ2 λ

MOV [DI] £¬AX MOV [DI+2] £¬DX £»ÓÒÒÆ2 λ LEA SI£¬FIRST LEA DI£¬THIRD MOV CX£¬2 CLC

MOV AX£¬[SI]£»AX=5F90H ΪµÍÊ®ÁùλÊý¾Ý INC SI INC SI

MOV DX£¬[SI]£»DX=696EH Ϊ¸ßÊ®ÁùλÊý¾Ý

PUSH DX£»±£´æÔ­ÓеĸßÊ®ÁùλÊý¾ÝPUSH AX£»±£´æÔ­ÓеĵÍÊ®ÁùλÊý¾Ý ROR AX£¬CL£»½«µÍλÊý¾Ý²»´ø½øÎ»Ñ­»·ÓÒÒÆÁ½Î»£¬¼´µÍ2 λÊý¾ÝÔÚAH µÄ¸ß2 λ

AND AH£¬0C0H£»ÈÃAH Öнö±£´æÒƳöµÄµÍ2 λÊý¾Ý PUSH CX MOV CX£¬6 SHR AH£¬CL POP CX

MOV [DI] £¬AH£»½«ÒƳöµÄµÍ2 λÊý¾Ý·ÅÈëTHIRD ÖеÄ×îµÍµ¥ÔªÖÐ

ROR DX£¬CL£»½«µÍλÊý¾Ý²»´ø½øÎ»Ñ­»·×óÒÆÁ½Î»£¬¼´AX µÄ¸ß2 λÔÚAL µÄµÍ2 λ

AND DH£¬0C0H£»ÈÃDH Öнö±£´æÒƳöµÄDX µÍ2 λÊý¾Ý MOV BL £¬DH£»½«DH ÖеÄÊý¾Ý·ÅÈëBL Öб£´æ POP AX£»µ¯³öÔ­ÓеĵÍÊ®ÁùλÊý¾Ý POP DX£»µ¯³öÔ­ÓеĸßÊ®ÁùλÊý¾Ý

SHR DX£¬CL£»½«¸ßλÊý¾ÝËãÊõÂß¼­×óÒÆ2 λ SHR AX£¬CL£»½«µÍλÊý¾ÝËãÊõÂß¼­×óÒÆ2 λ

OR AH£¬BL£»½«DX ÖÐÒÆ³öµÄµÍ2 λÊý¾Ý·ÅÈëAX µÄ¸ß2 λ MOV [DI+1] £¬AX MOV [DI+3] £¬DX MOV AH£¬4CH INT 21H CODE ENDS END START

5£®£¨14£©ÔÚµ±Ç°Êý¾ÝÇø´Ó400H ¿ªÊ¼µÄ256 ¸öµ¥ÔªÖдæ·Å×ÅÒ»×éÊý¾Ý£¬ÊÔ±à³ÌÐò½«ËüÃÇ˳Ðò

°áÒÆµ½´ÓA000H ¿ªÊ¼µÄ˳Ðò256 ¸öµ¥ÔªÖС£ ½â´ð£º

DATA SEGMENT ORG 400H

DAT1 DB ...;256 DUP (?) ORG 0A000H

DAT2 DB ...;256 DUP (?) DATA ENDS

;

STACK SEGMENT STACK ENDS ;

CODE SEGMENT

ASSUME DS:DATA,CS:CODE,SS:STACK,ES:DATA START: MOV AX,DATA MOV DS,AX ;CH3-14

LEA SI,DAT1 LEA DI,DAT2 MOV CX,128

AGAIN: MOV AL,[SI] MOV [DI],AL INC SI INC DI

LOOP AGAIN

;CH3-15,½«Á½¸öÊý¾Ý¿éÖð¸öµ¥Ôª½øÐбȽϣ¬ÈôÓдíBL=00H£¬·ñÔòBL=FFH LEA SI,DAT1 LEA DI,DAT2 MOV CX,128

NEXT: MOV AL,[SI] MOV BL,[DI] CMP AL,BL JNZ ERROR INC SI INC DI

LOOP NEXT MOV BL,0FFH JMP EXIT

ERROR: MOV BL,00H EXIT: MOV AX,4C00H INT 21H CODE ENDS END START

6£®ÊÔ±à³ÌÐò½«µ±Ç°Êý¾ÝÇø´ÓBUFF ¿ªÊ¼µÄ4K ¸öµ¥ÔªÖоùдÈë55H£¬²¢Öð¸öµ¥Ôª¶Á³ö±È½Ï£¬

¿´Ð´ÈëµÄÓë¶Á³öµÄÊÇ·ñÒ»Ö¡£ÈôÈ«¶Ô£¬Ôò½«ERR µ¥ÔªÖÃ0H£»Èç¹ûÓÐ´í£¬Ôò½«ERR µ¥Ôª ÖÃFFH¡£ ½â´ð£º

DATA SEGMENT

BUFF DB 1000H DUP(?) ERR DB ? DATA ENDS ;

CODE SEGMENT

ASSUME CS:CODE,DS:DATA