/*
 * Aufgabe 4_2.S
 *
 *  Created on: 11.01.2021
 *      Author: Julia Kisela
 */


  .data
 .global datastart
datastart:

.text /* Specify that code goes in text segment */
.code 32 /* Select ARM instruction set */
.global _startup /* Specify global symbol */
_startup:
	ldr sp, =0x40001000
	ldr r0, =0x56 // R0	A
	ldr r1, =0x42 // R1	B
	bl bcdaddition

stop:
nop
bal stop

bcdaddition:
	stmfd sp!, {r4-r9, lr}
	mov r4, #8 // R4	Count
	mov r5, #0x0f // R5 	Mask
	mov r6, #0 // R6 	BCD_cy
	mov r7, #0 // R7 	Result
while:
	and r8, r0, r5
	and r9, r1, r5
	add r8, r9
	add r8, r6
	subs r8, #10
	bmi isnegative // Negativflag, springt wenn r8 < 0
ispositive:
	mov r6, #1
	b endif
isnegative:
	add r8, #10
	mov r6, #0
endif:
	add r7, r8
	mov r0, r0, ror#4
	mov r1, r1, ror#4
	mov r7, r7, ror#4
	subs r4, #1
	bne while
	mov r2, r7 // result in r2
	mov r3, r6 // Ubertrag in r3
	ldmfd sp!, {r4-r9, pc}


.end

