どうしてプログラマに・・・プログラムが書けないのか?に出てくるお題の回答になるプログラムをFORTHとZ80で昨日書いたんだけど、お題を勘違いしててFizzとかBuzzって表示する場合に数字を表示しないってのを勘違いしてた(滝汗)
てな訳で反省の意味も込めて、8086のアセンブラで書きなおしてみた。MS-DOSコールを使っているので、COMファイルとして動く。翌日続きを書いてマス。
MOV CX,0001 ; MOV CX,1 MOV AX,CX ; MAIN: MOV AX,CX MOV DL,03 ; MOV DL,3 DIV DL ; DIV DL CMP AH,0 ; CMP AH,0 JZ 0136 ; JZ FIZZ MOV AX,CX ; MOV AX,CX MOV DL,05 ; MOV DL,5 DIV DL ; DIV DL CMP AH,0 ; CMP AH,0 JZ 0148 ; JZ BUZZ MOV AX,CX ; MOV AX,BX MOV BX,016F ; MOV BX,MSG3 MOV DL,0A ; MOV DL,10 DIV DL ; LOOP: DIV DL DEC BX ; DEC BX ADD AH,30 ; ADD AH,'0' MOV [BX],AH ; MOV [BX],AH MOV AH,00 ; MOV AH,0 CMP AL,00 ; CMP AL,0 JNZ 0120 ; JNZ LOOP MOV AH,09 ; MOV AH,09H MOV DX,BX ; MOV DX,BX INT 21 ; INT 21H JMP 014F ; JMP NEXT MOV AH,09 ; FIZZ: MOV AH,09H MOV DX,0162 ; MOV DX,MSG1 INT 21 ; INT 21H MOV AX,CX ; MOV AX,CX MOV DL,05 ; MOV DL,5 DIV DL ; DIV DL CMP AH,00 ; CMP AH,0 JNZ 014F ; JNZ NEXT MOV AH,09 ; BUZZ: MOV AH,09H MOV DX,0167 ; MOV DX,MSG2 INT 21 ; INT 21H MOV DL,2C ; NEXT: MOV DL,',' MOV AH,02 ; MOV AH,02H INT 21 ; INT 21H INC CX ; INC CX MOV AX,CX ; MOV AX,CX CMP AX,0065 ; CMP AX,101 JNZ 0103 ; JNZ MAIN MOV AX,4C00 ; MOV AX,4C00H INT 21 ; INT 21H DB "Fizz$" ; MSG1: DB "Fizz$" DB "Buzz$" ; MSG2: DB "Buzz$" DB " " ; DB " " DB "$" ; MSG3: DB "$"
「DEBUG」でDEBUGコマンドを起動して、「A 0100」で以下のソースを貼り付ける。コメント部分は無視されるので大丈夫。最後に「Enter」キー押して入力を終了し、「R CX」でファイルサイズを「0170」と入力、続いて「N ARE.COM」でファイル名を指定し、「W」で保存、「Q」でDEBUGを終了すれば、MS-DOSアプリケーションとして「ARE.COM」を動かすことが出来る。もちろん、Windows XPでもコマンドプロンプト開いた後に上記のように操作すればおっけー。