0

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
4

0 回答 0