汇编代码的输出 - 与添加混淆?
Output of Assembly code - Confusion with add?
我刚开始学习汇编,在一个练习中我必须找到以下代码的输出,但由于我是新手,我不确定它是什么,这主要是因为 add
.
汇编代码:
addi , [=10=], 0 # = [=10=] + 0 = 0 + 0 = 0
addi , [=10=], 8 # = [=10=] + 8 = 0 + 8 = 8
L1:
add , [=10=], # = [=10=] + =
addi , [=10=], 1 # = [=10=] + 1 = 0 + 1 = 1
addi , , 1 # = + 1
syscall # show the number in
bne , , L1 # if ≠ go to L1 (line 3)
按照我的看法,上面的代码应该输出数字0-7
,但是由于我是汇编新手,所以我想到了翻译代码到 C++ 来弄清楚,但在 C++ 中我得到 1-8
,因为我倾向于将 add , [=15=],
翻译为 = &
.
C++代码:
#include <iostream>
using namespace std;
int main() {
int [=11=] = 0, , , , *;
= [=11=] + 0; // = 0
= [=11=] + 8; // = 8
do {
= &;
= [=11=] + 1;
= + 1;
cout << * << endl;
}
while ( != );
return 0;
}
问题: Assembly 的 add , [=15=],
是否被认为是
是指向
的指针,或者简单地等于当时
的指针。 (混乱是由 add
旁边的评论造成的).
您正在将 $4 的值设置为 $8 的值,无论执行该指令时它是什么。您的代码表示,由于您将 $8 的值添加到 $0,这与将 $8 的值加载到 $4 是一样的。
请注意,您可以使用 move
来完成同样的事情。
如 Zach 所述,您的 C++ 代码将 $4 设置为 $8 地址的值,但程序集将 $4 的值设置为 $8。因此正确的 C++ 代码如下。打印出来的留作练习!
此外,$2 只是为系统调用设置的,因此我们的 C++ 代码中不需要它:我已将其删除以消除 "unused variable" 警告。
#include <iostream>
using namespace std;
int main() {
int [=10=] = 0, , , ;
= [=10=] + 0; // = 0
= [=10=] + 8; // = 8
do {
= ;
= + 1;
cout << << endl;
}
while ( != );
return 0;
}
我刚开始学习汇编,在一个练习中我必须找到以下代码的输出,但由于我是新手,我不确定它是什么,这主要是因为 add
.
汇编代码:
addi , [=10=], 0 # = [=10=] + 0 = 0 + 0 = 0
addi , [=10=], 8 # = [=10=] + 8 = 0 + 8 = 8
L1:
add , [=10=], # = [=10=] + =
addi , [=10=], 1 # = [=10=] + 1 = 0 + 1 = 1
addi , , 1 # = + 1
syscall # show the number in
bne , , L1 # if ≠ go to L1 (line 3)
按照我的看法,上面的代码应该输出数字0-7
,但是由于我是汇编新手,所以我想到了翻译代码到 C++ 来弄清楚,但在 C++ 中我得到 1-8
,因为我倾向于将 add , [=15=],
翻译为 = &
.
C++代码:
#include <iostream>
using namespace std;
int main() {
int [=11=] = 0, , , , *;
= [=11=] + 0; // = 0
= [=11=] + 8; // = 8
do {
= &;
= [=11=] + 1;
= + 1;
cout << * << endl;
}
while ( != );
return 0;
}
问题: Assembly 的 add , [=15=],
是否被认为是 是指向
的指针,或者简单地等于当时
的指针。 (混乱是由
add
旁边的评论造成的).
您正在将 $4 的值设置为 $8 的值,无论执行该指令时它是什么。您的代码表示,由于您将 $8 的值添加到 $0,这与将 $8 的值加载到 $4 是一样的。
请注意,您可以使用 move
来完成同样的事情。
如 Zach 所述,您的 C++ 代码将 $4 设置为 $8 地址的值,但程序集将 $4 的值设置为 $8。因此正确的 C++ 代码如下。打印出来的留作练习!
此外,$2 只是为系统调用设置的,因此我们的 C++ 代码中不需要它:我已将其删除以消除 "unused variable" 警告。
#include <iostream>
using namespace std;
int main() {
int [=10=] = 0, , , ;
= [=10=] + 0; // = 0
= [=10=] + 8; // = 8
do {
= ;
= + 1;
cout << << endl;
}
while ( != );
return 0;
}