¦¦b¦è¤¸ 1985 ¦~¡A^¯Sº¸´N¤w¸g±À¥X¨ã¦³ 32 ¦ì¤¸¼È¦s¾¹ªº 80386 CPU¡A¦ý¬O¨º®ÉÔªº§@·~¨t²Î¤´¬O 16 ¦ì¤¸ªº DOS¡A¤j³¡¤Àªº³nÅ餴¨Ï¥Î 16 ¦ì¤¸ªº©w§}»P¼È¦s¾¹¡Aª½¨ì¤Q¦~«áªº¦è¤¸ 1995 ¦~¡A·L³n¤~±À¥X¤F Windows 95¡A§@·~¨t²Î»P³nÅé¤~³vº¥¦¨¬° 32 ¦ì¤¸¡C
¦b³o¬q´Á¶¡ªº 10 ¦~¤º¡A¬Æ¦Ü¬O¨ì²{¦b¡A¥«±¤W¦³Ãö²Õ¦X»y¨¥ªº®ÑÄy¤j³¡¤À¤´¬O½Í½× 16 ¦ì¤¸ªº 8086/8088 CPU¡A¹ï 80386 ¤Î§ó°ª¶¥ªº CPU ¦Ó¨¥¡A¹ê¦b¬O¤j§÷¤p¥Î¡C¨Æ¹ê¤W¡A·L³n©Ò¥X«~ªº MASM 5.x ²ÕĶ¾¹¥i¥H¦b 16 ¦ì¤¸ªº DOS ¨t²Î¤¤¡A¦³¨îªº¨Ï¥Î 80386 ªº¯S©Ê¡A¥i¥H¨Ï±oµ{¦¡§ó¦³®Ä²v¡A¨Ò¦p¨Ï¥Î 32 ¦ì¤¸ªº¼È¦s¾¹¹Bºâ¡A¨Ï¥Î 80386 ¦h¥Xªº¨âÓ¬q¼È¦s¾¹¡AFS »P GS¡A¨Ï¥Î¯S®í©w§}¤è¦¡µ¥µ¥¡C³o¤@³¹±N¹ï³o¨Ç¥DÃD°µ¤¶²Ð¡C
¦³³\¦h²Õ¦X»y¨¥ªº®ÑÄy±`¦³³o¼Ëªº§@·~¡G¼g¤@Ó 32 ¦ì¤¸ªº¼ªk¡C¨ä¸Ñªk±`±`¬O§â 32 ¦ì¤¸©î¦¨¨âÓ 16 ¦ì¤¸¡AµM«á§Q¥ÎÃþ¦üª½¦¡¼ªk¬Û¼¡C¦ý¦¹³B¤p¤ì°¸´£¥X¥t¤@ºØ¸Ñªk¡Aì©lµ{¦¡¡AMUL32.ASM¡A¦p¤U¡G
;70000*80000=5600000000 (11170h*13880h=14DC93800h) .386 ;02 ¨Ï¥Î 32 ¦ì¤¸¼È¦s¾¹»P«ü¥O¶° ;*************************************** code segment use16 ;04 ¨Ï¥Î 16 ¦ì¤¸©w§}¤è¦¡ assume cs:code,ds:code org 100h ;--------------------------------------- start: jmp short begin x dd 70000 ;09 ³Q¼¼Æ y dd 80000 ;10 ¼¼Æ p_low dd ? ;11 ¿nªº§C¦ì§}¦r²Õ p_high dd ? ;12 ¿nªº°ª¦ì§}¦r²Õ begin: mov eax,x ;13 32 ¦ì¤¸¸ê®ÆÂಾ mov ebx,y mul ebx ;15 32 ¦ì¤¸¼ªk mov p_low,eax mov p_high,edx lea bx,x ;19 ¦L¥X³Q¼¼Æ mov ah,0 call print_dword mov ah,2 mov dl,'*' int 21h lea bx,y ;27 ¦L¥X¼¼Æ mov ah,0 call print_dword mov ah,2 mov dl,'=' int 21h cmp p_high,0 ;35 ¦L¥X¼¿n jz no_pnt_high lea bx,p_high mov ah,0 call print_dword no_pnt_high: mov bx,offset p_low call print_dword mov ax,4c00h int 21h ;--------------------------------------- ;¥H¤Q¤»¶i¦ì¼Æ¦L¥X BX ©Ò«ü¦ì§}ªº¥|Ӧ줸²Õ(Âù¦r²Õ) ;¿é¤J¡GBX¡Gn¦L¥XÂù¦r²Õªº¦ì§} ; ¡GAH«D¹s¡GÅã¥Ü¥þ³¡32¦ì¤¸¡AAH=0¡G¥Ñ³Ì¤j¼Æ¤£¬°¹s¶}©lÅã¥Ü ;¿é¥X¡G¿Ã¹õ¤WÅã¥Ü¤Q¤»¶i¦ì¼Æ ; AX¡BCX¡BDX ·|³Q¯}Ãa print_dword proc near add bx,3 ;53 ¥Ñ¸û¤j¦ì¼Æ¶}©l¦L mov cl,4 ;54 ¦@¦L¥X 4 Ӧ줸²Õ nxt: mov dl,[bx] call pnt_dl dec bx dec cl jnz nxt ret pnt_dl: mov ch,dl shr dl,4 ;63 ¥u¦³¦b 286 ¥H¤Wªº CPU ¤~¥i¥H¨Ï¥Î call pt0 mov dl,ch and dl,0fh pt0: add dl,'0' cmp dl,'9' jbe pt1 add dl,7 pt1: cmp dl,'0' ;71 Àˬd¬O§_¬°¹s jne pt2 or ah,ah ;73 Y¬°¹s¡A«hÀˬd¬O§_¤w¸g jz pt3 ; ¦L¹L³Ì¤j¤£¬°¹sªº¼Æ¤F pt2: mov ah,1 push ax mov ah,2 int 21h pop ax pt3: ret print_dword endp ;--------------------------------------- code ends ;*************************************** end start
¦¹µ{¦¡»Ý¥H²ÕĶ¾¹²ÕĶ¨ÃÂà´«¦¨ MUL32.COM ÀÉ¡A¤~¯à°õ¦æ¡C©³¤U¤p¤ì°¸¤jP¸ÑÄÀ¦¹µ{¦¡ªº¹B§@¨Ã»¡©ú¦p¦ó°£¿ù¡C
80386 ¤Î¨ä¸û°ªµ¥ªº CPU ³£¥i¥H¨Ï¥Î 32 ¦ì¤¸ªº¼È¦s¾¹¡A·íµM¤]¥i¥Hª½±µ°µ 32 ¦ì¤¸ªº¥|«h¹Bºâ¥H¤ÎÅÞ¿è¹Bºâ¡A¨Ò¦p ADD¡BADC¡BOR¡BAND µ¥¹Bºâ¡CÁöµM DOS ¬O¤Q¤»¦ì¤¸ªº§@·~¨t²Î¡A¦ý¬O§@·~¨t²Î¥u´xºÞ¿é¥X¡B¿é¤J¤ÎºÞ²zºÏºÐ¡BÀɮסB¸ê·½µ¥¤u§@¡A¨Ã¤£¯A¤Î¹Bºâ¡A©Ò¥H¥»µ{¦¡¥i¥H¦b DOS ¤¤°õ¦æ¡C·íµM¦b¼¶¼gì©lµ{¦¡®É¡A¥²¶·°µ¬Y¨Ç«Å§i¨Ï±o²ÕĶ¾¹¯à«ö·Óµ{¦¡³]p®vªº·N§Ó¤u§@¡AÃöÁ䤧³B´N¬O¦b .386 °²«ü¥O¤Î segment °²«ü¥Oªº use16 ³o¨âÓ¦a¤è¡C
.386 ¬Oªí¥Ü¥i¥H¥Î 80386 CPU ªº«ü¥O¶°¡A¦Ó .386P «h¬Oªí¥Ü¥i¥H¨Ï¥Î 80386 CPU ªº¯SÅv«ü¥O¶°¡A·íµM 80386 CPU ªº«ü¥O¶°¥]§t¤F©Ò¦³¤ñ¥¦µ¥¯Å§Cªº CPU¡A©Ò¥H 8088/8086/80186/80286 µ¥ CPU ªº©Ò¦³«ü¥O³£¯à¦b 80386 ¨Ï¥Î¡A¨Ã¥B 80386 ÁÙ¦h¥X¤@¨Ç¥¦Ì©Ò¨S¦³ªº«ü¥O¡A³o´N¬O©Ò¿×ªº¦V¤U¬Û®e¡CÃþ¦üªº°²«ü¥OÁÙ¦³ .8088¡B.186¡B.286/286P¡B.8087¡B.287¡B.387¡A¸Ô²Ó±¡§Î¡A½Ð¦Û¦æ°Ñ¦Ò^¯Sº¸ªº CPU «ü¥O¶°¤â¥U¡C
.386 ©Î .386P ¥H¤Î¨ä¥LÃþ¦üªº«Å§i¤@¯ë³£¬O©ñ¦bì©lµ{¦¡ªº¶}ÀY¡A¦ý¬O¤]¥i¥H©ñ¦bì©lµ{¦¡ªº¨ä¥L¦a¤è¡A¤£¹L¦pªG±zn©ñ¦b¨ä¥L¦a¤è®Énª`·N¦³¨âÓ¨î¡C²Ä¤@¬O¥²¶·©ñ¦b¬q»P¬q¤§¶¡¡A´«¥y¸Ü»¡¡A¦b¦P¤@¬q¤ºªº«ü¥O¶°µLªkÅܧó¡C²Ä¤G¬O°ª¶¥ªº¯BÂI«ü¥O¤Î¤£¯à·f°t§C¶¥ªº CPU «ü¥O¶°¡A¨Ò¦p¡A¦pªG±z¦bµ{¦¡¤@¶}©l«Å§i .286¡A¦Ó«á¤S«ü©w .387¡A´N·|³Q²ÕĶ¾¹»{¬°¤£¦Xªk¡C
¹ï©ó¨Ï¥Î 32 ¦ì¤¸¹Bºâ¡AÁÙ¦³¤@Ó°ÝÃD»Ýn¸Ñ¨M¡C°²¦p«ü©w¤F .386 ©Î .386P ÁöµM¥i¥H¨Ï¥Î¸û°ª¶¥ªº«ü¥O¶°¡A¦ý¬O .386 ·|«ü©w¦¹°Ï¬q±N¥H 32 ¦ì¤¸¤è¦¡©w§}¡A¦¹®É¨CÓ¬q³Ì¤j¥i¥H¦³ 4GB¡A³oºØ©w§}¤è¦¡µLªk¬°¯u¹ê¼Ò¦¡©Ò±µ¨ü¡C°²¦p¨S¦³«Å§i .386 ªº¸Ü¡A¨º»ò±N¤£¯à¨Ï¥Î 32 ¦ì¤¸¹Bºâ¡A¨Ã¥B²ÕĶ¾¹·|¥H¤º©wªº²ÕĶ¤è¦¡¡A§Y¨Ï¥Î 8088/8086 ¥H¤Î 8087 «ü¥O¶°²ÕĶì©lµ{¦¡¡A¦P®É¨Ï¥Î¤Q¤»¦ì¤¸ªº©w§}¤è¦¡¡C©Ò¿×¤Q¤»¦ì¤¸ªº©w§}¤è¦¡´N¬O¦b²Ä¤@³¹¤Î²Ä¤G³¹©Ò´£¨ìªº¥H¡y¬q¡G°¾²¾¡zªº¤è¦¡¨Óªí¥Ü¦ì§}ªº¡A³o®É¤@Ó¬q³Ìªø¥u¯à¦³ 64KB¡A³oºØ©w§}¤è¦¡¤~¬O¯u¹ê¼Ò¦¡¤U©Ò¯à±µ¨üªº¤è¦¡¡C
¨º»ò³½»Pºµ´x¬O§_¥i¥Hݱo¡H½Ð¬Ý¤U±»¡©ú¡C
¦b²Ä¤Q¤@³¹®É¡A´¿´£¨ì segment °²«ü¥O¡A¨ì¤F MASM 5.x ª©¤§«á¡Asegment «á±¨ä¹êÁÙ¦³¤@ӿﶵ¡A´N¬O¡y¨Ï¥Î¡z¡A¨ä§¹¾ã»yªk¬O
°Ï¬q¦W segment ±Æ¦C«¬¦¡ ¦X¨Ö«¬¦¡ Ãþ§O¦W ¨Ï¥Î
¡y¨Ï¥Î¡z¥u¯à¦b¦³«Å§i .386 ©Î .386P °²«ü¥O®É¤~¯à¦³³oӿﶵ¡A¡y¨Ï¥Î¡z¥u¦³¨âÓ¿ï¾Ü¡Ause16 ©Î use32¡AÅU¦W«ä¸q¡Ause16 ´Nªí¥Ü¦¹°Ï¬q¨Ï¥Î¤Q¤»¦ì¤¸©w§}¤è¦¡¡Ause32 ¬Oªí¥Ü¦¹°Ï¬q¥Î 32 ¦ì¤¸©w§}¤è¦¡¡C
µ{¦¡²Ä 13¡B14 ¦æ¤Î²Ä 16¡B17 ¦æ¬O§Q¥Î¦b 80386 ¤Î¨ä¸û°ª¶¥ªº CPU ª½±µ¶i¦æ 32 ¦ì¤¸¸ê®ÆÂಾ«ü¥O¡A¦¹«ü¥Oªº¥Îªk©M 16 ¦ì¤¸®É¬Û¦P¡A¥u¬O¼È¦s¾¹©ÎÅܼơyªø¡zªø¤F¡A·íµMn¦b DOS ¤U¥Î³o¨ÇÀu¶Õ¡An¥ý«Å§i .386 ©M use16 ³o¨â¼ËªF¦è¡C
µ{¦¡²Ä 15 ¦æ¬O¥O¥Î¦b 80386 ¤Î¨ä¸û°ª¶¥ªº CPU ª½±µ¶i¦æ 32 ¦ì¤¸¹Bºâ¡C¥H mul ¬°¨Ò¡A·í¼¼Æ¬O 32 ¦ì¤¸ªº¼È¦s¾¹©ÎÅܼƮɡA·|§â¼¿n¦s©ó EDX:EAX ùØ¡C
¥i¥H¨Ï¥Î 32 ¦ì¤¸¹Bºâ¤¸ªº«ü¥OÁÙ¦³ ADD¡BADC¡BSUB¡BSBB¡BIMUL¡BDIV¡BIDIV µ¥µ¥¡C³o¨Ç«ü¥Oªº¥Îªk©M 16 ¦ì¤¸®É¬Û¦P¡A¥u¬O¼È¦s¾¹©ÎÅܼơyªø¡zªø¤F¡A·íµMn¦b DOS ¤U¥Î³o¨ÇÀu¶Õ¡An¥ý«Å§i .386 ©M use16 ³o¨â¼ËªF¦è¡C
µ{¦¡²Ä 63 ¦æªº shr dl,4 ¬O¨Ï DL ¤§È¦V¥k²¾¥|Ӧ줸¡A¥H±o¨ì DL ¸û°ªªº¥|Ӧ줸¡C8086/8088 µ¥¯Åªº CPU ¥i¥H¨Ï¥Î shr dl,1¡A¦ý¬O¦pªG¬O³sÄò¦V¥k²¾¼ÆӦ줸®É¡A¥²¶·§â¥k²¾¦ì¤¸¼Æ¥ý©ñ¦b CL ¤¤¡A¦A°õ¦æ shr dl,cl¡C³o¼Ë«Ü³Â·Ð¡A©Ò¥H¨ì¤F 80286 ¤Î¨ä¸û°ª¶¥ªº CPU ¤w¸g¥i¥Hª½±µ§â¥k²¾¦¸¼Æ±µ¦b¹Bºâ¤¸¤§«á¡CÃþ¦üªº«ü¥OÁÙ¦³ SHL¡BROL¡BROR µ¥¡C
LEA «ü¥O¬O¥Î¨Ó¨ú±o¦ì§}ªº 8086/8088 «ü¥O¡A¨ä»yªk¬O¡G
lea ¼È¦s¾¹,ÅܼÆ
LEA ·|§âÅܼƩҦb¤§¦ì§}pºâ¥X¨Ó¡A¨Ã¦s¤J«e±ªº¼È¦s¾¹ùØ¡C¨ä¥Î³~¦³ÂI¹³ offset¡A¦ý¬O¥¦¤ñ offset ¦hÂI¼u©Ê¡C¨Ï¥Î offset ®É¡A¥²¶·¦b²ÕĶ¶¥¬q´N¤w¸g½T©wªºÅܼƦì§}¤~¥i¥H¡Alea ¥i¥H¦b°õ¦æ®É¤~ª¾¹DÅܼƦì§}¡C
¥Î DEBUG ¸ü¤J³oÓµ{¦¡®É¡A¦]¬° DEBUG µLªk§¹¥þ»{±o 80386 «ü¥O¡A¦]¦¹¤Ï²ÕĶ®ÉÅã¥Ü¤£¤Ó¥¿½T¡G( °Ñ¦Òµù¤@ )
-U 100 L1 [Enter] 1784:0100 EB10 JMP 0112 -U 112 [Enter] 1784:0112 66 DB 66 1784:0113 A10201 MOV AX,[0102] 1784:0116 66 DB 66 1784:0117 8B1E0601 MOV BX,[0106] 1784:011B 66 DB 66 1784:011C F7E3 MUL BX 1784:011E 66 DB 66 1784:011F A30A01 MOV [010A],AX 1784:0122 66 DB 66 1784:0123 89160E01 MOV [010E],DX 1784:0127 BB0201 MOV BX,0102 1784:012A B400 MOV AH,00 1784:012C E83100 CALL 0160 1784:012F B402 MOV AH,02 1784:0131 B22A MOV DL,2A -U [Enter] 1784:0133 CD21 INT 21 1784:0135 BB0601 MOV BX,0106 1784:0138 B400 MOV AH,00 1784:013A E82300 CALL 0160 1784:013D B402 MOV AH,02 1784:013F B23D MOV DL,3D 1784:0141 CD21 INT 21 1784:0143 66 DB 66 1784:0144 833E0E0100 CMP WORD PTR [010E],+00 1784:0149 0F DB 0F 1784:014A 8408 TEST CL,[BX+SI] 1784:014C 00BB0E01 ADD [BP+DI+010E],BH 1784:0150 B400 MOV AH,00 1784:0152 E80B00 CALL 0160
±z¥i¥H¬Ý¨£¤W±¥Õ¦âªº³¡¥÷³£¤£¬O§Ú̪ºµ{¦¡¡A¬Æ¦Ü±zÁ٬ݤ£À´¡A¦ý¬O¨SÃö«Y¡A¥¦Ì³£¥i¥H¦b DUBUG ¤¤³Q°õ¦æ¡A¨Ò¦p±z¤@¶i¤J DEBUG ¤U
-T [Enter]
AX=0000 BX=0000 CX=00A0 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000
DS=1784 ES=1784 SS=1784 CS=1784 IP=0112 NV UP EI PL NZ NA PO NC
1784:0112 66 DB 66
³o®É¤w¸g±q 1784:0100 ¸õ¨ì 1784:0116 ªº mov eax,x¡AÁöµM DEBUG ¤Ï²ÕĶ¬° DB 66 ¤Î mov ax,x ( x ¦ì©ó¦ì§} 0102 ³B )¡A¦ý¬O§Ṳ́£ºÞ¥¦¡A¤´µM¦A¤U T «ü¥O°lÂÜ¥¦¡G
-T [Enter]
AX=1170 BX=0000 CX=00A0 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000
DS=1784 ES=1784 SS=1784 CS=1784 IP=0116 NV UP EI PL NZ NA PO NC
1784:0116 66 DB 66
µ²ªG¬O DEBUG ¤´¯à°õ¦æ¡A¥B¸õ¨ì¤U¤@Ó¥¿½T¦ì§}¡Amov ebx,y¡A³o¦LÃÒ¤p¤ì°¸«ezªº¸Ü¡AÁöµMÅã¥Ü¤£¥¿½T¡A¦ý¤´¥i¥¿½T°õ¦æ¡C©³¤U§Ú̪½±µ°õ¦æ¨ì¦ì§} 143¡G
-G 143 [Enter] 11170*13880= AX=023D BX=0105 CX=8000 DX=003D SP=FFFE BP=0000 SI=0000 DI=0000 DS=1784 ES=1784 SS=1784 CS=1784 IP=0143 NV UP EI PL ZR NA PE NC 1784:0143 66 DB 66
±z¬Ý¤W±µµ¦â³¡¥÷¬O°õ¦æªºµ²ªG¡C¦n¡A©³¤U¦A°õ¦æ¨â¦¸°lÂÜ«ü¥O¡G
-T [Enter] AX=023D BX=0105 CX=8000 DX=003D SP=FFFE BP=0000 SI=0000 DI=0000 DS=1784 ES=1784 SS=1784 CS=1784 IP=0149 NV UP EI PL NZ NA PO NC 1784:0149 0F DB 0F -T [Enter] AX=023D BX=0105 CX=8000 DX=003D SP=FFFE BP=0000 SI=0000 DI=0000 DS=1784 ES=1784 SS=1784 CS=1784 IP=014D NV UP EI PL NZ NA PO NC 1784:014D BB0E01 MOV BX,010E -T [Enter] AX=023D BX=010E CX=8000 DX=003D SP=FFFE BP=0000 SI=0000 DI=0000 DS=1784 ES=1784 SS=1784 CS=1784 IP=0150 NV UP EI PL NZ NA PO NC 1784:0150 B400 MOV AH,00
±z¦AÆ[¹î¤WzÂŦ⪺¦ì§}¨Ã¹ï·Ó³oùØ¡A±z·|µo²{¡A§Y¨Ï¤Ï²ÕĶ®É¦ì§}¿ù»~¡A¦ý¬O°lÂÜ®ÉÁÙ¬O·|¦b¥¿½Tªº¦ì§}°±¤U¨Ó¡C¤£¹L±z¦b°lÂܦ¹Ãþµ{¦¡®É¡AÁÙ¬O±o¤p¤ß¡A¤×¨ä¬O¤U¡yG¡z«ü¥O®É¡C¦pªG±z¥Î SYMDEB °£¿ù¡Aµ²ªG¤]¬O¤@¼Ë¡A¤Ï²ÕĶ¥i¯à·|¿ù»~¡A¦ý¬O°lÂܩΰõ¦æ®É¤£·|¿ù»~¡C³oÓµ{¦¡ªº¨ä¥L³¡¥÷³£¤£Ãø¡A¤p¤ì°¸´N¤£¸ÑÄÀ¤F¡C
ÁöµM DEBUG/SYMDEB ¥i¥H°£¿ù¡A¦ý¬OµLªk¥¿½TÅã¥Ü 386 «ü¥O¨Ó¡AÁ`¬O¬ü¤¤¤£¨¬¡A¤£¹L©¯¦n³o¤@¤Á¤w¸g¶êº¡¸Ñ¨M¤F¡A¨º´N¬O DEBUG32.EXE¡C¥i¨ì¤j³°ªºAoGo ·J½s¤p¯¸¤U¸ü¡A¸ÑÀ£ÁY«á´N¥iª½±µ¨Ï¥Î¡A¤£¶·¦w¸Ë¡C
DEBUG32 ¥Îªk»P DEBUG Ãþ¦ü¡A¦ý¥\¯à±j¤j¡A°£¤F¥i¶i¦æ¹ï 80386 ¥H¤Wªº CPU «ü¥O¶°°£¿ù¥~¡A¤]¼W¥[¤F³\¦h¤ñ DEBUG §ó±j¤Æªº¥\¯à¡A¨Ò¦p¥i¥H¹ïŪ¥X©Î¼g¤J°O¾ÐÅé®É³]©w¤¤Â_ÂI¡A¥H¤£¦P¸ê®Æ§ÎºAÅã¥Ü°O¾ÐÅ餺®eµ¥µ¥¡A¤£¹L©³¤U¶È´N³o¤@³¹¥Î±o¨ìªº³¡¥÷»¡©ú¡Cº¥ý¥Î DEBUG32.EXE ¸ü¤Jn°£¿ùªºµ{¦¡¡AMUL32.COM¡AµM«á«ö¡yr¡zÁäÆ[¹î¼È¦s¾¹¡G
E:\HOMEPAGE\SOURCE>debug32 mul32.com [Enter] Unable to take over DPMI address query Debug32 - Version 1.0 - Copyright (C) Larson Computing 1994 CPU = Pentium, Virtual 8086 Mode, Id/Step = 058C, A20 enabled -r [Enter] AX=0000 BX=0000 CX=00A0 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000 DS=2739 ES=2739 SS=2739 CS=2739 IP=0100 NV UP DI PL NZ NA PO NC 2739:0100 EB10 JMP Short 0112 -t [Enter] ¡÷°lÂܨì¥Dµ{¦¡ AX=0000 BX=0000 CX=00A0 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000 DS=2739 ES=2739 SS=2739 CS=2739 IP=0112 NV UP DI PL NZ NA PO NC 2739:0112 66A10201 MOV EAX,[0102] Trace Interrupt
¦¹®É±Nn§â³Q¼¼Æ¸ü¤J EAX ùØ¡A¦ý¬O DEBUG32 ¶È¶ÈÅã¥Ü¼È¦s¾¹¸û§C¦ìªº 16 ¦ì¤¸¡A¥i¥H¤U¡yr32¡z«ü¥O¡A¨Ï DEBUG32 Åã¥Ü¼È¦s¾¹ªº©Ò¦³¦ì¤¸¡A¦P²z¡yr16¡z·|¨Ï±o DEBUG32 ¶ÈÅã¥Ü¼È¦s¾¹¸û§C¦ìªº 16 ¦ì¤¸¡C¨£¤U±¨BÆJ¡G
-r32 [Enter] ¡÷¨Ï¼È¦s¾¹Åã¥Ü©Ò¦³¦ì¤¸ EAX=00000000 EBX=00000000 ECX=000000A0 EDX=00000000 EBP=00000000 ESI=00000000 EDI=00000000 FS=2739 GS=2739 SS=2739 ESP=0000FFFE DS=2739 ES=2739 CS=2739 EIP=00000112 NV UP DI PL NZ NA PO NC 2739:0112 66A10201 MOV EAX,[0102] -t [Enter] EAX=00011170 EBX=00000000 ECX=000000A0 EDX=00000000 EBP=00000000 ESI=00000000 EDI=00000000 FS=2739 GS=2739 SS=2739 ESP=0000FFFE DS=2739 ES=2739 CS=2739 EIP=00000116 NV UP DI PL NZ NA PO NC 2739:0116 668B1E0601 MOV EBX,[0106] Trace Interrupt
©³¤U¤p¤ì°¸¤£¸Ô²Ó°lÂܤF¡Aª½±µ°õ¦æ¨ì¦L¥X³Q¼¼Æ¡C¥ý¿é¤J¡yu¡z¤Ï²ÕĶ¡A¬Ý¬Ýn°õ¦æ¨ì¨º¤@¦ì§}¡C
-u [Enter] ¡÷¤Ï²ÕĶµ{¦¡½X 2739:011B 66F7E3 MUL EBX 2739:011E 66A30A01 MOV [010A],EAX 2739:0122 6689160E01 MOV [010E],EDX 2739:0127 BB0201 MOV BX,0102h 2739:012A B400 MOV AH,00h 2739:012C E83100 CALL 0160 2739:012F B402 MOV AH,02h 2739:0131 B22A MOV DL,2Ah 2739:0133 CD21 INT 21h 2739:0135 BB0601 MOV BX,0106h 2739:0138 B400 MOV AH,00h 2739:013A E82300 CALL 0160
»Pì©l½X°t¦X¤ñ¹ï¡A«Ü§Ö´Nª¾¹D¤W±¥Õ¦â¦ì§}¡A012F¡A´N¬O°õ¦æ§¹¦L¥X³Q¼¼Æ«áªº¤U¤@«ü¥O¡C¿é¤J¡yg 12f¡zªí¥Ü°õ¦æ¨ì 12F ³oÓ¦ì§}¡G
-g 12f ¡÷¥Ñ²{¦bªº IP ¦ì§}°õ¦æ¨ì 12F ³B°±¤î EAX=4DC90100 EBX=00010101 ECX=00007000 EDX=00000030 EBP=00000000 ESI=00000000 EDI=00000000 FS=2739 GS=2739 SS=2739 ESP=0000FFFE DS=2739 ES=2739 CS=2739 EIP=0000012F NV UP DI PL ZR NA PE NC 2739:012F B402 MOV AH,02h Instruction Breakpoint
§A¥i¯à¬Ý¨£¿Ã¹õ¤W¼È¦s¾¹È¡A¦³¦n´X³B¤Ï¥Õ¡A³o¬O¥¿±`ªº¡Aì¨Ó¨C¦¸°±¤U¨Ó®É¡A DEBUG32 ·|§â§ïÅܪº¼ÆÈ¥H¤Ï¥Õªí¥Ü¡C¦ý¬O·Ó²z»¡¡AÀ³¸Ó·|¦b¿Ã¹õ¤WÅã¥Ü¥X³Q¼¼Æ¤~¹ï¡A¤£¹L«o¨S¬Ý¨£¡A³o¤]¬O¥¿±`ªº¡Aì¨Ó DEBUG32 ªº°õ¦æµe±»P°£¿ùµe±¬O¤À¶}¨Óªº¡A³o¼Ë¤~¤£·|§âµe±§Ë±o¤@¹Î¶Ã¡C¦pªGnÆ[¹î°õ¦æµe±¥i¥H¿é¤J¡yFL¡z¡G
E:\HOMEPAGE\SOURCE>debug32 mul32.com Unable to take over DPMI address query Debug32 - Version 1.0 - Copyright (C) Larson Computing 1994 11170
¦pªGn¤Á¦^°£¿ùµe±®É¡A«ö¤U¥ô·NÁä´N¥i¥H¤F¡CFL ¬O flip¡A§Y¤Á´«¤§·N¡C¨ä¥LÁÙ¦³³\¦h«ü¥O¡A¨Ò¦p³]©w¤¤Â_ÂI¡BÂ÷¶} DEBUG32 µ¥µ¥³£»P DEBUG/SYMDEB ¬Û¦ü¡A¤]¥i¥H©ó DEBUG32 ´£¥Ü²Å¸¹¡y-¡z¤§«á«ö¡y?¡z±o¨ì¨ó§U¡A¤p¤ì°¸´N¤£¦h»¡¤F¡C
¦b 8086/8088/80286 µ¥ CPU ¥u¯à¥Î BX¡BSI¡BDI¡BBP¡BSP µ¥¼È¦s¾¹©w§}¡A¦ý¬O¦b 80386 ¤Î¨ä°ª¶¥ªº CPU ³£¥i¥H¨Ï¥Î¥ô¦óªº³q¥Î¼È¦s¾¹©w§}¡A¨Ò¦p EAX¡BECX¡BEDX ³£¥i¥H¥Î¨Ó©w§}¡C¨Ò¦p
mov bx,[eax] mov bl,[edx]
¤£¹L AX¡BCX¡BDX µ¥¼È¦s¾¹§Y¨Ï¤w¸g«Å§i .386 «á¡A¤´¤£¯à¥Î¨Ó©w§}¡A©Ò¥H¤U±ªº¼gªk¡A¤´¬O¿ù»~ªº¡G
mov bx,[ax] mov bl,[dx]
¨Ï¥Î³o¨Ç 32 ¦ì¤¸¼È¦s¾¹©w§}ÁÙ±oª`·N³o¨Ç¼È¦s¾¹¬O 32 ¦ì¤¸ªº¡A¦Ó¦b¯u¹ê¼Ò¦¡¤¤ªº¦ì§}¥u»Ý 16 ¦ì¤¸¡A¸û°ªªº 16 ¦ì¤¸¬O¥Î¤£µÛªº¡C©Ò¥H¦pªGn¨Ï¥Î³o¨Ç 32 ¦ì¤¸¼È¦s¾¹©w§}®É¡A¥²¶·½T©w¥¦Ì¸û°ªªº 16 ¦ì¤¸¤§È¬°¹s¡A§_«h·|³y¦¨¤£¥i¹w´Á¤§¿ù»~¡C
80386 ¹ï¼È¦s¾¹©w§}¤è¦¡ÁÙ°µ¤F³Ì¨Î¤Æªº§V¤O¡C¦]¬°¦bµ{¦¡ùر`¥Î¦r²Õ¡BÂù¦r²Õµ¥¸ê®Æ¡A©Ò¥H¬°¤F§ïµ½®Ä²v¡A¦b 80386 ªº©w§}¤è¦¡ÁÙ¥i¥H¼g¦¨¹³©³¤Uªº¼Ò¦¡
mov cx,x[eax*n+y] mov cx,x[ebx+eax*n+y]
¤W¨â¦¡ªº n ¥i¥H¬O 1¡B2¡B4¡B8 ¥|ºØ¼ÆÈ¡Ax ¬OÅÜ¼Æ ( °}¦C ) ¦W¡Ay ¬O±`¼Æ¡C¦b³oºØ©w§}¤è¦¡ùØ¡A¦³¡y*n¡zªº¼È¦s¾¹ºÙ¬°¯Á¤Þ¼È¦s¾¹¡A³Ñ¤Uªº¥t¤@ӼȦs¾¹ºÙ¬°°ò©³¼È¦s¾¹¡F°²¦p¨S¦³¡y*n¡zªº¹Bºâ¡A«h¼g¦b«á±ªº¬O¯Á¤Þ¼È¦s¾¹¡A«e±ªº¬O°ò©³¼È¦s¾¹¡F°²¦p¥u¦³¤@ӼȦs¾¹¡A«h¦¹¼È¦s¾¹¬O°ò©³¼È¦s¾¹¡C¥Î³oºØ¤è¦¡©w§}®É¡A¤º©wªº¬q¼È¦s¾¹¬O¥Ñ°ò©³¼È¦s¾¹¨M©w¡A°ò©³¼È¦s¾¹¬° EBP ®É¤º©wªº¬q¼È¦s¾¹¬° SS¡A§_«h§¡¬° DS¡C½Ð¬Ý¥H¤U¨Ò¤l¡G
mov ax,x[eax*2+ebp] ;¨ú±o¦ì§} SS:[EAX*2+EBP+x] ¤§È¨Ã¦s©ó AX mov ax,x[eax+ebp*2] ;¨ú±o¦ì§} DS:[EAX+EBP*2+x] ¤§È¨Ã¦s©ó AX mov ax,x[ebp*1] ;¨ú±o¦ì§} SS:[EBP] ¤§È¨Ã¦s©ó AX mov ax,x[ebx*1] ;¨ú±o¦ì§} DS:[EBX] ¤§È¨Ã¦s©ó AX
¥H¤W¥|Ó¨Ò¤l³£¨S«ü©w¬q¼È¦s¾¹¡A¦ý¬O¦³®É¬O¦Û DS ¨ú±o¡A¦³®É¬O¦Û SS ¨ú±o¡A¤£¥i¤£·V¡C°²¦p±z·Q§ïÅܦs¨úªº¬q¦ì§}¤]¥i¥H¡A´N¬O¦b¦ì§}«e¥[¤W¡y¬q¼È¦s¾¹:¡z§Y¥i¡A¨Ò¦p±z·Q¨ú±o¦ì§} FS:[EDX*2] ªº¼ÆÈ¡A¥i¥H¥Î¤U±ªº¤èªk¡G
mov ax,fs:[edx*2]
©³¤U¤p¤ì°¸¼¶¼g¤@Óµ{¦¡¡AADDR32.ASM¡A¦¹µ{¦¡¥i¥H¦b¿Ã¹õ¤W¦L¥X¤@Ó±m¦â¦r¦ê¡A¥¦°£¤F§Q¥Î ECX¡BEDX ©w§}¥~¡AÁ٥ΤF¤@Ó 80386 ·sªº¬q¼È¦s¾¹¡AGS¡A©w§}¡C
;*************************************** stack segment stack ;02 °ïÅ|¬q dw 80h dup (?) stack ends ;*************************************** data segment ;06 ¸ê®Æ¬q string db 2 dup ('0123456789ABCDEF'),0 data ends ;*************************************** .386 ;10 ¨Ï¥Î 80386 code segment use16 ;11 ¨Ï¥Î 16 ¦ì¤¸©w§}¤è¦¡ assume cs:code,ds:data ;--------------------------------------- start: push ds ;14 µ{¦¡½X¬q¶}©l push 0 ;15 ±À¤J¥ß§YÈ mov ax,data mov ds,ax mov ax,0b800h mov gs,ax ;20 ¨Ï GS «ü¦VÅã¥Ü°O¾ÐÅé sub edx,edx ;22 EDX «ü¦VÅã¥Ü°O¾ÐÅé mov bh,0 ;23 BH ¬°¦rªºÃC¦â©Î©³¦â mov ecx,edx ;24 ECX «ü¦V¦r¦ê¦ì§} mov cx,offset string next: mov al,[ecx] mov ah,bh and ah,0fh ;29 ¨ÏÃC¦â¦b 0¡ã0fh ¤§¶¡¡A©³¦â¬°¶Â¦â mov gs:[10*160+edx*2],ax ;30 shl ah,4 ;31 ¨Ï¤å¦r¬°¶Â¦â¡A©³¦â¦b 0¡ã0fh ¤§¶¡ mov gs:[11*160+edx*2],ax ;32 inc bh inc edx inc ecx or al,al jnz next mov ax,4c00h int 21h ;--------------------------------------- code ends ;*************************************** end start
²ÕĶ³oÓµ{¦¡¡A¥H¤Î°õ¦æµe±¦p¤U¡G
ºîÆ[³oÓµ{¦¡¡A³£¨S¦³µo²{¥ô¦ó¦b¿Ã¹õ¤W¦L¥X¦r¨ÓªºªA°Èµ{¦¡¡A¦ý¬O«o¯uªº¦L¥X¦r¨Ó¡A¤£¶È¦p¦¹¡AÁÙ¬O±m¦âªº¡A³o¬O«ç»ò°µ¨ìªº©O¡H
ì¨Ó IBM PC ¤Î¨ä¬Û®e¾÷ºØ°õ¦æ DOS §@·~¨t²Î®É¡A©ÒÅã¥Üªº¤º®e³£¦s¦b¤@¶ôºÙ¬°Åã¥Ü°O¾ÐÅé ( ¤]¦³¤HºÙ¬°µø°T°O¾ÐÅé ) ªº°O¾ÐÅ餺¡A©Ò¥H¦pªG§Ú̪½±µ§ïÅÜ°O¾ÐÅ餺®e¡A´N¥i¥H§ïÅÜÅã¥Üªº¤å¦r¡C¦Ó³o¨Ç PC ¾÷ºØ¹ïÅã¥Ü¼Ò¦¡¤À¦¨¤å¦r¼Ò¦¡»Pø¹Ï¼Ò¦¡¨âºØ¼Ò¦¡¡A¤å¦r¼Ò¦¡§â¿Ã¹õ¤À¦¨ 80*25 ©Î 40*25 ¨âºØ¡C
±`¥Îªº¬O 80*25 ªº¤å¦r¼Ò¦¡¡A¦¹¼Ò¦¡¨C¦C¥iÅã¥Ü 80 Ó¤å¦rÁ`¦@ 25 ¦C ( ¥Ñ¥ª¦Ó¥kºÙ¬°¦C¡A¥Ñ¤W¦Ó¤UºÙ¬°¦æ )¡A©Ò¥H¤@Óµe±¥i¥HÅã¥Ü 2000 Ó¤å¦r¡A¥Î¥h 2000 Ӧ줸²Õ¡A¦A¥[¤W¨CÓ¤å¦r³£¥Î¤@Ӧ줸²Õ¨Óªí¥ÜÅã¥ÜªºÃC¦â¡C³o¼Ëpºâ°_¨Ó¡A¦b 80*25 ¤å¦r¼Ò¦¡¤U¡AÅã¥Ü¤@Óµe±»Ý 4000 ¦ì¤¸²Õ¡A¬ù 4KB ªº°O¾ÐÅé¡C
¹ï±m¦âÅã¥Ü¥d ( CGA/EGA/VGA/AGP ) ¨Ó»¡¡AÅã¥Ü°O¾ÐÅé¥Ñ¬q¦ì§} 0B800H ³B¶}©l¡A¿Ã¹õ¤W²Ä¹s¦C²Ä¹s¦æªº¤å¦r¦b¦ì§} B800:0000 ³B¡A¨äÃC¦â¦b B800:0001¡A²Ä¹s¦C²Ä¤@¦æ¦b B800:0002¡A¨äÃC¦â¦b B800:0003¡K¡K¡C©Ò¥H¨C¤@¦C»Ý¦û¥Î 160 Ӧ줸²Õ¡A¬G²Ä¤@¦æ«K±q¦ì§} B800:00A0 ¶}©l ( 160d=0A0h )¡A¨Ì¦¹Ãþ±À¡A²Ä R ¦Cªº²Ä¹sÓ¦r¬O±q¦ì§} 160*(R¡Ð1) ¶}©l¡C½Ð°Ñ¦Ò¤U¹Ï¡G
¦Ü©ó©ÒÅã¥Ü¦r¤¸ªºÃC¦â¬O¥Ñ¤ñÅã¥Ü°O¾ÐÅé°ª¤@Ó¦ì§}ªø«×¤@Ӧ줸²Õªº¤º®e¨Ó¨M©w¡C¦¹¦ì¤¸²Õ¸û°ªªº¥|Ӧ줸¨M©wI´ºÃC¦â¡A¸û§Cªº¥|Ӧ줸¨M©w¦rªºÃC¦â¡CÃC¦â¦p¦óªí¥Ü½Ð°Ñ¦Ò²Ä¤Q¤E³¹ªº»¡©ú¡C
ì©lµ{¦¡ªº²Ä 22¡ã25 ¦æ¬O¥Î¨Ó³]©wnÅã¥Üªº¦r¦ê¦ì§}¡BÅã¥Ü°O¾ÐÅé¦ì§}¤ÎÃC¦â¥X©lÈ¡A²Ä 27¡ã29 ¦æ¨ú±o¦r¤ÎÃC¦â¶ñ¤J AX ùØ¡A²Ä 30 ¦æ§â AX ¤§È¶ñ¤JÅã¥Ü°O¾ÐÅ餤¡A´N¯à¦b¿Ã¹õ¤WÅã¥Ü±a¦³ÃC¦âªº¦r¨Ó¡C
¦b 8088/8086 CPU ùØ¡A¥u¯à§âÅܼƩμȦs¾¹±À¤J°ïÅ|¡A¦ý¦b 80186 µ¥¯Å¥H¤Wªº CPU ¤]¥i¥Hª½±µ¨Ï¤@ӼƱÀ¤J°ïÅ|¡C©Ò¥H¥»¨Ó¤@¶i¤Jµ{¦¡®Én«O¯dì DS:0000 ªº«ü¥O¡Aµy§@קï¥H¼W¶i®Ä²v¡AÅܦ¨ì©lµ{¦¡ 14¡ã17 ¦æ¡C°£¦¹¤§¥~¡A¦b 80386 µ¥¯Å¥H¤Wªº CPU ÁÙ¥i¨Ï¥Î PUSHA/PUSHAD «ü¥O¡C
PUSHA «ü¥O¬O§â AX¡BBX¡BCX¡BDX¡BSP¡BBP¡BSI¡BDI ¤KӼȦs¾¹¤@¦¸¥þ³¡±À¤J°ïÅ|¡A±zª`·N¨ì¥¦¤]¥i¥H§âì¨Óªº SP ±À¤J°ïÅ|¡A©Ò¿×ì¨Ó¬O«üÁÙ¨S°õ¦æ PUSHA ®Éªº SP¡CPOPA ¬O¼u¥X°ïÅ|³»ªº 8 Ó¦r²Õ¡A¨Ã¨Ì§Ç¦s¤J DI¡BSI¡BBP¡BSP¡BDX¡BCX¡BBX¡BAX ùØ¡C±z¥i¥H§â PUSHA/POPA ªº¡yA¡z·Q¦¨¬O all¡C
PUSHAD ¬O§â EAX¡BEBX¡BECX¡BEDX¡BESP¡BEBP¡BESI¡BEDI ¤KӼȦs¾¹¤@¦¸¥þ³¡±À¤J°ïÅ|¡A¦P²z POPAD ¬O§â°ïÅ|ùتº¤KÓÂù¦r²Õ¼u¥X¡A¨Ã¨Ì§Ç¦s¤J EDI¡BESI¡BEBP¡BESP¡BEDX¡BECX¡BEBX¡BEAX ùØ¡APUSHAD/POPAD ùتº¡yD¡z¬O«üÂù¦r²Õ¤§·N¡C
©³¤U¦A¤¶²Ð´XÓ 80386 ·s¼Wªº«ü¥O¡G
³oÓ«ü¥OºÙ¬°¡ubit test¡v¡A¦ì¤¸´ú¸Õ¤§·N¡A»yªk¬°¡G
BT ÅܼƩμȦs¾¹,¼È¦s¾¹ BT ÅܼƩμȦs¾¹,¥ß§YÈ
³o¨âºØ»yªkªº¡uÅܼƩμȦs¾¹¡vºÙ¬°¥Øªº¹Bºâ¤¸¡A«á±ªº¼È¦s¾¹©Î¥ß§YȺ٬°¡u¨Ó·½¹Bºâ¤¸¡v¡CBT «ü¥O¬O¦b¥Øªº¹Bºâ¤¸¤¤¿ï©w¤@Ӧ줸¡A±N¥¦½Æ»s¨ì¶i¦ìºX¼Ð¡A¦Ó©Ò¿ï©wªº¬O²Ä´XӦ줸¡A¥Ñ¨Ó·½¹Bºâ¤¸«ü©w¡C°õ¦æ§¹«á¡Aì¨Óªº¥Øªº¹Bºâ¤¸»P¨Ó·½¹Bºâ¤¸ªºÈ³£¤£ÅÜ¡C¦b²Ä¤@Ó»yªk¤¤¡A¥Øªº¹Bºâ¤¸»P¨Ó·½¹Bºâ¤¸ªºªø«×¡A³£n¬Û¦P¡A¥i¥H³£¬O 16 ¦ì¤¸¡A©Î³£¬O 32 ¦ì¤¸¡C¦b²Ä¤GÓ»yªkùØ¡AÅܼƩμȦs¾¹¥i¥H¬° 16 ¦ì¤¸©Î 32 ¦ì¤¸¡A¦Ó¥ß§Yȳ̦h¥u¯à¬O 8 Ӧ줸ªºªø«× ( ¨Æ¹ê¤W 8 Ӧ줸¯àªí¥Üªº¼Æ¡A¥i±q 0 ¨ì 255¡A¦¤w¯à³B²z 16 ¦ì¤¸©Î 32 ¦ì¤¸ªºÅܼƩμȦs¾¹¤F)¡C¨Ò¦p¡G
mov edx,1001b
bt edx,3
¤W±¨â±ø«ü¥O°õ¦æ§¹¡AEDX ¤´¬° 1001B¡A¦Ó¶i¦ìºX¼Ð·|³Q³]©w¡A¥ç§Y¶i¦ìºX¼Ð¬° 1¡A¦b DEBUG ùØÅã¥Ü CY¡A³o¬O¦]¬° EDX ªº²Ä¤TӦ줸¬° 1 ( ¬õ¦âªº¡u1¡v)¡A¨Ì·ÓºD¨Ò¡A²Ä´XӦ줸³£¬O±q 0 ¶}©l¡C
³oÓ«ü¥OºÙ¬°¡ubit test and complement¡v¡A¦ì¤¸´ú¸Õ¨Ã°µ¸É¼Æ¤§·N¡A¨ä»yªk¬O¡G
BTC ÅܼƩμȦs¾¹,¼È¦s¾¹ BTC ÅܼƩμȦs¾¹,¥ß§YÈ
BTC «ü¥O¬O¦b¥Øªº¹Bºâ¤¸¤¤¿ï©w¤@Ӧ줸¡A±N¥¦½Æ»s¨ì¶i¦ìºX¼Ð¡A¨Ã¨Ï¸Ó¦ì¤¸°µ¸É¼Æ¹Bºâ ( ¦pªGì¨Ó¸Ó¦ì¤¸¬° 1¡A´NÅܦ¨ 0¡F¦pªGì¨Ó¸Ó¦ì¤¸¬° 0¡A´NÅܦ¨ 1 )¡A¦Ó©Ò¿ï©wªº¬O²Ä´XӦ줸¡A¦b¨Ó·½¹Bºâ¤¸«ü©w¡C¥Øªº¹Bºâ¤¸©M¨Ó·½¹Bºâ¤¸ªº¨î¡A©M BT «ü¥O¤@¼Ë¡C¨Ò¦p¡G
mov edx,1001b btc edx,3 mov ecx,1001b btc ecx,2
¸g¹L«e¨â¹D«ü¥O«á¡AEDX Åܬ° 1¡A¶i¦ìºX¼Ð³Q³]©w¡C¸g¹L«á¨â¹D«ü¥O«á¡AECX Åܬ° 1101B¡A¶i¦ìºX¼Ð³Q²M°£ ( ¥ç§Y¶i¦ìºX¼ÐÅܬ° 0¡A¦b DEBUG Åã¥Ü NC )¡C
BTR ¬O¡ubit test and reset¡v¤§·N¡A·N§Y¦ì¤¸´ú¸Õ¨Ã²M°£¡A¨ä»yªk¬O¡G
BTR ÅܼƩμȦs¾¹,¼È¦s¾¹ BTR ÅܼƩμȦs¾¹,¥ß§YÈ
BTR «ü¥O·|¦b¥Øªº¹Bºâ¤¸¤¤¿ï©w¤@Ӧ줸¡A±N¥¦½Æ»s¨ì¶i¦ìºX¼Ð¡A¨Ã²M°£¸Ó¦ì¤¸¡A¨Ï¤§Åܬ° 0¡A¦Ó©Ò¿ï©wªº¬O²Ä´XӦ줸¡A¦b¨Ó·½¹Bºâ¤¸«ü©w¡C¥Øªº¹Bºâ¤¸©M¨Ó·½¹Bºâ¤¸ªº¨î¡A©M BT «ü¥O¤@¼Ë¡C¨Ò¦p¡G
mov edx,1001b btr edx,3 mov ecx,1001b btr ecx,1
¸g¹L³o¨â¹D«ü¥O«á¡AEDX Åܬ° 1¡A¶i¦ìºX¼Ð³Q³]©w¡C¦A¸g¹L«á¨â¹D«ü¥O¡AECX Åܬ° 1001B¡A¶i¦ìºX¼Ð³Q²M°£¡C
BTS ¬O¡ubit test and set¡v¤§·N¡A·N§Y¦ì¤¸´ú¸Õ¨Ã³]©w¡A¨ä»yªk¬O¡G
BTS ÅܼƩμȦs¾¹,¼È¦s¾¹ BTS ÅܼƩμȦs¾¹,¥ß§YÈ
BTS «ü¥O·|¦b¥Øªº¹Bºâ¤¸¤¤¿ï©w¤@Ӧ줸¡A±N¥¦½Æ»s¨ì¶i¦ìºX¼Ð¡A¨Ã³]©w¸Ó¦ì¤¸¡A( ³]©w¸Ó¦ì¤¸ªº·N«ä¬O¡A¨Ï¸Ó¦ì¤¸Åܬ° 1 )¡A¦Ó©Ò¿ï©wªº¬O²Ä´XӦ줸¡A¦b¨Ó·½¹Bºâ¤¸«ü©w¡C¥Øªº¹Bºâ¤¸©M¨Ó·½¹Bºâ¤¸ªº¨î¡A©M BT «ü¥O¤@¼Ë¡C¨Ò¦p¡G
mov edx,1001b bts edx,2
¸g¹L³o¨â¹D«ü¥O«á¡AEDX Åܬ° 1101B¡A¶i¦ìºX¼Ð³Q²M°£¡C
³o¤@³¹¡A´£¨ì¤F§Y¨Ï¬O¦b DOS ³oºØ 16 ¦ì¤¸ªº§@·~¨t²Î¤¤¡A¤]¯à°÷¤@¦¸³B²z 32 ¦ì¤¸ªº¸ê®Æ¡A·íµM±z±o¦³ 80386 ©Î¤ñ¥¦§ó°ªµ¥¯Åªº CPU¡A¤p¤ì°¸¤]¤w¹ê§@¤F³oºØµ{¦¡¡C¦b«e±§ÚÌ¥H DEBUG/SYMDEB °£¿ù³o¤@Ãþªºµ{¦¡®É¡A·|µo²{¦ü¥G³o¨Ï¥Î¨ì EAX µ¥ 32 ¦ì¤¸ªº¼È¦s¾¹©Î¹Bºâ¤¸®É¡A«e±³£·|¦³¤@Ӧ줸²Õ¡A66H¡A¬O DEBUG/SYMDEB ¤£»{ÃѪº¡C³oӦ줸²Õ¬O¤°»ò©O¡H
·í§Ú̦bì©l½X¤¤¡A¦pªG¨S¦³©w¸q¡u.386¡v¤§Ãþªº°²«ü¥O¡A¨º»ò MASM ·|°²©w³oÓµ{¦¡¬On¦b 16 ¦ì¤¸ªºÀô¹Ò¤¤¡A¨Ò¦p DOS¡A°õ¦æªº¡A©Ò¦³ªº¼È¦s¾¹¡B¹Bºâ¤¸¡B¦ì§}µ¥¬Ò¬° 16 ¦ì¤¸¡A¦p¹J¡uMOV AX,1234H¡v¡A«h·|³Q½s¦¨¡uB8 34 12¡v¡A¤]´N¬O»¡¡uMOV AX,¡v³Q MASM ²ÕĶ¦¨ B8¡A¦Ó¹Bºâ¤¸¡u1234H¡v²ÕĶ¬°¡u34 12¡v¡C¦pªG¦bì©l½X¤¤©w¸q¤F¡u.386¡v¤§Ãþªº°²«ü¥O¡A¨º»ò MASM ·|°²©w¦¹µ{¦¡·|¦b 32 ¦ì¤¸ªºÀô¹Ò¤¤¡A¨Ò¦p Windows 9x/Me/NT/XP µ¥¡A°õ¦æªº¡A©Ò¦³ªº¼È¦s¾¹¡B¹Bºâ¤¸¡B¦ì§}µ¥¬Ò¬° 32 ¦ì¤¸¡A¦p¹J¡uMOV EAX,1234H¡v¡A¤´µM·|³Q½s½X¦¨¡uB8 34 12 00 00¡v¡A¡uMOV EAX,¡v¤´³Q MASM ²ÕĶ¦¨ B8¡C
¥H¤W©Ò»¡ªº¬O¤@¯ë±¡§Î¡C¤£¹L¦b³o¤@³¹ùØ¡A¤p¤ì°¸¦bì©l½XùØ©w¸q¡u.386¡v¡A¦ý¬O¤S¦b°Ï¬q©w¸q¤¤¨Ï¥Î¡uUSE16¡v¡Aªí¥Ü¥i¥H¨Ï¥Î 32 ¦ì¤¸ªº¼È¦s¾¹¡B¹Bºâ¤¸µ¥¡A«o¤S¬° 16 ¦ì¤¸ªºµ{¦¡¡C³o®É MASM ·|¦b½s¦¨¾÷±ñ½X®É¡A¤º©w¬° 16 ¦ì¤¸ªº¹Bºâ¤¸¡B¼È¦s¾¹¡A¬G©Ò²ÕĶ¥X¨Óªº¡uB8¡vµø¬°¡uMOV AX,¡v¡C¦pªG¬O¨Ï¥Î 32 ¦ì¤¸ªº¼È¦s¾¹¡B¹Bºâ¤¸¡A·|¦Û°Ê¦b«e±¥[¤W«e¸m½X¡A66H¡A¥Hµø°Ï§O¡C¨Ò¦p¡A¹J¨ì¡uMOV EAX,1234H¡v³oÃþ«ü¥O¡A·|³Q½s½X¬°¡u66 B8 34 12 00 00¡v¡Aªí¥Ü¦¹³Bªº¼È¦s¾¹¡B¹Bºâ¤¸¬° 32 ¦ì¤¸¡C·í CPU °õ¦æ¨ì³o¸Ì¡A¦]¬° CPU ª¾¹D¦¹®É¬O¦b 16 ¦ì¤¸¤¤¡A¹J¨ì«e¸m½X 66H¡A´Nª¾¹D¦¹®Éªº¼È¦s¾¹¡B¹Bºâ¤¸¬° 32 ¦ì¤¸¡C
¤Ï¹L¨Ó¡A¦pªG¦b 32 ¦ì¤¸ªºÀô¹Ò¤¤¡AMASM ·|¤º©w¨Ï¥Î 32 ¦ì¤¸ªº¼È¦s¾¹¡B¹Bºâ¤¸µ¥¡A·íµM¤]¥i¥H°µ 16 ¦ì¤¸ªº¹Bºâ¡A¨Ò¦p¡uMOV AX,1234H¡v¡AMASM ¦b½s½X®É¡A¤]·|¦Û°Ê¥[¤W 66H §@¬°«e¸m½X¡C¦]¦¹¡A§Y¨Ï¡uMOV AX,¡v¡B¡uMOV EAX,¡vÁöµM¦bì©l½X¤¤§¡³Q²ÕĶ¬°¡uB8¡v¡A«o¤£·|²V²c¤£²M¡C
Á¿¤F³o»ò¦h¡A¤p¤ì°¸´N¬O¤@¥y¸Ü¡C§Ú̦bì©l½X¤¤©w¸qªº°Ï¬q¡A¨M©w¤F³oӰϬq¤º©w¬° 16 ¦ì¤¸©Î 32 ¦ì¤¸¡A¦pªGn¦b¦¹°Ï¬q¤º¨Ï¥Î¤£¦P¦ì¤¸ªº¼È¦s¾¹¡B¹Bºâ¤¸µ¥¡A´N·|³Q²ÕĶ¾¹¥[¤W«e¸m½X¡C¦b³o³¹ùØ¡A¤p¤ì°¸¨Ï¥Î§¹¾ãªº°Ï¬q©w¸q¡A¦p¤Uªí¥ªÃ䪺µ{¦¡¡A²Ä¤@¬On«Å§i¡u.386¡v°²«ü¥O¡A¨Ã¦b©w¸q°Ï¬q®É¨Ï¥Î¡uUSE16¡v¡F¤]¥i¥H¨Ï¥Î²©ö°Ï¬q©w¸q¡A¦p¤Uªí¥kÃä¡A¥ý«Å§i¡u.MODEL¡v¡A¦A«Å§i¡u.386¡v¡G
.386 ;*************************************** code SEGMENT USE16 ASSUME cs:code,ds:code ORG 100h ;--------------------------------------- main PROC FAR mov eax,4c00h mov ax,4c00h int 21h main ENDP ;--------------------------------------- code ENDS ;*************************************** END main | .MODEL TINY .386 .CODE ASSUME cs:@code ;--------------------------------------- main PROC FAR mov eax,4c00h mov ax,4c00h int 21h main ENDP ;*************************************** END main |
³o¨âºØ¤èªk©Ò±oªºµ{¦¡½X¬Ò¬Û¦P¡A²ÕĶ¡B³s±µ¨ÃÂàÅܦ¨ COM ÀÉ«á¡A¥H DEBUG32 ¸ü¤JÆ[¹î¡A±o¨ì¤U±µe±¡G
Debug32 - Version 1.0 - Copyright (C) Larson Computing 1994
CPU = ?86, Virtual 8086 Mode, Id/Step = 0F10, A20 enabled
-u [Enter]
291C:0100 66B8004C0000 MOV EAX,00004C00h
291C:0106 B8004C MOV AX,4C00h
291C:0109 CD21 INT 21h
291C:010B 0000 ADD [BX+SI],AL
291C:010D 0000 ADD [BX+SI],AL
·íµM¡A¦pªG±z¤£¥´ºâ¨Ï¥Î 80386 «ü¥O¡A§@ 32 ¦ì¤¸ªº¹Bºâ¡A¨º»ò´N¤£¶·«Å§i¡u.386¡v¡A¨º»òµ{¦¡¤¤¡A´NµLªk¥X²{¹³¡uEAX¡v³oºØ 32 ¦ì¤¸ªº¼È¦s¾¹©Î¹Bºâ¤¸¤F¡C
¦b Windows 9x/NT/XP/Vista µ¥ 32 ¦ì¤¸ªº§@·~¨t²Î¤¤¡A°Ï¬qªº³]©w¤è¦¡¡A¥²¶·¥ý«Å§i¡u.386¡v¡A¦A«Å§i¡u.MODEL¡v¡A³o¼Ë MASM ´N·|¥H 32 ¦ì¤¸ªº¤è¦¡²ÕĶ¡A¹J¨ì¡uMOV EAX,¡v´N½s½X¦¨¡uB8¡v¡C¦b Windows §@·~¨t²Î¤¤¡AÃø§K¤]·|¹J¨ì¡uMOV AX,¡v³oÃþ«ü¥O¡AMASM ·|±N¨ä½s½X¬°¡u66 B8¡v¡C