Almost have an x86_64 assembly example working.

This commit is contained in:
Nicolás A. Ortega 2017-04-10 21:52:41 +02:00
parent 37fbe91792
commit 596c5ec5d4
No known key found for this signature in database
GPG Key ID: 3D786FB3123FF1DD
3 changed files with 86 additions and 3 deletions

1
.gitignore vendored
View File

@ -1,2 +1,3 @@
# Ignore builds
bin/
*.o

View File

@ -21,10 +21,12 @@
# distribution.
# Compilers
ASM=as
CC=gcc
CXX=g++
JAVAC=javac
LD=ld
FTR=gfortran
JAVAC=javac
# Other commands
RM=rm -rf
@ -32,7 +34,13 @@ RM=rm -rf
# Directories
BINDIR=bin
all: c cpp fortran java
all: x86-64asm c cpp fortran java
x86-64asm:
mkdir -p $(BINDIR)
$(ASM) -o src/main-x86_64.o src/main-x86_64.asm
$(LD) -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o \
$(BINDIR)/doublesgame-x86_64asm src/main-x86_64.o -lc
c:
mkdir -p $(BINDIR)
@ -52,4 +60,4 @@ java:
.PHONY: clean
clean:
$(RM) $(BINDIR)
$(RM) src/*.o

74
src/main-x86_64.asm Normal file
View File

@ -0,0 +1,74 @@
# Copyright (C) 2017 Ortega Froysa, Nicolás <deathsbreed@themusicinnoise.net> All rights reserved.
# Author: Ortega Froysa, Nicolás <deathsbreed@themusicinnoise.net>
#
# This software is provided 'as-is', without any express or implied
# warranty. In no event will the authors be held liable for any damages
# arising from the use of this software.
#
# Permission is granted to anyone to use this software for any purpose,
# including commercial applications, and to alter it and redistribute it
# freely, subject to the following restrictions:
#
# 1. The origin of this software must not be misrepresented; you must not
# claim that you wrote the original software. If you use this software
# in a product, an acknowledgment in the product documentation would be
# appreciated but is not required.
#
# 2. Altered source versions must be plainly marked as such, and must not be
# misrepresented as being the original software.
#
# 3. This notice may not be removed or altered from any source
# distribution.
#
.section .data
equation:
.ascii "2^%d=\0"
query:
.ascii "%d\0"
goodbye:
.ascii "Goodbye!\0"
tryagain:
.ascii "Wrong answer, try again.\0"
correct:
.ascii "Correct!\0"
number:
.int 1
answer:
.int 0
.section .text
.globl _start
_start:
mov number, %rsi
mov $equation, %rdi
call printf
mov $query, %rdi
mov $answer, %rsi
call scanf
cmp $0, answer
je quit
mov number, %rsi
shl $1, %rsi
cmp %rdi, answer
je next
mov $tryagain, %rdi
call puts
jmp _start
next:
mov $correct, %rdi
call puts
mov number, %rax
inc %rax
mov %rax, number
jmp _start
quit:
mov $goodbye, %rdi
call puts
mov $0, %rdi
call exit