Как собрать программу на 64-битном языке ассемблера в Cygwin под Windows7? - PullRequest
0 голосов
/ 26 марта 2019

Я хочу сделать ассемблерное программирование в 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?

...