Можно ли конвертировать данный код C в сборку x86? - PullRequest
0 голосов
/ 22 апреля 2019

Я работаю в полноприводном роботе по преодолению препятствий в сборке x86.Я могу найти какую-то программу, которая уже выполнена на языке C, но не может найти исполняемой в сборке x86.Как преобразовать эти коды C в код сборки x86?Вся часть кодов здесь: http://www.mertarduino.com/arduino-obstacle-avoiding-robot-car-4wd/2018/11/22/

void compareDistance()   // find the longest distance
{
  if (leftDistance>rightDistance) //if left is less obstructed 
  {
    turnLeft();
  }
  else if (rightDistance>leftDistance) //if right is less obstructed
  {
    turnRight();
  }
   else //if they are equally obstructed
  {
    turnAround();
  }
}

int readPing() { // read the ultrasonic sensor distance
  delay(70);   
  unsigned int uS = sonar.ping();
  int cm = uSenter code here/US_ROUNDTRIP_CM;
  return cm;
}

Ответы [ 2 ]

2 голосов
/ 23 апреля 2019

Как преобразовать эти коды C в код сборки x86?

Для этого можно использовать команду gcc -m32 -S main.c, где:

  • флаг -S указывает, что вывод должен быть сборкой,
  • флаг -m32 указывает на то, что вы хотите создать вывод i386 (32-разрядный).
2 голосов
/ 22 апреля 2019

Как преобразовать эти коды C в код сборки x86?

Преобразование исходного кода в сборку - это в основном то, что делает компилятор, поэтому просто скомпилируйте его.Большинство (если не все) компиляторы имеют возможность вывода промежуточного кода сборки.

Если вы используете gcc -S main.c, вы получите файл с именем main.s, содержащий код сборки.

ЗдесьВот пример:

$ cat hello.c
#include <stdio.h>

void print_hello() {
    puts("Hello World!");
}

int main() {
    print_hello();
}

$ gcc -S hello.c 

$ cat hello.s
    .file   "hello.c"
    .text
    .section    .rodata
.LC0:
    .string "Hello World!"
    .text
    .globl  print_hello
    .type   print_hello, @function
print_hello:
.LFB0:
    .cfi_startproc
    pushq   %rbp
    .cfi_def_cfa_offset 16
    .cfi_offset 6, -16
    movq    %rsp, %rbp
    .cfi_def_cfa_register 6
    leaq    .LC0(%rip), %rdi
    call    puts@PLT
    nop
    popq    %rbp
    .cfi_def_cfa 7, 8
    ret
    .cfi_endproc
.LFE0:
    .size   print_hello, .-print_hello
    .globl  main
    .type   main, @function
main:
.LFB1:
    .cfi_startproc
    pushq   %rbp
    .cfi_def_cfa_offset 16
    .cfi_offset 6, -16
    movq    %rsp, %rbp
    .cfi_def_cfa_register 6
    movl    $0, %eax
    call    print_hello
    movl    $0, %eax
    popq    %rbp
    .cfi_def_cfa 7, 8
    ret
    .cfi_endproc
.LFE1:
    .size   main, .-main
    .ident  "GCC: (Debian 8.3.0-6) 8.3.0"
    .section    .note.GNU-stack,"",@progbits
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...