gpt4 book ai didi

c - 在 Assembly 中使用 ATOI 将字符串转换为整数时出现问题

转载 作者:太空宇宙 更新时间:2023-11-04 08:26:41 25 4
gpt4 key购买 nike

我正在尝试读取两个字符串,使用 atoi 函数将它们转换为数字,然后打印出结果。

这是我未初始化的变量。 (%define BUFLEN 20)

SECTION .bss                    ; uninitialized data section

m: resb BUFLEN ;STRING 1
mlen: resb 4
r: resb BUFLEN ;STRING 2
rlen: resb 4

这是我获取用户输入/尝试将其分配到内存中的地方

   ; prompt user for FIRST NUMBER

mov eax, SYSCALL_WRITE ; write function
mov ebx, STDOUT ; Arg1: file descriptor
mov ecx, msg1 ; Arg2: addr of message
mov edx, len1 ; Arg3: length of message
int 080h ; ask kernel to write


; read in user input
;
mov eax, SYSCALL_READ ; read function
mov ebx, STDIN ; Arg 1: file descriptor
mov ecx, m ; Arg 2: address of buffer
mov edx, BUFLEN ; Arg 3: buffer length
int 080h
mov [rlen], eax ; save length of string read

; prompt user for SECOND NUMBER

mov eax, SYSCALL_WRITE ; write function
mov ebx, STDOUT ; Arg1: file descriptor
mov ecx, msg2 ; Arg2: addr of message
mov edx, len2 ; Arg3: length of message
int 080h ; ask kernel to write

; read in user input
mov eax, SYSCALL_READ ; read function
mov ebx, STDIN ; source
mov ecx, r ; destination
mov edx, BUFLEN ; length of destination
int 080h
mov [mlen], eax ; save length of string read

现在我尝试使用 atoi 转换字符串并打印出来

    ;CONVERT TO #
mov eax, 0 ;zero out register
mov eax, m
call atoi
add esp, 4

;PRINT IT
push ax
push print_r
call printf
add esp, 8

;CONVERT TO #
mov eax, 0 ;zero out register
mov eax, r
call atoi
add esp, 4

;PRINT IT
push ax
push print_r
call printf
add esp, 8

这是我的输出...

先输入#:1234

输入第二个#:1234

人数:1234

卡在第二个 atoi 电话上

最佳答案

首先,您没有为输入分配足够的空间并且您没有正确读取它。

如果您输入字符串12345678,您需要八个字节用于字符,一个用于换行符,一个用于终止\0。所以,RESD 1 并不能减少芥末,它只给你八个字节而不是十个字节。

对于实际阅读信息:

mov     eax, SYSCALL_READ       ; read function
mov ebx, STDIN ; Arg 1: file descriptor
mov ecx, m ; Arg 2: address of buffer
mov edx, 1 ; Arg 3: buffer length
int 080h

edx 是要读取的字节数,出于某种原因您已将其设置为 1。这不会获取您的整个号码,而只会获取第一个号码的第一个字符。

除了输入问题之外,还有一些问题。

首先声明: 移动 eax,[m]获取 m 处内存的内容。如果您正在调用 atoi,它将需要地址本身。

其次,您需要检查您的调用约定。向 esp 添加值对我来说似乎很……不寻常。它可能是正确的,但它似乎不符合我见过的任何调用约定。

关于c - 在 Assembly 中使用 ATOI 将字符串转换为整数时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30180562/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com