Я хочу сделать ассемблерное программирование в Linux с использованием NASM ( пример ). Но я хочу избежать установки Linux на мою машину. Скорее, у меня есть 64-битная машина Win7, на которой установлен Cygwin.
Вот моя тестовая программа:
section .data
text1 db "What is your name?"
text2 db "Hello "
section .bss
name resb 30
section .text
global start
start:
; display the prompt
mov rax, 1 ; specify std out
mov rdi, 1 ; specify write opeartion
mov rsi, text1 ; load the address of the variable
mov rdx, 19 ; write sizeof(text1) == 19 bytes
syscall ; tell the processor to accomplish the task
; take input from KB
mov rax, 0 ; specify std in
mov rdi, 0 ; specify read operation
mov rsi, name ; load the address of the variable
mov rdx, 30 ; read sizeof(name) == 30 bytes
syscall ; tell the processor to accomplish the task
; display "Hello "
mov rax, 1 ; specify std out
mov rdi, 1 ; specify write opeartion
mov rsi, text2 ; load the address of the variable
mov rdx, 7 ; write sizeof(text2) == 7 bytes
syscall ; tell the processor to accomplish the task
; display 'name'
mov rax, 1 ; specify std out
mov rdi, 1 ; specify write opeartion
mov rsi, name ; load the address of the variable
mov rdx, 30 ; write sizeof(name) == 30 bytes
syscall ; tell the processor to accomplish the task
; terminate program
mov rax, 60 ; specify program termination
mov rdi, 0 ; return without error
syscall
Ниже приведены мои команда сборки и вывод:
Acer@Acer-PC ~
$ nasm -f elf64 name_io.asm -o name_io.o
Acer@Acer-PC ~
$ ld name_io.o -o name_io.exe
Acer@Acer-PC ~
$ ./name_io
Illegal instruction
Acer@Acer-PC ~
$
Исходный код собирается, но не выполняется.
Что я могу сделать, чтобы правильно собрать и запустить программу сборки Linux в Cygwin + Windows?