Вот мой код (buffer.asm)Как я могу напечатать, сколько байтов было прочитано для консоли с помощью Assembly?
section .bss
bufflen equ 2
buff: resb bufflen
whatreadlen equ 1
whatread: resb whatreadlen
section .data
section .text
global main
main:
nop
read:
mov eax,3 ; Specify sys_read
mov ebx,0 ; Specify standard input
mov ecx,buff ; Where to read to...
mov edx,bufflen ; How long to read
int 80h ; Tell linux to do its magic
mov esi,eax ; copy sys_read return value to esi
mov [whatread],eax ; Store how many byte reads info to memory at loc whatread
mov eax,4 ; Specify sys_write
mov ebx,1 ; Specify standart output
mov ecx,[whatread] ; Get the value at loc whatread to ecx
add ecx,0x30 ; convert digit in EAX to corresponding character digit
mov edx,1 ; number of bytes to be written
int 80h ; Tell linux to do its work
Когда я называю это так:
./buffer > output.txt < all.txt
(Предположим all.txt имеет некоторый текст в нем, как "ABCDEF")
Я ожидаю увидеть номер в консоли. Однако я ничего не вижу. Что мне не хватает?
Пожалуйста, обратите внимание, что вы храните в DWord EAX в месте, которое было настроить, чтобы получать байты с помощью 'RESB whatreadlen'! –
@ user3144770 ах да .. вы правы. Благодарю. но не должен ли он автоматически сохранять байты длиной от eax в этой ситуации? –