|
.section .data
prompt_str:
    .ascii "Enter Your Name: "
pstr_end:
    .set STR_SIZE, pstr_end - prompt_str
greet_str:
    .ascii "Hello "
gstr_end:
    .set GSTR_SIZE, gstr_end - greet_str
.section .bss
// зарезервируем 32 байта
.lcomm buff, 32
// макрос с двумя параметрами: строка, и её размер
// вывод строки на экран
.macro write str, str_size
    movl $4, %eax
    movl $1, %ebx
    movl \str, %ecx
    movl \str_size, %edx
    int $0x80
.endm
// макрос ввода строки
.macro read buff, buff_size
    movl $3, %eax
    movl $0, %ebx
    movl \buff, %ecx
    movl \buff_size, %edx
    int $0x80
.endm
.section .text
.globl _start
_start:
    write $prompt_str, $STR_SIZE
    read $buff, $32
    pushl %eax
// выводим приветствие
    write $greet_str, $GSTR_SIZE
    popl %edx
    write $buff, %edx
_exit:
    movl $1, %eax
    movl $0, %ebx
    int $0x80
Непосредственно вводимый код выделен фиолетовым цветом , все остальное(зеленым) - комментарии.
Компилируем так
as -s -o hellouser.o hellouser.s
ld -s -o hellouser hellouser.o
скачать архив с исходным кодом и исполняемым файлом этого примера
tar.gz
zip
Здесь у нас используется для чтения с клавиатуры системный вызов read , номер которого 3, а для чтения с клавиатуры первым параметром
указываем дескриптор файла stdin, то есть 0, вторым параметром указатель куда читать ( в нашем случае buff) и последний параметр -
сколько читать - у нас buff_size, вот в принципе и все, чем отличается данная прога от helloworld, который вы наверно уже изучили и испробовали.
|