Я попытался написать простую программу приветствия, используя сборку x86, которая принимает имя пользователя и распечатывает «Hello [userName]» Проблема заключается в том, что первая символика имени пользователя удваивается при печати приветствия msg, для пример:Сборка x86, программа приветствия
вход:
Black Knight
выход:
Hello BBlack Knight
и вот мой код
global _start
section .data
msg1 db "Hello "
user_input times 20 db 0
section .bss
section .text
_start :
; read
mov eax , 3
mov ebx , 0
mov ecx , user_input
mov edx , 20
int 0x80
; write
mov eax , 4
mov ebx , 1
mov ecx , msg1
mov edx , 7
int 0x80
mov eax , 4
mov ebx , 1
mov ecx , user_input
mov edx , 20
int 0x80
; exit
mov eax , 1
mov ebx , 0
int 0x80
Если ваш user_input буфер следует за msg1 непосредственно в памяти (например, выше), вы также можете выводить его как одну большую строку за один вызов, т.е. ecx = msg1, edx = 6 + 20. (выглядит как хороший пример для студентов, что в Assembly отсутствуют переменные, но компьютерная память состоит из последовательных байтов, и ваш код полностью отвечает за предоставление всего этого «структурного» значения, известного на языках высокого уровня, ярлыки - это просто псевдонимы адресов памяти, не более). Таким образом, по макету памяти, который вы определили, вы ввели пользовательский ввод для добавления в msg1 в памяти и который может быть использован во время записи – Ped7g