0% found this document useful (0 votes)
4 views

Add With Overflow

Asm add that handles overflow

Uploaded by

hebagod822
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
4 views

Add With Overflow

Asm add that handles overflow

Uploaded by

hebagod822
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 2

mov r1,r0 ; <|

sub r0,r1 ; |> R0 = R0 - R0 # R0 = 0b00000


mov mar,r0 ; MAR = R0 # enable reading from memory

not r0 ; R0 = ~R0 # R0 = 0b1111


mov r1,r0 ; R1 = R0 # R1 = 0b1111
shl r0,1 ; R0 = R0 << 1 # R0 = 0b1110
nand r0,r1 ; R0 = ~(R0 & R1) # R0 = 0b0001
mov r6,r0 ; R6 = R0 # backup 0b0001

in ; MBR = input() # read first value


mov r0,mbr ; R0 = MBR # store
mov r1,r0 ; R1 = R0 # copy

in ; MBR = input() # read second value


mov r0,mbr ; R0 = MBR # store
;.Start
mov r3,r0 ; # Save input

shr r0,1 ; <|


shr r0,1 ; |
shr r0,1 ; |> slide MBS to LSB (R0)
mov r4,r0 ; # Save

mov r0,r1 ; <|


shr r0,1 ; |
shr r0,1 ; |
shr r0,1 ; |> slide MBS to LSB (R1)
mov r5,r0 ; # Save

mov r0,r3 ; # Restore input


mov r2,r0 ; # Save input
add r0,r1 ; R0 = R0 + R1 # sum the two numbers
mov mbr,r0 ; # Use MBR as Backup
mov r0,r2 ; # Restore input
shl r0,1 ; <|
shr r0,1 ; |> erase MSB (R0)
mov r7,r0 ; # Save _

mov r0,r1 ; <|


shl r0,1 ; |
shr r0,1 ; |> erase MSB (R1)
mov r1,r0 ; |> erase MSB (R1)

mov r0,r7 ; # Restore _


add r0,r1 ; # sum with 3b (prevent overflow)
shr r0,1 ; <|
shr r0,1 ; |
shr r0,1 ; |> get MSB of sum (Carry out)
mov r7,r0 ; # Save Co

mov r0,r4 ; <|


mov r1,r0 ; |> prepare R4 to sum

mov r0,r7 ; # Restore Co


add r0,r1 ; # R0 = Co + R4
mov r7,r0 ; # Save _ans_

mov r0,r5 ; <|


mov r1,r0 ; |> prepare R5 to sum

mov r0,r7 ; # Restore _ans_


add r0,r1 ; # R0 = _ans_ + R4
shr r0,1 ; # get the second bite (overflow)

mov r2,r0 ; # save Co(overflow)


mov r0,mbr ; # restore the basic sum
mov r1,r0 ; # save basic sum
mov r0,r2 ; # retore Co(overflow)

mov mbr,r0 ; MBR = R0 # write result of Co

mov r0,r6 ; R0 = R6 # restore 0b0001


mov mar,r0 ; MAR = R0 # enable writing to memory

out ; output(MBR) # print result of Co

mov r0,r1 ; # retore basic sum


mov mbr,r0 ; MBR = R0 # write result of basic sum
out ; output(MBR) # print result of Co

You might also like