0

私が取り組んでいるプロジェクトの OR1K アセンブリを学んでいます。コンパイラのフロントエンドとバックエンドを提供するために使用されますclangこのリンクLLVMを見つけましたが、必要なものはほとんどすべて揃っていますが、見ているアセンブリにはシンボルが含まれています。私はこれらの「指示」が行うことを直感的に理解していますが、それらが何を意味するのかについて公式の説明を得たほうがよいでしょう.@hi@lo

以下は、C とそのために生成された対応するアセンブリ コードです。私が話している組立ラインは、ほとんど底にあります。ここに彼らがどのように見えるかがあります

l.sw    0(r1), r11
l.movhi r3, hi(.L.str@hi)
l.jal   printf
l.ori   r3, r3, lo(.L.str@lo)

Cコード

#include <stdio.h>
#include <assert.h>

int sum(int a, int b) {
  return a + b;
}

int main(int argc, char** argv) {
  printf("Hello World! %d\n", sum(argc, 1));
  return 0;
}

アセンブリ コード

    .text
    .file   "hello_world.ll"
    .globl  _Z3sumii
    .align  4
    .type   _Z3sumii,@function
_Z3sumii:                               # @_Z3sumii
    .cfi_startproc
# BB#0:                                 # %entry
    l.sw    -4(r1), r2
.Ltmp0:
    .cfi_offset 2, -4
    l.addi  r2, r1, 0
.Ltmp1:
    .cfi_def_cfa_register 2
    l.addi  r1, r1, -12
    l.sw    -8(r2), r3
    l.sw    -12(r2), r4
    l.lwz   r3, -8(r2)
    l.add   r11, r3, r4
    l.addi  r1, r2, 0
    l.jr    r9
    l.lwz   r2, -4(r1)
.Ltmp2:
    .size   _Z3sumii, .Ltmp2-_Z3sumii
    .cfi_endproc

    .globl  main
    .align  4
    .type   main,@function
main:                                   # @main
    .cfi_startproc
# BB#0:                                 # %entry
    l.sw    -4(r1), r9
.Ltmp3:
    .cfi_offset 9, -4
    l.sw    -8(r1), r2
.Ltmp4:
    .cfi_offset 2, -8
    l.addi  r2, r1, 0
.Ltmp5:
    .cfi_def_cfa_register 2
    l.addi  r13, r1, -32
    l.srli  r13, r13, 3
    l.slli  r1, r13, 3
    l.movhi r5, 0
    l.sw    20(r1), r5
    l.sw    16(r1), r3
    l.sw    8(r1), r4
    l.lwz   r3, 16(r1)
    l.jal   _Z3sumii
    l.addi  r4, r0, 1
    l.sw    0(r1), r11
    l.movhi r3, hi(.L.str@hi)
    l.jal   printf
    l.ori   r3, r3, lo(.L.str@lo)
    l.movhi r11, 0
    l.addi  r1, r2, 0
    l.lwz   r9, -4(r1)
    l.jr    r9
    l.lwz   r2, -8(r1)
.Ltmp6:
    .size   main, .Ltmp6-main
    .cfi_endproc

    .type   .L.str,@object          # @.str
    .section    .rodata.str1.1,"aMS",@progbits,1
.L.str:
    .asciz  "Hello World! %d\n"
    .size   .L.str, 17

どんな助けでも大歓迎です。

4

1 に答える 1