2020-03-10 15:59:36 -04:00
|
|
|
.section data 0x1000 {
|
|
|
|
|
number: .u8 10
|
2020-02-25 14:10:21 -05:00
|
|
|
|
|
|
|
|
main:
|
|
|
|
|
; Test addition
|
2020-03-10 15:59:36 -04:00
|
|
|
mov %status, 1
|
|
|
|
|
add %r0, 1
|
|
|
|
|
cmpeq %r0, 1
|
2020-02-25 14:10:21 -05:00
|
|
|
jz end
|
|
|
|
|
|
|
|
|
|
; Test addition from a register
|
2020-03-10 15:59:36 -04:00
|
|
|
mov %status, 2
|
2020-02-25 14:10:21 -05:00
|
|
|
add %r0, %r0
|
2020-03-10 15:59:36 -04:00
|
|
|
cmpeq %r0, 2
|
2020-02-25 14:10:21 -05:00
|
|
|
jz end
|
|
|
|
|
|
|
|
|
|
; Test addition from a u8 location
|
2020-03-10 15:59:36 -04:00
|
|
|
mov %status, 3
|
2020-02-25 14:10:21 -05:00
|
|
|
add %r0, (number)u8
|
2020-03-10 15:59:36 -04:00
|
|
|
cmpeq %r0, 12
|
2020-02-25 14:10:21 -05:00
|
|
|
jz end
|
|
|
|
|
|
|
|
|
|
; Test addition overflow
|
2020-03-10 15:59:36 -04:00
|
|
|
mov %status, 4
|
|
|
|
|
add %r0, 0xFFFFFFFFFFFFFFFF
|
|
|
|
|
cmpeq %r0, 11
|
2020-02-25 14:10:21 -05:00
|
|
|
jz end
|
|
|
|
|
|
|
|
|
|
; Test subtraction
|
2020-03-10 15:59:36 -04:00
|
|
|
mov %status, 5
|
2020-02-25 14:10:21 -05:00
|
|
|
mov %r0, (number)u8
|
2020-03-10 15:59:36 -04:00
|
|
|
sub %r0, 1
|
|
|
|
|
cmpeq %r0, 9
|
2020-02-25 14:10:21 -05:00
|
|
|
jz end
|
|
|
|
|
|
|
|
|
|
; Test subtraction from a register
|
2020-03-10 15:59:36 -04:00
|
|
|
mov %status, 6
|
|
|
|
|
mov %r1, 2
|
2020-02-25 14:10:21 -05:00
|
|
|
sub %r0, %r1
|
2020-03-10 15:59:36 -04:00
|
|
|
cmpeq %r0, 7
|
2020-02-25 14:10:21 -05:00
|
|
|
jz end
|
|
|
|
|
|
|
|
|
|
; Test subtraction overflow
|
2020-03-10 15:59:36 -04:00
|
|
|
mov %status, 7
|
|
|
|
|
sub %r0, 8
|
|
|
|
|
cmpeq %r0, 0xFFFFFFFFFFFFFFFF
|
2020-02-25 14:10:21 -05:00
|
|
|
jz end
|
|
|
|
|
|
|
|
|
|
; Test multiplication
|
2020-03-10 15:59:36 -04:00
|
|
|
mov %status, 8
|
2020-02-25 14:10:21 -05:00
|
|
|
mov %r0, (number)u8
|
2020-03-10 15:59:36 -04:00
|
|
|
mul %r0, 1
|
|
|
|
|
cmpeq %r0, 10
|
2020-02-25 14:10:21 -05:00
|
|
|
jz end
|
|
|
|
|
|
|
|
|
|
; Test multiplication from a register
|
2020-03-10 15:59:36 -04:00
|
|
|
mov %status, 9
|
|
|
|
|
mov %r1, 2
|
2020-02-25 14:10:21 -05:00
|
|
|
mul %r0, %r1
|
2020-03-10 15:59:36 -04:00
|
|
|
cmpeq %r0, 20
|
2020-02-25 14:10:21 -05:00
|
|
|
jz end
|
|
|
|
|
|
|
|
|
|
; Test negative multiplication
|
2020-03-10 15:59:36 -04:00
|
|
|
mov %status, 10
|
|
|
|
|
mul %r0, 0xFFFFFFFFFFFFFFFF ; -1
|
|
|
|
|
cmpeq %r0, 0xFFFFFFFFFFFFFFEC ; -20
|
2020-02-25 14:10:21 -05:00
|
|
|
jz end
|
|
|
|
|
|
|
|
|
|
; Test division
|
2020-03-10 15:59:36 -04:00
|
|
|
mov %status, 11
|
2020-02-25 14:10:21 -05:00
|
|
|
mov %r0, (number)u8
|
2020-03-10 15:59:36 -04:00
|
|
|
div %r0, 2
|
|
|
|
|
cmpeq %r0, 5
|
2020-02-25 14:10:21 -05:00
|
|
|
jz end
|
|
|
|
|
|
|
|
|
|
; Test integer division
|
2020-03-10 15:59:36 -04:00
|
|
|
mov %status, 12
|
|
|
|
|
mov %r1, 2
|
2020-02-25 14:10:21 -05:00
|
|
|
div %r0, %r1
|
2020-03-10 15:59:36 -04:00
|
|
|
cmpeq %r0, 2
|
2020-02-25 14:10:21 -05:00
|
|
|
jz end
|
|
|
|
|
|
|
|
|
|
; Test negative division with idiv
|
2020-03-10 15:59:36 -04:00
|
|
|
mov %status, 13
|
|
|
|
|
idiv %r0, 0xFFFFFFFFFFFFFFFF ; -1
|
|
|
|
|
cmpeq %r0, 0xFFFFFFFFFFFFFFFE ; -2
|
2020-02-25 14:10:21 -05:00
|
|
|
jz end
|
|
|
|
|
|
|
|
|
|
; Test modulo
|
2020-03-10 15:59:36 -04:00
|
|
|
mov %status, 14
|
2020-02-25 14:10:21 -05:00
|
|
|
mov %r0, (number)u8
|
2020-03-10 15:59:36 -04:00
|
|
|
mod %r0, 4
|
|
|
|
|
cmpeq %r0, 2
|
2020-02-25 14:10:21 -05:00
|
|
|
jz end
|
|
|
|
|
|
|
|
|
|
; Test mod from a register
|
2020-03-10 15:59:36 -04:00
|
|
|
mov %status, 15
|
2020-02-25 14:10:21 -05:00
|
|
|
mod %r0, %r0
|
2020-03-10 15:59:36 -04:00
|
|
|
cmpeq %r0, 0
|
2020-02-25 14:10:21 -05:00
|
|
|
jz end
|
|
|
|
|
|
|
|
|
|
; TODO : Test mod and div by zero
|
|
|
|
|
|
2020-03-10 15:59:36 -04:00
|
|
|
mov %status, 0
|
2020-02-25 14:10:21 -05:00
|
|
|
end:
|
|
|
|
|
halt
|
|
|
|
|
|
|
|
|
|
.export main
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.meta {
|
2020-03-10 12:18:31 -04:00
|
|
|
ip: main
|
2020-02-25 14:10:21 -05:00
|
|
|
}
|
|
|
|
|
|