Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[54.242.220.142] |
|
Сообщ.
#1
,
|
|
|
Код
.data message: .ascii "ASSEMBLY OUTPUT" .text .globl _start _start: movq $1, %rdi movq $1, %rax movq $15, %rdx movq $message, %rsi syscall movq $60, %rax movq $0, %rdi syscall После запуска программа выполняется, но ничего в терминал не выводит, а по задумке должна вывести сообщение ASSEMBLY OUTPUT. В чём может быть проблема в Linux с этим кодом? |
Сообщ.
#2
,
|
|
|
eax=1 - это вроде бы sys_exit. A sys_write - это eax=4.
Или не? |
Сообщ.
#3
,
|
|
|
По справке https://filippo.io/linux-syscall-table/ код такой.
Проблема в исходнике была в отсутствии символов \n в строке, поэтому её не видно было. |
Сообщ.
#4
,
|
|
|
Цитата Akina @ Это в 32-х битах 1 - выход, 4 - запись, а в 64-х битах: 1 - write, 60 - выход. Такая немного странная система.eax=1 - это вроде бы sys_exit. A sys_write - это eax=4. Sunless, у меня всё работает. Может, вы не так компилируете как-то? as --64 -g -o code.o code.s ld -m elf_x86_64 -o code code.o |
Сообщ.
#5
,
|
|
|
Код изменил. Посоветовали добавить flush. Он может быть выполнен символом новой строки в сообщении, а можно вызвать fsync.
.data message: .ascii "ASSEMBLY OUTPUT MESSAGE" .equ one, 1 len = . - message .text .globl _start _start: movq $one, %rdi movq $one, %rax movq $len, %rdx movq $message, %rsi syscall #sys_write movq $74, %rax #rdi == 1 syscall #fsync movq $60, %rax xor %rdi, %rdi syscall #exit У меня binutils 2.30 для компиляции и терминал в Linux. Сборка: Цитата as -g -mintel64 -mtune=corei7 -o main.o main_part1.s ld -Ofast -o main main.o |