我正在尝试创建一个以十六进制和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
答案 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