2012-05-05 9 views
0

私はまだx86アセンブリの周りに頭を抱えているので、6と7を乗算してデータをEAXに移動し、結果を出力します。それはうまくコンパイルされ、正常に動作しますが、42を印刷する代わりに、42秒のASCII文字が印刷されます。私はこのフォーラムで1文字の数字を印刷する方法を持っていますが、今では複数桁の数字を印刷する方法を理解する必要があります。ここにコードがあります:x86アセンブリ(masm32) - 複数桁のデータを個々の文字に分割する方法

.386 
.model flat, stdcall 
option casemap :none 
include \masm32\include\windows.inc 
include \masm32\include\kernel32.inc 
include \masm32\include\masm32.inc 
includelib \masm32\lib\kernel32.lib 
includelib \masm32\lib\masm32.lib 
.data 
    adrs dd 0 
.code 
start: 
    mov eax, 6 
    mov ebx, 7 
    imul eax, ebx 
    add eax, 48 
    mov adrs, eax 
    invoke StdOut, addr adrs 
    invoke ExitProcess, 0 
end start 

要約すると、データを個々の文字に分割して印刷する方法を理解する必要があります。どんな助けも素晴らしいだろう。

よろしく、

Progrmr

+0

[この質問](http://stackoverflow.com/q/10371353/968261)が役立ちます。 –

+0

私はそのポストを理解できないようです(コードは意味をなさない。私は絶対初心者です)。 – Progrmr

+0

番号を10ずつ繰り返します。残余物を集める。それらに「0」のASCIIコードを追加してください。 –

答えて

2
が繰り返し10によって、あなたの番号を割り

。残余物を集める。それらに「0」のASCIIコードを追加してください。

0

ここでは、数値(var sum)をとり、合計を100,10、および剰余を単位として除算することによって、その数に何百、何十、および何個のユニットがあるかを見つけるコードスニペットです。 30Hを加えた後、これらの値はすべてARRAYに保存されます。現在、ARRAYは数値のASCII相当量です。

: 
ARRAY Db 4 dup(?),0 
sum DW 253D 
: 
    mov esi, offset ARRAY 
    mov ax, word ptr sum2 
    mov bl,100D 
    div bl  ; ah - R and al - Q  
    mov bh, ah  
    add al,30h 
    mov [esi], al 
    add esi,1 

    mov ah,00 
    mov al,bh 
    mov bl,10D 
    div bl 
    mov bh, ah 
    add al,30h 
    mov [esi], al 
    add esi,1 

    mov dl,bh 
    add dl,30h 
    mov [esi],dl 

    lea dx,offset RESULT2 
    mov ah,09 
    int 21h 
    mov esi, offset ARRAY 
    mov cl,04 
loopdisplay1: 
    mov dl,[esi] 
    mov dh,00 
    mov ah,02 
    int 21h 
    add esi,1 
    dec cl 
    jnz loopdisplay1