방금 어셈블리를 배우기 시작했고 한 번의 실습에서 다음 코드의 결과를 찾아야 만했습니다. 그러나 저는 매우 새롭기 때문에 그것이 무엇인지 확실하지 않습니다. 주로 add
입니다.조립품 코드 출력 - 추가 사항과 혼동?
어셈블리 코드 :
addi $8, $0, 0 # $8 = $0 + 0 = 0 + 0 = 0
addi $9, $0, 8 # $9 = $0 + 8 = 0 + 8 = 8
L1:
add $4, $0, $8 # $4 = $0 + $8 = $8
addi $2, $0, 1 # $2 = $0 + 1 = 0 + 1 = 1
addi $8, $8, 1 # $8 = $8 + 1
syscall # show the number in $4
bne $8, $9, L1 # if $8 ≠ $9 go to L1 (line 3)
나는 그것을 보는 방법, 위의 코드를 출력합니다 나는 총회에 새로운 해요 이후 0-7
,하지만, 나는에 코드를 변환하는 생각 번호 C + +를 알아낼 수 있습니다,하지만 난 add $4, $0, $8
로 $4 = &$8
을 번역하는 경향이 때문에 C++에서 나는 1-8
을 얻었다.
C++ 코드 :
#include <iostream>
using namespace std;
int main() {
int $0 = 0, $2, $8, $9, *$4;
$8 = $0 + 0; // $8 = 0
$9 = $0 + 8; // $9 = 8
do {
$4 = &$8;
$2 = $0 + 1;
$8 = $8 + 1;
cout << *$4 << endl;
}
while ($8 != $9);
return 0;
}
질문 :인가 국회 add $4, $0, $8
가 $4
포인터 것으로 생각 될 수 $8
또는 $8
가에서 무엇 단순히 동일 시간. (이 혼란은 add
) 옆의 주석으로 작성되었습니다.
은 C++는 MIPS의 ASM 프로토 타입에 대한 의사 코드로 _valid_ 동안, 변경을 고려 (예를 들어)'[마찬가지로 다른 사람] r0''에 $ 0', 다른 이유가있는 경우하면 더 깨끗하게 컴파일하고합니다 조용한 청산. 그러나 IIRC, 어쨌든 심볼에서'$'를 허용하는 컴파일 옵션이있을 수 있습니다. –
팁 @CraigEstey에 감사드립니다 : –