如何在Assembly 8086中将整数转换为字符串

时间:2017-01-09 20:02:46

标签: string function assembly x86-16 emu8086

我正在尝试创建一个以十六进制和char *形式获取参数的函数,我试图将参数转换为字符串,然后将其附加到char *。 这是我的代码:

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

1 个答案:

答案 0 :(得分:2)

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