2010-11-19 4 views
1

Я пытаюсь запустить следующий код ассемблера в Linux с помощью компилятора JWasm. Но для всех команд он говорит, что команда не найдена. Зачем? И он возвращает ошибку в строках, которая начинается с «;». Это своего рода линия комментариев? Можно ли удалить эти строки? Благодарю.Ассемблерный код не работает в Linux

;--- "hello world" for 64-bit Linux, using SYSCALL. 
;--- assemble: JWasm -elf64 -Fo=Lin64_1.o Lin64_1.asm 
;--- link:  gcc Lin64_1.o -o Lin64_1 


stdout equ 1 
SYS_WRITE equ 1 
SYS_EXIT equ 60 

.data 

string db 10,"Hello, world!",10 

.code 

_start: 
mov edx, sizeof string 
mov rsi, offset string 
mov edi, stdout 
mov eax, SYS_WRITE 
syscall 
mov eax, SYS_EXIT 
syscall 

end _start 
+0

Похоже, что OP пытается выполнить исходный файл как сценарий оболочки? –

+0

Есть ли у вас какие-либо идеи, как это исправить? спасибо. – rogcg

ответ

0

Я не знаком с JWasm, но, как правило, неизолированные записи являются ассемблерными директивами, а не инструкциями.

Вы хотите разместить (пробел/вкладку) для любых фактических инструкций ассемблера (вещи центрального процессора будет работать), а не на ассемблере директивы (то ассемблер использует, чтобы помочь вам)

+0

в файле с отступом, просто вот что его нет. Какой компилятор ассемблера вы используете для Linux? GCC компилирует его? – rogcg

+0

@psyhclo: Я всегда использую 'gas' (сборщик GNU) в Linux. –

+0

Я установил его, но как его запустить? Я набрал ./configure, make. И он установил кучу вещей, но как сделать компиляцию файлов? – rogcg

0

; обычно обозначает комментарии в большинстве видов сборок, странно, что JWasm не распознает строки как таковые. Попробуйте удалить их.

+0

Я удалил ';'. Но он не распознает команды. Для любой команды программы JWasm говорит, что команда не найдена. Я не знаю, является ли это моделью ассемблера, потому что код сборки linux отличается от кода ассемблера Windows. Но я пытался использовать код сборки для Linux, даже так, JWasm не распознает. Вы уже использовали JWasm? – rogcg

+0

Я скачал JWasm и скомпилировал его просто отлично; ** Lin64_1.asm: 24 строки, 2 прохода, 0 мс, 0 предупреждений, 0 ошибок ** –

+0

как вы его настроили? Я вставил jwasm папки в домашней папке, и я к нему доступ, выполнив в терминале: кд jwasm ./jwasm кд Образцы ./Lin64_1.asm , а затем возвращает это ./Lin64_1. asm: строка 1: синтаксическая ошибка около 'token 'не ожидала';' '/Lin64_1.asm: строка 1: '; ---" hello world "для 64-разрядной Linux, используя SYSCALL. имеют какое-либо представление о том, почему это может происходить? Благодарю. – rogcg

Смежные вопросы