µÚ4Õ »ã±àÓïÑÔ³ÌÐòÉè¼Æ
4.1 Àý Ìâ
1£®ÉèÓÐÒ»Êý¾Ý¶ÎDSEG£¬ÆäÖÐÁ¬Ðø¶¨ÒåÏÂÁÐ5¸ö±äÁ¿»ò³£Á¿£¬Óöζ¨ÒåÓï¾äºÍÊý¾Ý¶¨ÒåÓï¾äд³öÊý¾Ý¶Î£ºP48
£¨1£©DATA1Ϊһ×Ö·û´®±äÁ¿£º¡®WELCOME TO MASM£¡¡¯¡£ £¨2£©DATA2Ϊʮ½øÖÆ×Ö½Ú±äÁ¿£º32£¬90£¬£20¡£ £¨3£©DATA3ΪÁ¬Ðø10¸ö00HµÄ×Ö½Ú±äÁ¿¡£
£¨4£©DATA4Ϊ˫×Ö±äÁ¿£¬Æä³õʼֵΪ12345678H
£¨5£©COUNTΪһ·ûºÅ³£Á¿£¬ÆäֵΪÒÔÉÏËıäÁ¿ËùÓÃ×Ö½ÚÊý¡£ ½â£º¶¨ÒåÊý¾Ý¶ÎÈçÏ£º
DSEG SEGMENT
DATA1 DB ¡®WELCOME TO MASM£¡¡¯ DATA2 DB 32£¬90£¬£20 DATA3 DB 10 DUP (00H) DATA4 DD 12345678H COUNT EQU $£DATA1
DSEG ENDS
ÆäÖÐ$¨CDATA1ÖÐ$±íʾµ±Ç°»ã±àµØÖ·¼ÆÊýÆ÷Öµ£¬ÓÃÆä¼õÈ¥DATA1µÄÆ«ÒÆµØÖ·¿ÉµÃ¸ÃÊý¾Ý¶ÎËùÓÃ×Ö½ÚÊý¡£
2£®ÉèÓÐÒÔÏÂÊý¾Ý¶Î¶¨Ò壺P102
DSEG SEGMENT X1 EQU 30H X2 EQU 70H X3 EQU 0F7H DSEG ENDS
¸ø³öÏÂÁÐÖ¸Áî·Ö±ðÖ´Ðкó£¬ALÖеÄÄÚÈÝÊǶàÉÙ£¿ £¨1£© MOV AL£¬X1+X2
£¨2£© MOV AL£¬X2 MOD X1 £¨3£© MOV AL£¬X1 EQ X3 £¨4£© MOV AL£¬X1 AND X3 £¨5£© MOV AL£¬X1 OR X3 £¨6£© MOV AL£¬X2 GT X1 ½â£º£¨1£© (AL)= 30H£«70H = 0A0H £¨2£© (AL)= 70H MOD 30H = 10H
£¨3£© X1 EQ X3 = 30H EQ 70H ΪÂß¼ÔËË㣬ÆäֵΪ¼Ù£¬¹Ê(AL)=00H
21
£¨4£© (AL) = X1 AND X3 = 30H AND 0F7H = 30H P98 £¨5£© (AL)= X1 OR X3 = 30H OR 0F7H = 0F7H
£¨6£© X2 GT X1 = 70H GT 30HΪÂß¼ÔËË㣬ÆäÖµÎªÕæ£¬¹Ê(AL)=0FFH 3£®·ÖÎöÏÂÁгÌÐò¶Î£¬»Ø´ðËùÌáÎÊÌâ¡£ P98
DA1 DW 1F28H
DA2 DB ? £®£®£®£®£®£®
XOR BL£¬BL
MOV AX£¬DA1 LOP£º AND AX£¬AX JZ EXIT SHL AX£¬1
JNC LOP INC BL JMP LOP
EXIT£ºMOV DA2£¬BL ÊÔÎÊ£º£¨1£©³ÌÐò¶ÎÖ´Ðкó£¬DA2×Ö½Úµ¥ÔªÄÚÈÝÊÇʲô£¿
£¨2£©ÔÚ³ÌÐò¶Î¹¦Äܲ»±äÇé¿öÏ£¬ÊÇ·ñ¿ÉÓÃSHRÖ¸Áî´úÌæSHLÖ¸Áî? ½â£º
XOR BL£¬BL £»(BL)=0
MOV AX£¬DA1 £»(AX)= 1F28H
LOP£ºAND AX£¬AX £»Ê¹±ê־λ¸ù¾ÝAXÖÐÄÚÈݶø±ä»¯ JZ EXIT £»Èô(AX)=0£¬ÔòתEXIT
SHL AX£¬1 £»Âß¼×óÒÆ£±Î»£¬ÒƳöλ½øÈëCF JNC LOP
INC BL £»ÈçCF=1£¬ÔòBL¼Ó£±
JMP LOP
EXIT£ºMOV DA2£¬BL
£¨1£©ÈçÉÏ·ÖÎö£¬¸Ã³ÌÐò¶Î±»ÓÃÀ´Í³¼ÆDA1ÖÐÄÚÈݺ¬¶þ½øÖÆ1µÄ¸öÊý¡£DA2×Ö½Úµ¥ÔªÄÚÈÝΪDA1ÖÐÄÚÈݺ¬¶þ½øÖÆ¡°1¡±µÄ¸öÊý£¬Ò²¼´(DA2)=7¡£ £¨2£©ÎÞÂÛÂß¼×óÒÆ»¹ÊÇÂß¼ÓÒÒÆÖ¸Á¾ùÄܽ«DA1ÖеĶþ½øÖÆÊýλһλһλµØÒƵ½CFÖУ¬Æä³ÌÐò¶Î¹¦Äܲ»±ä£¬¹Ê¿ÉÓÃSHRÖ¸Áî´úÌæSHLÖ¸Áî¡£ 4£®·ÖÎöÏÂÁгÌÐò¶Î£¬»Ø´ðËùÌáÎÊÌâ¡£ DA1 DB 87H
DA2 DB ? £®£®£®£®£®£® XOR AH£¬AH MOV AL£¬DA1 MOV CL£¬4 SHR AL£¬CL
22
MOV DL£¬10
MUL DL
MOV BL£¬DA1 AND BL£¬0FH ADD AL£¬BL MOV DA2£¬AL ÊÔÎÊ£º£¨1£©³ÌÐò¶ÎÖ´Ðкó£¬DA2×Ö½Úµ¥ÔªÄÚÈÝÊÇʲô£¿
£¨2£©ÔÚ³ÌÐò¶Î¹¦Äܲ»±äÇé¿öÏ£¬ÊÇ·ñ¿ÉÓÃSARÖ¸Áî´úÌæSHRÖ¸Áî? ½â£º P73-74
XOR AH£¬AH £»(AH)=0
MOV AL£¬DA1 £»(AL)= 87H MOV CL£¬4 £»
SHR AL£¬CL £» È¡ALµÄ¸ßËÄ룬(AL)=07H MOV DL£¬10
MUL DL £»¸ßËÄλµÄÊý×Ö³ËÒÔ10 MOV BL£¬DA1
AND BL£¬0FH £»È¡DA1µÄµÍËÄλ ADD AL£¬BL
MOV DA2£¬AL £»Ïà¼ÓµÃµ½£¨DA2£©=57H
·ÖÎö£º½«DA1µÄ¸ßËÄλ³ËÒÔ10£¬ÔÙ¼ÓÉϵÍËÄλ£¬Êµ¼ÊÍê³ÉÁ˽«DA1ÖеÄBCDÂëת»»Îª¶þ½øÖƵÄÔËËã¡£
ÓÉ·ÖÎöµÃ£º(DA2)=57H¡£
ÔÚ³ÌÐò¶Î¹¦Äܲ»±äÇé¿öÏ£¬²»ÄÜÓÃSARÖ¸Áî´úÌæSHRÖ¸ÁÒòΪSAR²»Äܽ«ALµÄ¸ßËÄλ´ÓÆäÖзÖÀë³öÀ´¡£ 5£® £®£®£®£®£®£®
DA_B DB 0CH£¬9£¬8£¬0FH£¬0EH£¬0AH£¬2£¬3£¬7£¬4 £®£®£®£®£®£® XOR AX£¬ AX
XOR CL£¬CL XOR BX£¬BX
LOP£º TEST DA_B[BX]£¬01H JE NEXT
ADD AL£¬DA_B[BX] INC AH
NEXT£ºINC BX INC CL CMP CL£¬10
JNE LOP ÊÔÎÊ£º£¨1£©ÉÏÊö³ÌÐò¶ÎÖ´Ðкó£¬AH¡¢AL¼Ä´æÆ÷ÖеÄÄÚÈÝÊÇʲô£¿ £¨2£©Èô½«¡°JE NEXT¡±Ö¸Áî¸ÄΪ¡°JNE NEXT¡±£¬ÄÇôAH¡¢AL¼Ä´æÆ÷ÖеÄÄÚ
23
ÈÝÓÖÊÇʲô£¿ ½â£º
XOR AX£¬AX £»(AX)=0
XOR CL£¬CL £»(CL)=0 XOR BX£¬BX £»(BX)=0 LOP£º TEST DA_B[BX]£¬01H JE NEXT £»ÈôDA_B[BX]Öжþ½øÖÆÊýµÄ×îµÍλΪ0£¬×ªNEXT ADD AL£¬DA_B[BX] £»·ñÔòÀÛ¼Ó¸ÃÊýµ½AL INC AH £»Í³¼ÆÆæÊý¸öÊýµ½AH
NEXT£ºINC BX £»ÐÞ¸ÄÖ¸Õ룬ָÏòϸö¶þ½øÖÆÊý
INC CL CMP CL£¬10
JNE LOP £»¶Ô10¸öÊýÍê³ÉÒÔÉϲÙ×÷ºó£¬Í£Ö¹
·ÖÎö¿ÉÖª£¬¸Ã³ÌÐòʵ¼ÊÊǶÔ10¸öÊýÖÐµÄÆæÊýÇóºÍ¡£ËùÒÔ£¬£¨AH£©=4£»£¨AL£©=34¡£ Èô½«¡°JE NEXT¡±Ö¸Áî¸ÄΪ¡°JNE NEXT¡±£¬Ôò³ÌÐò¹¦ÄܱäΪͳ¼ÆÅ¼ÊýµÄ¸öÊý£¬²¢ÀÛ¼ÓËüÃǵÄÖµ£¬¹Ê£¨AH£©=6£»£¨AL£©=50¡£
6£®±àдÍêÕûµÄ»ã±àÔ´³ÌÐò£¬Í³¼ÆÏÂÃæ¶¨ÒåµÄÊý¾Ý»º³åÇøBUFÖУ¬·ÇÊý×Ö×Ö·ûµÄ¸öÊý£¬·ÅÈëCOUNTµ¥Ôª¡£Éè¸ÃÊý¾Ý»º³åÇø×îºóÒ»¸ö×Ö·ûΪ¡®$¡¯£¬ Êý×Ö×Ö·ûÖ¸ ¡®0¡¯~¡®9¡¯¡£ DSEG SEGMENT P30
BUF DB ¡®4334as432bbGGGn34kkkk$¡¯
COUNT DW 0 DSEG ENDS ½â£º·ÖÎö£º£¨1£©ÓÉÓÚ³ÌÐò±ØÐë·´¸´µØ´ÓBUFÖÐÈ¡³ö×Ö·û²¢Åжϣ¬¹Ê²ÉÓÃÑ»·³ÌÐò½á¹¹¡£ £¨2£©BUF»º³åÇøµÄ×îºóÒ»¸ö×Ö·ûΪ¡®$¡¯£¬¹Ê²ÉÓÃÌõ¼þÅжϷ¨À´¿ØÖÆÑ»·½áÊø¡£ £¨3£©·ÇÊý×Ö×Ö·ûµÄ¸öÊýÊÇÖ¸ASCIIÂëСÓÚ30H»ò´óÓÚ39HµÄ×Ö·û¡£ ³ÌÐòÉè¼ÆÈçÏÂ:
DSEG SEGMENT
BUF DB ¡®4334as432bbGGGn34kkkk$¡¯
SUM DW 0 DSEG ENDS
SSEG SEGMENT STACK STK DB 100 DUP (?) SSEG ENDS CSEG SEGMENT
ASSUME DS£ºDSEG£¬SS£ºSSEG£¬CS£ºCSEG START£º MOV AX£¬DSEG MOV DS£¬AX
MOV SI£¬OFFSET BUF MOV DX£¬0 LP0£º MOV AL£¬[SI]
24
CMP AL£¬¡®$¡¯ JE EXIT CMP AL£¬¡®0¡¯ JNC LP1 INC DX JMP LP2
LP1£º CMP AL£¬3AH JC LP2 INC DX LP2£º INC SI
JMP LP0
EXIT£º MOV COUNT£¬DX MOV AH£¬4CH INT 21H CSEG ENDS
END START
4.2 ϰ Ìâ
1£®Ñ¡ÔñÌâ
£¨1£©ÔÚ¼ÆËã»úÄÚ²¿£¬¼ÆËã»úÄܹ»Ö±½ÓÖ´ÐеijÌÐòÓïÑÔÊÇ£¨ £©¡£K4.1 A£®»ã±àÓïÑÔ B£®¸ß¼¶ÓïÑÔ C£®»úÆ÷ÓïÑÔ D£®CÓïÑÔ £¨2£©Ö´ÐÐÏÂÃæµÄ³ÌÐò¶Îºó£¬ BXµÄÄÚÈÝÊÇ£¨ £©¡£K4.2
NUM= 100
MOV BX£¬ NUM NE 50
A£®50 B£®0 C£®0FFFFH D£®1 £¨3£©Êý¾Ý¶¨Òå BUF DW 1£¬2£¬3£¬4 K4.2
Ö´ÐÐÖ¸ÁîMOV CL£¬SIZE BUFºó£¬CL¼Ä´æÆ÷µÄÄÚÈÝÊÇ£¨ £©¡£ A£®1 B£®0 C£®0FFFFH D£®2
£¨4£©¼ÙÉèVARΪ±äÁ¿£¬ÔòÖ¸ÁîMOV SI£¬OFFSET VARµÄÔ´²Ù×÷ÊýµÄѰַ·½Ê½ÊÇ£¨K4.3£© A£®¼ä½ÓѰַ B£®´æ´¢Æ÷Ѱַ C£®¼Ä´æÆ÷Ѱַ D£®Á¢¼´Ñ°Ö· £¨5£©Êý¾Ý¶¨ÒåBUF DB ¡®1234¡¯£¬Ö´ÐÐÖ¸ÁîMOV CL£¬ LENGTH BUFºó£¬CL¼Ä´æÆ÷µÄÄÚÈÝÊÇ£¨ £©K4.2
A£® 1 B£®2 C£®3 D£®4 £¨6£©ÉèÊý¾Ý¶Î¶¨ÒåÈçÏ£º DATA SEGMENT ORG 0100H X1 DB 25£¬¡®25¡¯ X2 DW ? Y1 EQU X1
25