¦¦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