装配>我的atoi函数不能用int 21h啊3Fh

时间:2013-11-09 20:22:58

标签: assembly x86 dos atoi

我在汇编中创建了一个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

0 个答案:

没有答案