在程序集mips32

时间:2015-06-02 09:04:03

标签: string assembly printing mips

我正在使用迷你编译器,我达到了代码生成级别。 我想将一个字符串动态存储到堆段,所以我写了这个C ++代码(cg是我生成汇编代码的文件):

int length = strlen("abc");
cg << "\tori\t$a0,$0," << (length + 3) * 4 << endl; // reserve space for type + length + null + size
cg << "\tori\t$v0,$0,9" << endl;
cg << "\tsyscall" << endl;
increamentSP();
cg << "\tsw\t$v0,0($sp)" << endl;

cg << "\tori\t$t1,$0,1" << endl; // store the type
cg << "\tsw\t$t1,0($v0)" << endl;

cg << "\tori\t$t1,$0," << length << endl; // store the length
cg << "\tsw\t$t1," << 4 << "($v0)" << endl;

for (int i = 0; i < length; i++)
{
    cg << "\tori\t$t1,$0," << (int)p->val[i] << endl; // store the char
    cg << "\tsw\t$t1," << (2 + i) * 4 << "($v0)" << endl;
}
cg << "\tsw\t$0," << (2 + length) * 4 << "($v0)" << endl;

基本上,我要做的是: 首先,我想存储一个标志(1),指的是这个类型是第一个位置的字符串。 然后,我想将我的字符串的大小存储到第二个位置。 之后,我想将我的字符串字符存储到下一个位置。 最后,我想将一个空终止字符存储到最后一个位置。 我的问题是,当我尝试使用如下代码打印我的字符串时:

la $a0,8($t0)
ori $v0,$0,4
syscall

结果是mips只打印字母&#39; a&#39;,如何打印这样存储的字符串?或者有更好的方法来存储我的字符串? 附:我知道我可以在.data段中使用.asciiz,但问题是在我的代码中我可能会编辑字符串,所以我不知道我的字符串会变成什么。 任何人都可以帮助我吗?

0 个答案:

没有答案