Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 10

.

data

.balign 4

scan_format: .asciz "%d"

.balign 4

print_format: .asciz "%d\n"

.balign 4

number0: .word 0

.balign 4

number1: .word 0

.balign 4

number2: .word 0

.balign 4

number3: .word 0

.balign 4

number4: .word 0

.balign 4

return: .word 0

.balign 4

return2: .word 0
.balign 4

return3: .word 0

.balign 4

return4: .word 0

.balign 4

return5: .word 0

.text

.global main

.func main

main:

LDR R1, =return

STR LR, [R1]

LDR R0, =scan_format

LDR R1, =number0

BL scanf

LDR R9, =number0

LDR R9, [R9]

BL cuadratica
LDR LR, =return

LDR LR, [LR]

BX LR

cuadratica:

LDR R1, =return2

STR LR, [R1]

CMP R9, #0

BEQ end

SUB R9, R9, #1

LDR R0, =scan_format

LDR R1, =number1

BL scanf

LDR R0, =scan_format

LDR R1, =number2

BL scanf

LDR R0, =scan_format

LDR R1, =number3

BL scanf
LDR R2, =number1

LDR R2, [R2]

LDR R3, =number2

LDR R3, [R3]

LDR R4, =number3

LDR R4, [R4]

MUL R10, R3, R3 @ R5 = B^2

MOV R11,#100

BL division

MOV R5, R12

MUL R10, R2, R4 @ R6 = A*C

MOV R11,#100

BL division

MOV R6, R12

MOV R7, #4
MUL R8, R6, R7 @ R8 = 4*A*C

SUB R6, R5, R8 @ R6 = B^2 - 4*A*C

CMP R8, R5

BGT invalido

MOV R12, #100

MUL R6, R12

BL raiz

MOV R4,R12

MOV R7, #-1

MUL R8, R7, R3

ADD R10, R8, R4 @ R10 = -B + RAIZ(B^2 - 4*A*C)

MOV R12, #100

MUL R10, R12, R10

MOV R7, #2

MUL R11, R7, R2

BL division

MOV R5, R12 @ R6 = RTA1


SUB R10, R8, R4 @ R10 = -B - RAIZ(B^2 - 4*A*C)

MOV R12, #100

MUL R10, R12, R10

@MOV R8, R10 @ R6 = RTA1

@bl imprimir

MOV R7, #2

MUL R11, R7, R2

BL division

MOV R8, R12 @ R6 = RTA1

CMP R8,R5

blNE imprimir

MOV R8, R5

BL imprimir

b cuadratica

raiz:

LDR R1, =return3

STR lr, [R1]

MOV R12, #0
B raizloop

raizloop:

ADD R12, R12, #1

MUL R7, R12, R12

CMP R6,R7

BGT raizloop

SUB R12, R12, #1

LDR lr, =return3

LDR lr, [lr]

BX lr

division:

LDR R1, =return4

STR lr, [R1]

MOV R6, #1

MOV R12, #0

CMP R12, R10

BGT posdividendo

CMP R12, R11

BGT posdivisor

b divisionloop

posdividendo:

MOV R7, #-1

MUL R10,R7,R10
CMP R12, R10

BGT posdividendo

CMP R12, R11

BGT posdivisor

MUL R6, r7, R6

b divisionloop

posdivisor:

MOV R7, #-1

MUL R11, R7, R11

MUL R6, r7, R6

b divisionloop

divisionloop:

LDR R0, =return4

STR LR, [R0]

CMP R11, R10

BGT enddivision

ADD R12, R12, #1

SUB R10, R10, R11

b divisionloop

enddivision:

MUL R12, R6, R12


LDR lr, =return4

LDR lr, [lr]

BX lr

invalido:

MOV R8, #-1

BL imprimir

b cuadratica

imprimir:

LDR R1, =return3

STR lr, [R1]

LDR R1, =number4

STR R8, [R1]

LDR R0, =print_format

LDR R1, =number4

LDR R1, [R1]

BL printf

LDR lr, =return3

LDR lr, [lr]

BX lr
end:

LDR lr, =return

LDR lr, [lr]

BX lr

.global scanf

.global printf

.end

//cuadrática en arm

You might also like