gpt4 book ai didi

ubuntu - 程序集 8086 - 从键盘读取一个值并将其与另一个值进行比较

转载 作者:行者123 更新时间:2023-12-04 18:41:12 25 4
gpt4 key购买 nike

我写了一个程序,要求插入一个值:如果该值小于或等于 100,则程序退出而没有错误;否则它会打印一条错误消息并退出。
不幸的是,当我插入大于 100 的值时,它永远不会打印错误消息,所以输入字符串的转换可能存在一些问题,但我不明白在哪里!
这是代码:

.section .data
str:
.ascii "Insert value:\n"
str_len:
.long . - str
err:
.ascii "Error\n"
err_len:
.long . - err
car:
.byte 0
.section .text
.global _start

_start:
movl $4, %eax #print string with sys read
movl $1, %ebx
leal str, %ecx
movl str_len, %edx
int $0x80
xorl %eax, %eax

again:
pushl %eax #save eax on stack
movl $3, %eax # read from keyboard with sys write
xorl %ebx, %ebx
leal car, %ecx
mov $1, %edx # read 1 char at the time
int $0x80
cmp $10, car # if it reads '\n' then end
je end
subb $48, car # else it converts ASCII code of char to correspondent values
popl %eax
movl $10, %ebx
mull %ebx # eax = eax * 10 + car
addl car, %eax
jmp again

end:
popl %eax
cmpl $100, %eax
jg error

error:
movl $4, %eax #print error message
movl $1, %ebx
leal err, %ecx
movl err_len, %edx

exit:
movl $1, %eax
xorl %ebx, %ebx
int $0x80

最佳答案

您的代码中存在许多问题:

此指令将产生 32 位比较 (cmpl):

cmp   $10, car

因此,您需要使用 cmpb 指定您想要一个 8 位比较。 .

error您忘记了 int $0x80 的程序的一部分,所以它不会打印任何东西。

你有一个 jg error , 但随后 error: label 在下一行,因此无论是否进行跳转,您都会到达那里。该跳转应更改为 jng exit .

关于ubuntu - 程序集 8086 - 从键盘读取一个值并将其与另一个值进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34789257/

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