;user32.incがインクルードされていなければインクルードする ifndef MessageBoxA include \masm32\include\user32.inc includelib \masm32\lib\user32.lib endif ;kernel32.incがインクルードされていなければインクルードする ifndef ExitProcess include \masm32\include\kernel32.inc includelib \masm32\lib\kernel32.lib endif .data dispregbuf db "Line",9 line16 db 8 dup (?)," ",9 line10 db 11 dup (?),0dh,0ah,0dh,0ah db "EAX",9 eax16 db 8 dup (?)," ",9 eax10 db 11 dup (?),0dh,0ah db "EBX",9 ebx16 db 8 dup (?)," ",9 ebx10 db 11 dup (?),0dh,0ah db "ECX",9 ecx16 db 8 dup (?)," ",9 ecx10 db 11 dup (?),0dh,0ah db "EDX",9 edx16 db 8 dup (?)," ",9 edx10 db 11 dup (?),0dh,0ah db "ESI",9 esi16 db 8 dup (?)," ",9 esi10 db 11 dup (?),0dh,0ah db "EDI",9 edi16 db 8 dup (?)," ",9 edi10 db 11 dup (?),0dh,0ah,0dh,0ah db "Carry flag ",9,9 cf db ?,0dh,0ah db "Parity flag ",9,9 pf db ?,0dh,0ah db "Zero flag ",9,9 zf db ?,0dh,0ah db "Sign flag ",9,9 sf db ?,0dh,0ah db "Overflow flag",9,9 of db ?,0dh,0ah,0dh,0ah db "プログラムの実行を続けますか?",0 dispregtitle db "Debug window",0 .code itoa16 proc private dst:ptr,src std mov ebx,src mov ecx,8 mov edi,dst add edi,7 @@: mov al,bl and al,0fh ; 00h - 09h / 0Ah - 0Fh cmp al,0ah ; CY / NC sbb al,69h ; 96h - 9Fh / A1h - A6h das ; 30h - 39h / 41h - 46h stosb shr ebx,4 loop @b ret itoa16 endp itoa10sub proc private ;各桁の値を計算するサブルーチン mov eax,edx xor edx,edx div ebx ;eax=eax/ebx , edx=eax mod ebx cmp al,0 jnz @f cmp esi,1 jz @f ret ;0でない桁が現れていなければret @@: add al,'0' stosb dec ecx mov esi,1 ret itoa10sub endp itoa10 proc private dst:ptr,src cld mov ecx,11 ;変換後の文字数 mov edx,src mov edi,dst cmp edx,0 ;負の数の処理 jge @f mov byte ptr [edi],'-' dec ecx neg edx inc edi @@: xor esi,esi ;0でない桁が現れるまでesi=0にしておく mov ebx,1000000000 call itoa10sub mov ebx,100000000 call itoa10sub mov ebx,10000000 call itoa10sub mov ebx,1000000 call itoa10sub mov ebx,100000 call itoa10sub mov ebx,10000 call itoa10sub mov ebx,1000 call itoa10sub mov ebx,100 call itoa10sub mov ebx,10 call itoa10sub add dl,'0' mov [edi],dl dec ecx inc edi mov al,' ' ;余った桁をスペースで埋めてret rep stosb ret itoa10 endp dispreg proc private line push eax push ebx push ecx push edx push esi push edi pushf setc cf setp pf setz zf sets sf seto of add cf,'0' add pf,'0' add zf,'0' add sf,'0' add of,'0' invoke itoa16,offset line16,line invoke itoa10,offset line10,line invoke itoa16,offset eax16,[ebp- 4] invoke itoa10,offset eax10,[ebp- 4] invoke itoa16,offset ebx16,[ebp- 8] invoke itoa10,offset ebx10,[ebp- 8] invoke itoa16,offset ecx16,[ebp-12] invoke itoa10,offset ecx10,[ebp-12] invoke itoa16,offset edx16,[ebp-16] invoke itoa10,offset edx10,[ebp-16] invoke itoa16,offset esi16,[ebp-20] invoke itoa10,offset esi10,[ebp-20] invoke itoa16,offset edi16,[ebp-24] invoke itoa10,offset edi10,[ebp-24] invoke MessageBoxA,0,offset dispregbuf,offset dispregtitle,24h cmp eax,6 jz @f invoke ExitProcess,0 @@: popf pop edi pop esi pop edx pop ecx pop ebx pop eax ret dispreg endp