Compare commits
	
		
			3 Commits
		
	
	
		
			86de75098a
			...
			57c787f87d
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 57c787f87d | |||
| 797b9503b7 | |||
| 54ce3caccb | 
							
								
								
									
										52
									
								
								lab1_v2.S
									
									
									
									
									
								
							
							
						
						
									
										52
									
								
								lab1_v2.S
									
									
									
									
									
								
							| @ -2,26 +2,50 @@ | ||||
| .cpu cortex-m4 | ||||
| .thumb | ||||
| 
 | ||||
| .section .data | ||||
|     test_string: .asciz "Hello" | ||||
| .macro BKPT_WRITE addr_src | ||||
|     mov r1, \addr_src | ||||
|     mov r0, 0x4 | ||||
|     bkpt 0xAB | ||||
| .endm | ||||
| 
 | ||||
| .section .text | ||||
| 
 | ||||
| lab1_v2: | ||||
|     sub sp, #6 | ||||
|     ldr r0, =test_string | ||||
|     mov r1, #5 | ||||
|     push.n {lr} | ||||
| 
 | ||||
|     copy_loop: | ||||
|     ldrb r2, [r0, r1] | ||||
|     strb r2, [sp, r1] | ||||
|     subs r1, #1 | ||||
|     bpl copy_loop | ||||
|     mov r0, #2073 | ||||
|     bl int_to_str | ||||
| 
 | ||||
|     mov r1, sp | ||||
|     mov r0, 0x04 | ||||
|     bkpt 0xAB | ||||
|     pop.n {pc} | ||||
| 
 | ||||
|     add sp, #6 | ||||
| int_to_str: | ||||
|     mov r3, sp | ||||
| 
 | ||||
|     @ write newline + NULL terminator
 | ||||
|     mov r5, #0x000A | ||||
|     strh r5, [r3, #-2]! | ||||
| 
 | ||||
|     @ --- handmade modulo ---
 | ||||
|     mov r4, #10 | ||||
| 
 | ||||
|     iterate: | ||||
|     mov  r1, r0       @ save orig to r1
 | ||||
|     udiv r0, r0, r4   @ orig/10 and overwrite old orig value
 | ||||
|     mul  r2, r0, r4   @ orig/10*10, place separately
 | ||||
|     subs r5, r1, r2   @ orig - orig/10*10 => modulo (and update flags)
 | ||||
| 
 | ||||
|     beq check_if_pending_digits_exist | ||||
|     proceed_with_conversion: | ||||
| 
 | ||||
|     add r5, #48           @ int -> char (only digits, so it's fine)
 | ||||
|     strb r5, [r3, #-1]!   @ write next char to RAM
 | ||||
|     b iterate | ||||
| 
 | ||||
|     check_if_pending_digits_exist: | ||||
|     cmp r0, #0 | ||||
|     bne proceed_with_conversion | ||||
| 
 | ||||
|     finish: | ||||
|     BKPT_WRITE r3 | ||||
| 
 | ||||
|     mov pc, lr | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user