ユーザーからデータを受け取り、いくつかの数学的計算を行い、画面に答えを出力するプログラムを 8086 Assembly で作成する必要があります。プログラムのすべての部分を作成し、すべて正常に動作しますが、出力方法がわかりません。番号を画面に表示します。
すべての計算の最後に、答えは AX であり、符号なし 16 ビット整数として扱われます。AX レジスタの 10 進数 (符号なし) 値を出力するにはどうすればよいですか?
ユーザーからデータを受け取り、いくつかの数学的計算を行い、画面に答えを出力するプログラムを 8086 Assembly で作成する必要があります。プログラムのすべての部分を作成し、すべて正常に動作しますが、出力方法がわかりません。番号を画面に表示します。
すべての計算の最後に、答えは AX であり、符号なし 16 ビット整数として扱われます。AX レジスタの 10 進数 (符号なし) 値を出力するにはどうすればよいですか?
Cライブラリ関数itoaを使用できますが、それを実装するのはそれほど難しくありません。基本的には、次のようにします。
while (x){
buff[n]==x % 10;
x/=10;
n++;
}
次に、バッファを反転します(または文字単位で逆方向に出力します)
void print_number(int x);
print_number:
buff db 15 dup(0)
mov ax,[esp+4]
mov bx,0
itoa_w1:
mov cx, ax
mod cx,10
add cx,30h;'0'
div ax,10
mov buff[bx],cl
cmp ax,0
jnz itoa_w1
itoa_w2:
push buff[bx]
call putchar
pop ax
cmp bx,0
jnz itoa_w2
ret