Tag: mips

使用三元运算符将C转换为MIPS

在我的class上,我们正在将C翻译成MIPS。 我们被要求翻译这个片段: A = A ? B : C[0] A = A ? B : C[0] 我相信我理解三元运算符,但这里需要什么? 不应该是一个布尔值吗? 那么它会在MIPS中用1或0值表示吗? 谢谢

如何在MIPS汇编中初始化一个巨大的数组?

例如,我正在尝试将C代码转换为等效的MIPS: int a[50]; int i; … a[0] = 1; a[1] = 1; … 看看其中一个答案 ,除此之外别无他法吗?: .data array: .word 1,1,…,0 (till the 50th zero)

C中的__do_global_dtors_aux

我正在为MIPS嵌入式系统编译C程序。 GCC一直坚持像__do_global_dtors_aux,frame_dummy,__ do_global_ctors_aux这样的东西。 我怎么能避免这种情况? 已解决:我只是通过将-nostdlib传递给gcc来“修复”它。 愚蠢我忘记了

这个C程序的MIPS程序集转换如何?

我有一个关于Comp Sci类的简单问题,我正在将我的任务转换为MIPS汇编语言。 我相信我有一个正确的答案,但我想validation它。 这是C函数 int strlen(char *s) { int len; len=0; while(*s != ‘\0’) { len++; s++; } return len; } 谢谢! strlen: add $v0, $zero, $zero loop: lbu $t0, 0($a0) addi $a0, $a0, 1 addi $v0, $v0, 1 bne $t0, $zero, loop s_end: addi $v0, $v0, -1 j $ra

如何安装gcc交叉编译器

我试图在linux下安装交叉编译器时遇到困难。 我下载了一个似乎没问题的工具链,但下一步是什么? 我需要在控制台中输入哪些订单才能安装? 目的是将C代码转换为MIPS(小端)代码。 实际上我只需要一次只需2个代码,所以如果有人只能用MIPS向我展示这些代码,我会非常高兴… 第一个代码: #include #include #include #define SIZE 128 int main () { char mychar , string [SIZE]; int i; int count =0 ; printf (“Please enter your string: \n\n”); fgets (string, SIZE, stdin); printf (“Please enter char to find: “); mychar = getchar(); for (i=0 ; string[i] != ‘\0’ ; i++ […]

编写MIPS机器指令并从C执行它们

我正在尝试用C和MIPS编写一些自修改代码。 由于我想稍后修改代码,我正在尝试编写实际的机器指令(而不是内联汇编)并尝试执行这些指令。 有人告诉我,有可能只是malloc一些内存,在那里写指令,指向它的C函数指针,然后跳转到它。 (我在下面举例说明) 我已经尝试使用我的交叉编译器(sourcery codebench工具链)并且它不起作用(是的,在后面的视线中我认为它确实看起来很幼稚)。 我怎么能正确地做到这一点? #include #include #include void inc(){ int i = 41; uint32_t *addone = malloc(sizeof(*addone) * 2); //we malloc space for our asm function *(addone) = 0x20820001; // this is addi $v0 $a0 1, which adds one to our arg (gcc calling con) *(addone + 1) = 0x23e00000; //this is […]

在C到MIPS程序集中编译代码

我写了一个C程序,我需要在MIPS汇编代码中看到它。 如何安装或运行将* .c文件作为* .txt或* .something_else以查看其MIPS汇编代码的软件? 我的操作系统是Linux。 非常感谢 !! BTW我的代码是: #include #include #include #define SIZE 128 int main () { char mychar , string [SIZE]; int i; int count =0 ; printf (“Please enter your string: \n\n”); fgets (string, SIZE, stdin); printf (“Please enter char to find: “); mychar = getchar(); for (i=0 ; string[i] != […]

循环通过arraysMIPS汇编

我正在研究一个循环通过10个数字的数组的程序。 前9个元素的值大于0,第10个元素的值为0.当遇到0时,循环应该中断。 i=0; while(A[i]!=0) { A[i]=A[i]+1; i++; } 我知道如果寄存器的值等于0,我可以使用’beq’来打破循环。但是我不太了解操作内存中的值。 这是我第一次使用MIPS,你会发现它很乱。 如果你不能帮我解决,你能给我一些指示吗? .data #by default, the “data segment” starts at address 0x10010000 .word 1 .word 2 .word 3 .word 4 .word 5 .word 6 .word 7 .word 8 .word 9 .word 0 .text #instructions start below # MIPS assembly code lui $a0, 0x1001 # $a0 = […]

MARS MIPS和struct节点

typedef struct node { int data; struct node *next; } nodeL; 假设我想用MIPS汇编语言翻译上述声明,我该怎么做呢? 除了在.text段中分配内存(使用系统调用9)之外, .data段怎么样? 对齐怎么样?

C / C ++链接器CALL16在xxxxx处重定位而不是全局符号

我在链接时遇到这些错误,这两个消息都与同一个目标文件有关。 CALL16 reloc at 0x5f8 not against global symbol 和 could not read symbols: Bad value 第二条消息似乎是我收到CALL16错误的原因,但文件编译得很好。 有关修复此问题的提示吗? 仅供参考,我正在为MIPS目标进行交叉编译并使用gcc 4.1.2 编辑:到目前为止没有运气: 以下是我使用的标志:-fPIC,-Wl,-rpath,-Wl,-O1 我也试过以下没有成功: -mno-显式relocs -mexplicit-relocs -mlong通话 -mno长通话 -mxgot -mno-xgot 与此同时,我将在此时回到源头并进行更多调查。