如何在Y86汇编中为多个阵列分配好空间?

时间:2013-04-15 02:20:37

标签: c assembly y86

我正在尝试将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

1 个答案:

答案 0 :(得分: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