Hello World

This commit is contained in:
Torsten Ruger 2014-04-22 14:39:47 +03:00
parent 5127deeeff
commit e23211602b
2 changed files with 24 additions and 9 deletions

View File

@ -3,7 +3,13 @@ module Asm
def initialize(data)
@data = data
end
def at address
@address = address
end
def length
@data.length
end
def assemble(io, as)
io << @data
end

View File

@ -10,23 +10,32 @@ class TestExtern < MiniTest::Test
def test_extern
@generator.instance_eval {
push lr
ldr r0, "hello world".to_sym
mov r7, 4 #4 is write
swi 0
pop pc
mov r7, 4 #4 == write
mov r0 , 1 #stdout
add r1 , pc , 12 # address of "hello Raisa"
mov r2 , 12 # length of hello
swi 0
mov r7, 1 #1 == exit
swi 0
}
write(7 , 'label')
@generator.add_data("Hello Raisa"+ "\n\x00")
write(7 , 'label')
end
#helper to write the file
def write len ,name
writer = Asm::ObjectWriter.new(Elf::Constants::TARGET_ARM)
assembly = @generator.assemble_to_string
assert_equal len * 4 , assembly.length
#assert_equal len * 4 , assembly.length
writer.set_text assembly
writer.save("#{name}_test.o")
end
end
# _start copied from dietc
# mov fp, #0 @ clear the frame pointer
# ldr a1, [sp] @ argc
# add a2, sp, #4 @ argv
# ldr ip, .L3
# add a3, a2, a1, lsl #2 @ &argv[argc]
# add a3, a3, #4 @ envp
# str a3, [ip, #0] @ environ = envp
# bl main