- 履歴一覧
- ソース を表示
- 練習問題 / 解答例 / FizzBuzz / MASM は削除されています。
- 1 (2009-07-01 (水) 17:30:41)
.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