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