2010-11-19 25 views
1

Linux'ta aşağıdaki derleyici kodunu JWasm derleyicisini kullanarak çalıştırmaya çalışıyorum. Ancak tüm komutlar için, komut bulunamadı. Niye ya? Ve ";" ile başlayan satırlarda bir hata döndürür. Bir çeşit yorum satırı mu? Bu satırları kaldırabilir miyim? Teşekkürler.Assembler kodu Linux üzerinde çalışmıyor

;--- "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, kaynak dosyayı bir kabuk komut dosyası olarak çalıştırmaya çalışıyor gibi görünüyor? –

+0

Nasıl düzeltmem gerektiğine dair bir fikrin var mı? Teşekkürler. Dosyada – rogcg

cevap

0

Ben JWasm yabancıyım, ancak genellikle un-girintili girişleri montajcı direktifleri değil talimatlar.

herhangi fiili montajcı talimatlarına (şeyler aday olacağını CPU) değil, montajcı direktifleri için (boşluk/sekme) yerleştirmek istediğiniz

+0

girintili, sadece burada değil. Linux için hangi derleyici derleyicisini kullanıyorsunuz? GCC derliyor mu? – rogcg

+0

@psyhclo: Her zaman Linux'ta 'gas' (GNU assembler) kullanıyorum. –

+0

Yükledim, ancak nasıl başlatılır? ./configure yazdım. Ve bir sürü şey kurdu, ama nasıl dosyaları derlemek için ?? – rogcg

0

(şeyler montajcı size yardım etmek kullanır); Genelde, JWasm'ın satırları böyle algılayamaması gariptir. Onları kaldırmayı deneyin.

+0

';' kaldırdım. Fakat bu komutları tanımıyor. Programın herhangi bir komutu için JWasm komutun bulunmadığını söylüyor. Bir montajcının model olup olmadığını bilmiyorum, çünkü linux derleme kodu windows montaj kodundan farklıdır. Ancak linux için bir montaj kodu ile denedim, bu şekilde bile JWasm tanımadı. JWasm'ı zaten kullandınız mı? – rogcg

+0

JWasm'ı indirdim ve çok iyi bir şekilde derledim; ** Lin64_1.asm: 24 satır, 2 geçiş, 0 ms, 0 uyarı, 0 hata ** –

+0

nasıl yapılandırdınız? Eve klasöründe klasör JWasm yapıştırılan ve terminalde yaparak erişebilirsiniz: cd JWasm ./jwasm cd Örnekleri ./Lin64_1.asm ve daha sonra bu ./Lin64_1 döndürür. asm: 1. satır: "jetonun yakınında" sintatik hata beklemiyor "; SYSCALL kullanarak, 64 bit Linux için '/Lin64_1.asm: satır 1: '; ---" merhaba dünya ". bunun neden olabileceğine dair bir fikriniz var mı? Teşekkürler. – rogcg