我atoi
在汇编中创建了一个函数,当我用已经定义的字符串对其进行测试时,它工作正常,但是当我用来int 21h / 3Fh
从用户那里获取字符串(然后我将其存储并传递给这个函数)时,它给了我一些毫无意义的价值。
我正在为学校做这个,我把它放在我正在制作的某个图书馆中,除了这个它包含itoa
我没有遇到问题的功能。
这些函数将其地址先前存储在 中的字符串转换为存储在 中SI
的整数AX
。
我itoa
用来显示AX
.
希望有人知道是什么问题。
这是不工作的例子:
mov ah, 3fh ;get string
mov dx, stri
int 21h
mov si, stri ;convert it
call z_atoi
stri db '$$$$$$$$$$$$$$$$$$'
工作示例:
mov si, stri
call z_atoi
stri db '789$'
功能:
z_atoi: ;z_atoi(si=str) return ax=[number]
xor dh, dh ;needs to be zero for dx==dl
xor ax, ax ;the number
xor cx, cx ;the character
z_atoi1:
test cx, cx ;is this the first character
je z_atoi2 ;if so skip this
imul ax, 10 ;multiply by 10
z_atoi2:
mov bx, si
add bx, cx
mov dl, [bx] ;get next character
sub dl, 30h ;ascii to integer
add ax, dx ;add to the number
inc cx ;next character
inc bx
cmp byte[bx], '$' ;check if there are any more characters
je z_atoi3
cmp byte[bx], 0
je z_atoi3
cmp byte[bx], 0ah ;<--THIS WAS WHAT I WAS MISSING, THANKS
je z_atoi3
jmp z_atoi1
z_atoi3:
ret