Almost have an x86_64 assembly example working.
This commit is contained in:
parent
37fbe91792
commit
596c5ec5d4
1
.gitignore
vendored
1
.gitignore
vendored
@ -1,2 +1,3 @@
|
||||
# Ignore builds
|
||||
bin/
|
||||
*.o
|
||||
|
14
Makefile
14
Makefile
@ -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
74
src/main-x86_64.asm
Normal 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
|
Loading…
Reference in New Issue
Block a user