Я только начал изучать Собрание и в одном упражнении мне нужно найти выход из следующего кода, но, поскольку я очень новый, я не уверен, что это такое, и это главным образом из-за 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++, чтобы понять это, но в C++ я получил 1-8
, потому что я был склонен переводить add $4, $0, $8
как $4 = &$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++ является _valid_, как псевдо-код для прототипирования ПМО ассемблера, рассмотреть вопрос об изменении (например) '$ 0' в' r0' [также для других], если ни по какой другой причине, чтобы сделать его собрать более чисто и тихий LLs. Тем не менее, IIRC, может быть компилируемый вариант, позволяющий '' 'символам в любом случае –
Спасибо за подсказку @CraigEstey :) –