0

我正在尝试将 C 代码转换为 Y86 汇编代码。

如果您有多个数组声明,例如:

int a[100], b[100];

假设每个整数是 4 个字节。你怎么知道在内存中指向 pos 的位置。指令,这样你就不会浪费任何空间?

<Assembly code begins here>

...

halt

# Array initialization begins here
.pos ?
A:
.long 0

.pos ?   
B:
.long 0
4

1 回答 1

1

让汇编器担心偏移量。
一种可能性是定义一个包含局部变量的结构

struc Locals
    a dd ? dup 100
    b dd ? dup 100
ends Locals

sub esp, sizeof Locals ;; or perhaps sizeof struc Locals
mov ebp, esp           ;; take a copy of stack ptr

mov eax, [ebp + offset a] ;;  
mov ebx, [ebp + offset b] ;;  

在 gcc 中,'struct' 的含义是修改当前段的绝对位置,而不引入可链接代码:

.file "temp.c"
    .struct 0
a:  .struct a + 4*100
b:  .struct b + 4*100
c:               ;; c will contain expression for the size
    .struct 0    ;; you can start a new struct here
a2: .struct a2 + 4   ;; this struct would be  'int a2;'
b2: .struct b2 + 8   ;;  'double b2'
c2:                  ;; sizeof struct #2

.text  
    sub c, %rsp
    mov $13, a(%rsp)   ;; a[0] = 13
    mov $2,  b(%rsp)   ;; b[0] = 2
于 2013-04-15T07:09:11.223 回答