Zipit Z1 >> Assembly

hello, world!


main.s

  .text
  .align 2
  .global _start

_start:
  bal reset
_undef:
  bal .
_swi:
  bal .
_prefetch_abort:
  bal .
_data_abort:
  bal .
_reserved:
  bal .
_irq:
  bal .
  bal . 
 
reset:
  ldr sp, =#0x60009600
  ldr r0, =#0x80000000
  ldr r1, =#0x40100
  str r1, [r0, #0x100]
  ldr r0, =#0x80002200
  ldr r1, [r0]
  orr r1, r1, #6
  str r1, [r0]
  nop
  nop
  nop
  nop
  nop
  nop
  ldr r0, =#0x80002600
  ldr r1, =#0x31000000
  str r1, [r0, #0x10]
  nop
  nop
  nop
  nop
  ldr r0, =#0x80000000
  ldr r1, =#0x60004
  str r1, [r0, #0x4c0]
  add r0, r0, #0x1000
  str r1, [r0, #0x4c0]
  mov r1, #0x100
  str r1, [r0, #0x100]
  mrc p15, 0, r5, c1, c0, 0
  bic r5, r5, #0xd
  mcr p15, 0, r5, c1, c0, 0
  nop
  nop
  nop
  nop
  ldr r0, =hello
  bl uart2_send_string
halt:
  b halt

uart2_send_string:
  stmfd sp!, {lr}
  mov r3, r0
0:
  ldrb r0, [r3]
  cmp r0, #0
  beq 1f
  bl uart2_send_char
  add r3, r3, #1
  b 0b
1:
  ldmfd sp!, {pc}
  
uart2_send_char:
  stmfd sp!, {lr}
  ldr r1, =#0x80001000
1:
  ldr r2, [r1, #0x140]
  tst r2, #0x800000
  bne 1b
  str r0, [r1, #0x480]
  ldmfd sp!, {pc}

  .align
hello: .asciz "Hello, world!"
  .end

main.ld

MEMORY {
  flash : ORIGIN = 0, LENGTH = 64M
  ram : ORIGIN = 0x40000000, LENGTH = 64M
}

__stack_end__ = 0x40000000 + 8K - 4;
SECTIONS {
  . = 0;
  startup : { *(.startup)} >flash
  prog : {
    *(.text)
    *(.rodata)
    *(.rodata*)
    *(.glue_7)
    *(.glue_7t)
  } >flash
  __end_of_text__ = .;
  .data : {
    __data_beg__ = .;
    __data_beg_src__ = __end_of_text__;
    *(.data)
    __data_end__ = .;
  } >ram AT>flash
  .bss : {
    __bss_beg__ = .;
    *(.bss)
  } >ram
  . = ALIGN(32 / 8);
}
. = ALIGN(32 / 8);
_end = .;
_bss_end__ = . ; __bss_end__ = . ; __end__ = . ;
PROVIDE(end = .);
PROVIDE(undefined_instruction_exception = endless_loop);
PROVIDE(software_interrupt_exception = endless_loop);
PROVIDE(prefetch_abort_exception = endless_loop);
PROVIDE(data_abort_exception = endless_loop);
PROVIDE(reserved_exception = endless_loop);
PROVIDE(interrupt_exception = endless_loop);
PROVIDE(fast_interrupt_exception = endless_loop);

Makefile

all:
	arm-none-eabi-as -ggdb -mcpu=arm7 -o main.o main.s
	arm-none-eabi-ld -T main.ld -o main.elf main.o
	arm-none-eabi-objcopy -O binary main.elf main.bin

clean:
	rm -rf main.ihx main.hex main.o main.elf

完成



返回上一頁