Я пытаюсь прочитать символы из входного файла и поместить их в массив (кроме новых строковых символов).Назначение значений массиву - сборка
вот мой код:
mov dword [counter], 0
mov edi, [size]
loop:
mov esi, state
cmp [counter], edi ; read all chars of the file
je end_loop
pushad
mov eax, 3
mov ebx, dword [file_desc]
mov ecx, read_char
mov edx, 1
int 0x80
popad
cmp byte [read_char], '1'
je put_char
cmp byte [read_char], ' '
je put_char
jmp loop
put_char:
mov edx, [read_char]
mov [esi + counter], edx
;; print number of char read from 0 to size-1
pushad
mov ecx, dword [counter]
push ecx
push printInt
call printf
add esp, 8
popad
;; print char read
pushad
push edx
push printChar
call printf
add esp, 8
popad
;; print value stored in state[counter]
pushad
push dword [esi + counter]
push printChar
call printf
add esp, 8
popad
mov eax, [counter]
inc eax
mov [counter], eax
jmp loop
end_loop:
печать внутри цикла работает отлично, так как я получаю номер обугленного, полукокс я только что прочитал и полукокс в [ESI + счетчик] (предполагается, состояние [счетчик]).
однако, пытаясь напечатать его после цикла чтения, с этим кодом:
mov dword [counter], 0
mov edi, [size]
printarray:
mov esi, state
cmp [counter], edi
je end
pushad
push dword [esi + counter]
push printChar
call printf
add esp, 8
popad
pushad
mov ecx, [counter]
inc ecx
mov [counter], ecx
popad
jmp printarray
end:
все, что я получаю пробелы (новые символьные строки каждой строки из моего printChar).
Я не понимаю, что мои значения, которые я читаю, не хранятся в массиве. Код между end loop
и mov dword [counter], 0
не установлен перед циклом printarray
.
просто мои данные и ПБС:
section .data
newLine: DB "", 10, 0
printInt: DB "%d", 10, 0
printString: DB "%s", 10, 0
printChar: DB "%c", 10, 0
hello: DB "hello", 10, 0
section .bss
file_name resb 80
file_desc resd 1
WorldLength resd 1
WorldWidth resd 1
generations resd 1
print_freq resd 1
state resb 60*60
read_char resb 1
counter resd 1
size resd 1
Спасибо за вашу помощь.
Почему, если байт не является новой линией, я должен прыгнуть обратно в петлю? это символы, которые я хочу прочитать. Кроме того, я знаю, что файл содержит только пробелы, те и новые строки. Я попробую это, спасибо –
Кстати, размер не столько, сколько нужно читать, но сколько писать, разве это имеет значение? –
Вы выписываете только те, что вы читали, поскольку вышеприведенный код заменяет новые строки пробелами. – user35443