2017-01-09 57 views
-2

我想創建一個函數,獲取一個參數在十六進制和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個相同的分區。將其移到循環前並確保您不要修改AX而不是div指令


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 
相關問題