Я смотрел на это часами и не могу понять, почему после моего второго ввода моя строка, сохраненная из первого ввода, изменяется.
Когда я запускаю пробный запуск следующим образом:
Пожалуйста, введите идентификатор: 12
Пожалуйста, введите имя: Джей
Когда я запускаю эту часть кода только для стандартного ввода и вывода, gdb показывает, что id1Buf имеет значение «12\n» после первого чтения. Затем он предлагает ввести имя, поэтому, когда я ввожу jay, значение id1Buf по какой-то причине меняется на «12\njay». Не могу разобраться, было бы здорово, если бы кто-нибудь помог.
SECTION .text ;.text section
global _start ;start section
_start: ;start
main:
;;write out
mov eax, SYSCALL_WRITE ;write function
mov ebx, STDOUT ;write value
mov ecx, id ;address of message
mov edx, lenid ;length of message
int 80h ;interrupt
;;read user input
mov eax, SYSCALL_READ ;read function
mov ebx, STDIN ;read in value
mov ecx, id1Buf ;store read value in id1Buf
mov edx, IDBUFLEN ;length of idbuf
int 80h ;interrupt
;;write out
mov eax, SYSCALL_WRITE ;write function
mov ebx, STDOUT ;write value
mov ecx, name ;address of message
mov edx, lenname ;length of message
int 80h ;interrupt
;;read user input
mov eax, SYSCALL_READ ;read function
mov ebx, STDIN ;read in value
mov ecx, name1Buf ;store read value in name1Buf
mov edx, NAMEBUFLEN ;length of namebuf
int 80h ;interrupt
mov [name1readlen], eax ;store length of name
Это какой-то другой код для справки.
;;constants
%define STDIN 0 ;read function
%define STDOUT 1 ;write function
%define STDERR 2 ;error function
%define SYSCALL_EXIT 1 ;exit
%define SYSCALL_READ 3 ;read
%define SYSCALL_WRITE 4 ;write
%define IDBUFLEN 3 ;length of id buffer
%define NAMEBUFLEN 500 ;length of name buffer
;;given data
SECTION .data
id db "Please enter the id: " ;prompt for id
lenid equ $-id ;length of id prompt
name db "Please enter the name: " ;prompt for name
lenname equ $-name ;length of name
idlabel db "ID: " ;used for printing end data
lenidlabel equ $-idlabel ;length of id label
namelabel db "NAME: " ;used for printing end data
lennamelabel equ $-namelabel ;length of name label
printline db "", 10 ;new line character
;;unintialized data
SECTION .bss
id1Buf: resb IDBUFLEN ;buffer for id 1
name1Buf: resb NAMEBUFLEN ;buffer for name 1
equ
вместо%define
для этой константы и скажите мне, что произойдет. - person alvonellos   schedule 26.03.2014IDBUFLEN equ 2
- person Captain Gh0st   schedule 26.03.2014id1Buf: resb IDBUFLEN
id2Buf: resb IDBUFLEN
как лучше всего сохранить все эти пользовательские данные для удобного редактирования / манипулирования позже? - person Captain Gh0st   schedule 26.03.2014