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

; CSC612M Ibarrientos, Chester Paul MP1

.data
DNA:
.asciiz "AGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGA
GTGTCTGATAGCAGCCC"
lText:
aText:
cText:
gText:
tText:
rcText:
fs_addr:
s1_addr:

.asciiz "DNA string length: %d\n"


.asciiz "Frequency of A: %d\n"
.asciiz "Frequency of C: %d\n"
.asciiz "Frequency of G: %d\n"
.asciiz "Frequency of T: %d\n"
.asciiz "Reverse complement of DNA String: %s"
.space 4
.space 4

size:
numA:
numC:
numG:
numT:
output:
pad:
params_sys5:

.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.space 255
.space 255
.space 255
.code
daddi

$s1, $zero, 0

addi $s2, $zero, DNA

; $s1 = counter = 0
; $s2 = address of dna
; $s3 as address holder of byte variable

s
addi $s4, $zero,output ; $s4 = address of output
countloop:
dadd
lb

$t2, $s2, $s1


$t3, 0($t2)

daddi $t1, $zero, 255


sub
$t1, $t1, $s1
dadd
$t1, $s4, $t1
mplement(writing backwards)

;get address of letter


;$t3 = letter

;get address to write reverse co

beqz $t3, endprint

;check if done

daddi $s1, $s1, 1

;increment loop counter

daddi $t4, $zero, 0x41


beq $t3, $t4, countA
daddi $t4, $zero, 0x43
beq $t3, $t4, countC
daddi $t4, $zero, 0x47
beq $t3, $t4, countG
daddi $t4, $zero, 0x54
beq $t3, $t4, countT

;if $t3 = A
;if $t3 = C
;if $t3 = G
;if $t3 = T

j countloop

;default continue loop

countA: addi $s3,$zero, numA


; get address of letter count
daddi $t5, $zero, 0x54 ; compute reverse complement of
letter
j sbreak
countC: addi $s3, $zero,numC
daddi $t5, $zero, 0x47
j sbreak
countG: addi $s3, $zero,numG
daddi $t5, $zero, 0x43
j sbreak
countT: addi $s3,$zero, numT
daddi $t5, $zero, 0x41
j sbreak
sbreak: lb $t6, 0($s3)
daddi $t6, $t6, 1
sb $t6, 0($s3)
sb $t5, 0($t1)
j countloop

;increment letter count

;store reverse complement

endprint:
addi $s3, $zero, size
sb $s1, 0($s3)
daddi r5, r0, lText
sw r5, fs_addr(r0)
sd $s1, s1_addr(r0)
daddi r14, r0, fs_addr
syscall 5

;print string length

daddi r5, r0, aText


sw r5, fs_addr(r0)
daddi $s2, $zero, numA
lb $s2, 0($s2)
sd $s2, s1_addr(r0)
daddi r14, r0, fs_addr
syscall 5

;print num of A, $s2 as temp

daddi r5, r0, cText


sw r5, fs_addr(r0)
daddi $s2, $zero, numC
lb $s2, 0($s2)
sd $s2, s1_addr(r0)
daddi r14, r0, fs_addr
syscall 5

;print num of C

daddi r5, r0, gText


sw r5, fs_addr(r0)
daddi $s2, $zero, numG
lb $s2, 0($s2)
sd $s2, s1_addr(r0)
daddi r14, r0, fs_addr
syscall 5

;print num of G

daddi r5, r0, tText


sw r5, fs_addr(r0)
daddi $s2, $zero, numT
lb $s2, 0($s2)
sd $s2, s1_addr(r0)
daddi r14, r0, fs_addr
syscall 5

;print num of T

daddi $t1, $zero, 259


sub $t1, $t1, $s1

;offset for output string

daddi r5, r0, rcText


sw r5, fs_addr(r0)
daddi r2, r0, output
dadd r2, r2, $t1
sd r2, s1_addr(r0)
daddi r14, r0, fs_addr
syscall 5

;add offset

You might also like