gpt4 book ai didi

linux - 为什么递增对较大数字的作用与对单个数字的作用不同?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:07:24 25 4
gpt4 key购买 nike

section .bss

num1 resb 4
result resb 4


section .data


SYS_EXIT equ 1
SYS_READ equ 3
SYS_WRITE equ 4
STDIN equ 0
STDOUT equ 1
INCREMENT equ 1


msg1 db 'Please enter an integer here:',0xA
len1 EQU $- msg1

msg2 db 'Your integer after being incremented is:',0xA
len2 EQU $- msg2


section .text
global _start:

_start:
mov eax, SYS_WRITE ; Prompting user to enter a number.
mov ebx, STDOUT
mov ecx, msg1
mov edx, len1
int 0x80

mov eax, SYS_READ ; Reading users number.
mov ebx, STDOUT
mov ecx, num1
mov edx, 4
int 0x80

mov eax, SYS_WRITE ; Writing second message.
mov ebx, STDOUT
mov ecx, msg2
mov edx, len2
int 0x80



mov eax, [num1] ; incrementing the user's number.
mov ebx, INCREMENT
add eax, ebx
mov [result], eax



mov eax, SYS_WRITE ; Printing out incremented number.
mov ebx, STDOUT
mov ecx, result
mov edx, 4
int 0x80

今天刚开始学习基本的汇编代码,我正在尝试将用户输入的数字递增 1。当数字大于一位数时,我会得到奇怪的结果。有什么区别?

最佳答案

问题是您将输入视为数字而不是字符串。当您收到输入(字符串)时,您会得到一个(ASCII)字符串作为返回值。通过 add eax, INCREMENT (压缩)增加第一个字符(数字)确实有效,因为 AL 中包含的 [num] 的第一个 ASCII 字符值code>(EAX 的最低字节) 增加 1。发生这种情况是因为 0 的 ASCII 值是 48 而 9 的 ASCII 值是 57。

如果您认为您增加了这些“数字”,那么实际上您会增加它们的 ASCII 值,这在您达到一位数限制 (0-9) 之前效果很好。将 9 增加 1 将导致 : 而不是 10,正如您可能预期的那样,因为 9 的 ASCII 值> 是 57,加一得到 58,这是 : 的 ASCII 值。

因此,在使用整数运算对它们进行运算之前,您必须对“数字”进行“规范化”。将它们从 ASCII 字符串转换为整数值。

幸运的是,其他人已经在您之前做到了这一点,并将这些方法优化到实用的最大值。查找并搜索 atoi(ASCII 到整数)和 itoa(整数到 ASCII)。然后包围你的算术运算

mov eax, [num1]   ; incrementing the user's number.
mov ebx, INCREMENT
add eax, ebx
mov [result], eax

具有这些功能。

关于linux - 为什么递增对较大数字的作用与对单个数字的作用不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36669607/

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