MIPS에서 mod를 작동시키는 방법을 혼동합니다. 아래는 제가 지금까지 생각 해낸 코드입니다. 내가 모드 이외의 더 많은 오류가있을 수 있습니다,하지만 그 오류는 MOD 오해의 결과라고 생각합니다. 내가하려는 것은 working 코드 (파이썬)를 여기에 가져 오는 것입니다.MIPS에서 mod 연산자를 올바르게 사용하려면 어떻게해야합니까?
정확하게 MIPS로 변환되어야합니다. 이 어셈블리에서 첫 촬영, 그래서이있을 수 있습니다 아래의 코드에서 나를 일인가하는 모드 오류보다 더 많은 :
# Takes the odd integers from 1 to 9, adds them,
# and spits out the result.
# main/driver starts here
.globl main
main:
#data segment
.data
Li: .byte 0x01 # i = 1
Lj: .byte 0x09 # j = 9
Lk: .byte 0x00 # k = 0
Ltwo: .byte 0x02 # 2 for mod usage
# text segment
.text
lb $t0, Li # temp reg for i
lb $t1, Lj # j
lb $t2, Lk # k
lb $t3, Ltwo # 2
L1: beq $t0, $t1, L2 # while i < 9, compute
div $t0, $t3 # i mod 2
mfhi $t6 # temp for the mod
beq $t6, 0, Lmod # if mod == 0, jump over to L1
add $t2, $t2, $t0 # k = k + i
Lmod: add $t0, $t0, 1 # i++
j L1 # repeat the while loop
L2: li $v0, 1 # system call code to print integer
lb $a0, Lk # address of int to print
syscall
li $v0, 10
syscall
문제가 무엇인지 설명하지 않았습니다. 어떻게 코드가 예상 한 것과 다른 방식으로 동작합니까? 처음에는 그'sb' 지시가 의심 스럽습니다. 'sb'의 목적은 레지스터의 하위 바이트를 메모리에 기록하는 것입니다. – Michael
당신은 정확하게 맞았습니다. 나는 거기에 파운드의 샷, 그리고 코드는 적어도 내가 문제를 정확하게 지적 할 수있는 시점입니다. 문제는 i의 7 번째 반복 동안 발생합니다. k는 그 시점까지 정확하게 증가합니다. i = 6 인 동안 k = 9, 이는 맞습니다. 그러나 다음 반복은 정답 인 16 대신 k를 10으로 만듭니다. 문제는 내가 k를 선언 한 방법에있을 수 있지만 확실하지 않습니다. – kcmallard