.386 .model flat, stdcall option casemap: none include windows.inc include kernel32.inc includelib kernel32.lib .data Fizz db "Fizz",0Ah,0 Buzz db "Buzz",0Ah,0 FizzBuzz db "FizzBuzz",0Ah,0 Count dd 100 .data? hStdout dd ? Dummy dd ? Buf db 128 dup(?) .code Start: Init: push STD_OUTPUT_HANDLE call GetStdHandle mov hStdout, eax jmp MainRoutine MainRoutine: mov eax, Count mov edx, Count shr edx, 16 mov bx, 15 div bx test dx, dx jz WriteFizzBuzz mov eax, Count mov edx, Count shr edx, 16 mov bx, 3 div bx test dx, dx jz WriteFizz mov eax, Count mov edx, Count shr edx, 16 mov bx, 5 div bx test dx, dx jz WriteBuzz jmp WriteN DecrimentCount: dec Count mov eax, Count test eax, eax jnz MainRoutine jmp Return WriteFizz: push offset Fizz call lstrlen push NULL push offset Dummy push eax push offset Fizz push hStdout call WriteConsole jmp DecrimentCount WriteBuzz: push offset Buzz call lstrlen push NULL push offset Dummy push eax push offset Buzz push hStdout call WriteConsole jmp DecrimentCount WriteFizzBuzz: push offset FizzBuzz call lstrlen push NULL push offset Dummy push eax push offset FizzBuzz push hStdout call WriteConsole jmp DecrimentCount WriteN: mov eax, Count mov edx, Count shr edx, 16 mov bx, 10 div bx mov cx, dx mov edx, eax shr edx, 16 mov bx, 10 div bx ;axには三桁目 dxには二桁目 cxには一桁目 add al, 30h add dl, 30h add cl, 30h mov ebx, offset Buf mov [ebx + 0], al mov [ebx + 1], dl mov [ebx + 2], cl mov al, 0Ah mov dl, 0 mov [ebx + 3], al mov [ebx + 4], dl push offset Buf call lstrlen push NULL push offset Dummy push eax push offset Buf push hStdout call WriteConsole jmp DecrimentCount Return: push 0 call ExitProcess end Start