続・FizzBuzz(8086アセンブラ)

どうしてプログラマに・・・プログラムが書けないのか?に出てくるお題の回答になるプログラムを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でもコマンドプロンプト開いた後に上記のように操作すればおっけー。