首页 > 解决方案 > 大多数代码行中的树莓派“错误:错误指令”上的程序集

问题描述

所以,我在大学学习汇编,我们在那里使用 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 instructionpushq %rbp' lab6.s:22:错误: 错误指令movq %rsp,%rbp' lab6.s:23: Error: bad instructionsubq $16,%rsp' lab6.s:24: 错误: 错误指令movq %rbx,-8(%rbp)' lab6.s:25: Error: bad instructionmovq %r12,-16(%rbp)' lab6.s:28: 错误: 错误指令movl $0,%ebx' lab6.s:29: Error: bad instructionmovq $nums,%r12' lab6.s :32: 错误: 错误指令cmpl $4,%ebx' lab6.s:33: Error: bad instructionje L2' lab6.s:35: 错误: 错误指令movl (%r12),%eax' lab6.s:39: Error: bad instructionmovq $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 instructionaddq $4,%r12' lab6.s:46: Error: bad instruction jmp L1' lab6.s:51: Error: bad instructionmovq $0,%rax' lab6.s:52: Error: bad instruction movq -8(%rbp),%rbx' lab6.s:53: Error: bad instructionmovq -16(%rbp),%r12' lab6.s:54: Error : 错误指令leave' lab6.s:55: Error: bad instructionret '

标签: assemblyraspberry-piraspberry-pi3raspbianraspberry-pi2

解决方案


推荐阅读