2017-01-09 15 views
-2

16進数とchar *のパラメータを取得する関数を作成しようとしていますが、パラメータを文字列に変換してchar *に追加しようとしています。 は、これは私のコードです:アセンブリで整数を文字列に変換する方法8086

wordToString PROC 
    push bp     
    mov bp,sp 

    xor cx,cx 
    mov bx, 10 

    loop1: 
    mov dx, 0  
    mov ax, [bp+6] 
    div bx 

    mov [bp+6][cx], dx 
    call print_al_chr 

    inc cx 
    cmp cx,4 
    jle loop1 


    mov sp,bp 
    pop bp 
    ret 2 


wordToString ENDP 

main: 
    lea dx, array 
    mov ax, num1 

    push dx 
    push ax 

    call wordToString 
+3

問題を説明するのを忘れました。また、あなたはコードをコメントしておらず、デバッガを使用していませんでした。地獄、あなたは構文エラーを修正していない。 – Jester

+0

私は問題があり、それを修正するためにあなたの助けが必要です。私の構文エラーは何か分かりません。 @Jester – Nathan1982

+3

'[bp + 6] [cx]'のアドレッシングモードはありません。このコードは実際に組み立てられますか? – fuz

答えて

1
mov ax, [bp+6] 

num1をが最後に押されたパラメータと、これ[bp+2]で入手可能なスタック上のリターンアドレスに最も近いです。したがって、あなたは書ける必要がありますmov ax, [bp+4]
また、ループ内でこの値を取得すると、5つの同じ部門で終了します。ループの前に移動し、div命令以外のAXを変更しないようにしてください。


ret 2 

あなたは、スタック上の2つの単語を押して、あなたが戻ったときに4つのバイトを削除する必要があります。これは有効な命令することはできませんret 4


mov [bp+6][cx], dx 

書きます!
ループを開始する前に配列へのポインタをフェッチする必要があります。ループ内でこの値を増やします。

;Before the loop 
mov di, [bp+6] 
... 
;Within the loop 
mov [di], dl   <<< Use DL, a byte in the range [0,9] 
inc di 
... 
inc cx 
cmp cx,4 
jle loop1    <<< Does 5 iterations because of JLE 
         <<< For 4 iterations you would use JL 
関連する問題