43 lines
		
	
	
		
			598 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			43 lines
		
	
	
		
			598 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
| start_:
 | |
|   set r0, main
 | |
|   or pc, r0, r0
 | |
| 
 | |
| hello:
 | |
|   .word 0x4865
 | |
|   .word 0x6c6c
 | |
|   .word 0x6f2c
 | |
|   .word 0x2077
 | |
|   .word 0x6f72
 | |
|   .word 0x6c64
 | |
|   .word 0x2100
 | |
| 
 | |
| uart_send:  // r0 is pointer to data, r1, length
 | |
|   set r2, 0
 | |
|   set r3, 0x10
 | |
|   seth r3, 0xc0
 | |
|   set r4, 1
 | |
|  loop0:
 | |
|   load r5, [r3, 2]
 | |
|   and r5, r5, r4
 | |
|   cmp r5, r2
 | |
|   beq loop0
 | |
|   load r5, [r0]
 | |
|   and r6, r0, r4
 | |
|   cmp r6, r4
 | |
|   beq [pc, 2]
 | |
|   shr r5, r5, 8
 | |
|   store r5, [r3]
 | |
|   add r0, r0, r4
 | |
|   sub r1, r1, r4
 | |
|   cmp r1, r2
 | |
|   bneq loop0
 | |
|   or pc, lr, lr
 | |
| 
 | |
| main:
 | |
|   set r0, hello
 | |
|   set r1, 13
 | |
|   set r2, uart_send
 | |
|   set r3, main
 | |
|   or lr, r3, r3
 | |
|   or pc, r2, r2
 |