gpt4 book ai didi

linux - 正确的用户输入 - x86 Linux 程序集

转载 作者:太空狗 更新时间:2023-10-29 11:20:20 24 4
gpt4 key购买 nike

所以我正在使用 NASM 为 Linux 开发一个 x86 汇编程序。这个程序主要是询问用户的名字和他们最喜欢的颜色。执行此操作并将两个字符串存储在 .bss 部分中声明的变量中后,程序打印“No way name of user, favorite color is my favorite color, too!

我遇到的问题是输出中有巨大的空间,因为我不知道用户输入的字符串有多长,只知道我声明缓冲区的长度。

section .data
greet: db 'Hello!', 0Ah, 'What is your name?', 0Ah ;simple greeting
greetL: equ $-greet ;greet length
colorQ: db 'What is your favorite color?' ;color question
colorL: equ $-colorQ ;colorQ length
suprise1: db 'No way '
suprise1L equ $-suprise1
suprise3: db ' is my favorite color, too!', 0Ah

section .bss
name: resb 20 ;user's name
color: resb 15 ;user's color

section .text
global _start
_start:

greeting:
mov eax, 4
mov ebx, 1
mov ecx, greet
mov edx, greetL
int 80 ;print greet

getname:
mov eax, 3
mov ebx, 0
mov ecx, name
mov edx, 20
int 80 ;get name

askcolor:
;asks the user's favorite color using colorQ

getcolor:
mov eax, 3
mov ebx, 0
mov ecx, name
mov edx, 20
int 80

thesuprise:
mov eax, 4
mov ebx, 1
mov ecx, suprise1
mov edx, suprise1L
int 80

mov eax, 4
mov ebx, 1
mov ecx, name
mov edx, 20
int 80

;write the color

;write the "suprise" 3

mov eax, 1
mov ebx, 0
int 80

上面是我正在做的代码。有没有人有好的方法来计算输入的字符串的长度,或者一次取一个字符来计算字符串的长度?

提前谢谢你。

最佳答案

getname 中的int80 返回后,EAX 将包含实际读取的字节数,或者负错误指示。

你应该

  1. 检查错误返回
  2. 存储返回值,因为它给了你输入的长度

C 中的等效代码:

char name[20];
int rc;

rc = syscall(SYS_read, 0, name, 20-1); // leave space for terminating NUL
if (rc < 0) {
// handle error
} else {
name[rc] = '\0'; // NUL terminate the string
}

关于linux - 正确的用户输入 - x86 Linux 程序集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7867997/

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