assembly - 大多数代码行中的树莓派“错误:错误指令”上的程序集
问题描述
所以,我在大学学习汇编,我们在那里使用 Fedora。我们在那里编译程序没有任何麻烦。我有一个树莓派,我正在用我们以前做过的一些程序来尝试它,没什么特别的。但是我遇到了一些我以前从未见过的错误,并且搜索了整个互联网,但似乎无法弄清楚。这也不是 64 x 32 位的问题。我已经尝试像在课堂上那样使用 gcc -o lab6 lab6.s 但得到了同样的错误。
编码:
/*
int nums[] = {10, -21, -30, 45};
int main() {
int i, *p;
for (i = 0, p = nums; i != 4; i++, p++)
printf("%d\n", *p);
return 0;
}
*/
.data
nums: .int 10, -21, -30, 45
Sf: .string "%d\n" ; string de formato para printf
.text
.globl main
main:
/********************************************************/
/* mantenha este trecho aqui e nao mexa - prologo !!! */
pushq %rbp
movq %rsp, %rbp
subq $16, %rsp
movq %rbx, -8(%rbp)
movq %r12, -16(%rbp)
/********************************************************/
movl $0, %ebx /* ebx = 0; */
movq $nums, %r12 /* r12 = &nums */
L1:
cmpl $4, %ebx /* if (ebx == 4) ? */
je L2 /* goto L2 */
movl (%r12), %eax /* eax = *r12 */
/*************************************************************/
/* este trecho imprime o valor de %eax (estraga %eax) */
movq $Sf, %rdi /* primeiro parametro (ponteiro)*/
movl %eax, %esi /* segundo parametro (inteiro) */
call printf /* chama a funcao da biblioteca */
/*************************************************************/
addl $1, %ebx /* ebx += 1; */
addq $4, %r12 /* r12 += 4; */
jmp L1 /* goto L1; */
L2:
/***************************************************************/
/* mantenha este trecho aqui e nao mexa - finalizacao!!!! */
movq $0, %rax /* rax = 0 (valor de retorno) */
movq -8(%rbp), %rbx
movq -16(%rbp), %r12
leave
ret
/***************************************************************/
错误消息:pi@raspberrypi:~/Documents/inf1018_LUIZA $ as -o lab6.o lab6.s lab6.s:汇编程序消息:lab6.s:13:错误:错误指令string de formato para printf'
lab6.s:21: Error: bad instruction
pushq %rbp' lab6.s:22:错误: 错误指令movq %rsp,%rbp'
lab6.s:23: Error: bad instruction
subq $16,%rsp' lab6.s:24: 错误: 错误指令movq %rbx,-8(%rbp)'
lab6.s:25: Error: bad instruction
movq %r12,-16(%rbp)' lab6.s:28: 错误: 错误指令movl $0,%ebx'
lab6.s:29: Error: bad instruction
movq $nums,%r12' lab6.s :32: 错误: 错误指令cmpl $4,%ebx'
lab6.s:33: Error: bad instruction
je L2' lab6.s:35: 错误: 错误指令movl (%r12),%eax'
lab6.s:39: Error: bad instruction
movq $Sf,%rdi' lab6.s:40: 错误: 错误指令movl %eax,%esi'
lab6.s:41: Error: bad instruction
调用 printf' lab6.s:44: 错误: 错误指令addl $1,%ebx'
lab6.s:45: Error: bad instruction
addq $4,%r12' lab6.s:46: Error: bad instruction jmp L1'
lab6.s:51: Error: bad instruction
movq $0,%rax' lab6.s:52: Error: bad instruction movq -8(%rbp),%rbx'
lab6.s:53: Error: bad instruction
movq -16(%rbp),%r12' lab6.s:54: Error : 错误指令leave'
lab6.s:55: Error: bad instruction
ret '
解决方案
推荐阅读
- go - 为什么我的追加函数将切片的每个成员都更改为要添加的新项目?
- python - PyWin32 能否让用户“过多”地访问 Win32 API?
- javascript - 在 for 循环中声明变量
- python - tf.estimator - 如何在每个时期后打印测试集的准确性?
- c# - 如何在 C# 中的一行中填充现有数组?
- java - 无效的方法声明 - 需要返回类型
- prolog - 为什么在尝试从列表中删除双打时出现存在错误?
- r - R studio 直方图错误:stat_bin() 不得与任何美学一起使用
- r - 如何将抖动的绘图点保持在 facet_grid 的边界上
- powershell - 带有文件参数的 Windows 静默安装