x86 - intel and att syntax
This commit is contained in:
parent
7e8d8fcf4c
commit
fcfa860a9a
|
@ -1,4 +1,4 @@
|
|||
default:
|
||||
rm -rf hello
|
||||
riscv64-linux-gnu-as hello.s -o hello.o
|
||||
riscv64-linux-gnu-gcc -o hello hello.s -nostdlib -static
|
||||
riscv64-linux-gnu-as main.asm -o main.o
|
||||
riscv64-linux-gnu-gcc -o main main.asm -nostdlib -static
|
||||
|
|
BIN
risc-v/hello
BIN
risc-v/hello
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,18 @@
|
|||
.globl __start
|
||||
|
||||
.data
|
||||
msg:
|
||||
.string "Hello World!"
|
||||
.byte 0
|
||||
.text
|
||||
|
||||
__start:
|
||||
LA a0, msg
|
||||
li a7, 4
|
||||
ecall
|
||||
|
||||
j Shutdown
|
||||
|
||||
Shutdown:
|
||||
li a7, 10
|
||||
ecall
|
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,10 @@
|
|||
.section .data
|
||||
|
||||
.section .text
|
||||
|
||||
.globl _start
|
||||
_start:
|
||||
movl $1, %eax
|
||||
movl $0, %ebx
|
||||
|
||||
int $0x80
|
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,38 @@
|
|||
# VARIABLES: The registers have the following uses:
|
||||
#
|
||||
# %edi - Holds the index of the data item being examined
|
||||
# %ebx - Largest data item found
|
||||
# %eax - Current data item
|
||||
#
|
||||
# The following memory locations are used:
|
||||
#
|
||||
# data_items - contains the item data. A 0 is used to terminate the data
|
||||
#
|
||||
|
||||
.section .data
|
||||
|
||||
data_items:
|
||||
.long 3, 67, 34, 222, 45, 75, 54, 34, 44, 33, 22, 11, 66, 0
|
||||
|
||||
.section .text
|
||||
|
||||
.globl _start
|
||||
_start:
|
||||
movl $0, %edi
|
||||
movl data_items(, %edi, 4), %eax
|
||||
movl %eax, %ebx
|
||||
|
||||
start_loop:
|
||||
cmpl $0, %eax
|
||||
je loop_exit
|
||||
incl %edi
|
||||
movl data_items(,%edi,4), %eax
|
||||
cmpl %ebx, %eax
|
||||
jle start_loop
|
||||
|
||||
movl %eax, %ebx
|
||||
jmp start_loop
|
||||
|
||||
loop_exit:
|
||||
movl $1, %eax
|
||||
int $0x80
|
|
@ -0,0 +1,3 @@
|
|||
default:
|
||||
as maximum.asm --32 -o maximum.o
|
||||
gcc -o maximum.elf -m32 maximum.o -nostdlib
|
Binary file not shown.
|
@ -0,0 +1,33 @@
|
|||
# edi = index of data_items
|
||||
# ebx = largest data item found
|
||||
# eax = current data item
|
||||
|
||||
.global _start
|
||||
.intel_syntax noprefix
|
||||
.section .text
|
||||
|
||||
_start:
|
||||
mov edi, 0 # copy 0 into edi - first addresss
|
||||
mov eax, [data_items + edi * 4] # move the first number (edi * 4) to eax
|
||||
mov ebx, eax # move ebx to eax
|
||||
jmp start_loop
|
||||
|
||||
start_loop:
|
||||
cmp eax, 0 # check if eax is 0, return value stored in EFLAGS register
|
||||
je loop_exit # checks EFLAGS if cmp is equal
|
||||
inc edi # move to the next number (increase index which is edi)
|
||||
|
||||
mov eax, [data_items + edi * 4] # move the next number (edi * 4) to eax
|
||||
cmp eax, ebx # compare largest item (ebx) to current item (eax)
|
||||
jle start_loop # if eax is less than ebx - jump to start_loop
|
||||
|
||||
mov ebx, eax # move eax to ebx
|
||||
jmp start_loop # jump back to start_loop
|
||||
|
||||
loop_exit:
|
||||
mov eax, 1 # move '1' into eax (exit syscall)
|
||||
int 0x80 # call kernel interrupt to exit program
|
||||
|
||||
.section .data
|
||||
data_items:
|
||||
.long 3, 67, 34, 222, 45, 75, 54, 34, 44, 33, 22, 11, 66, 0
|
Binary file not shown.
Binary file not shown.
Loading…
Reference in New Issue