试图将& t转换为nasm

时间:2012-11-01 23:21:32

标签: assembly syntax x86 nasm

我是at&t语法的新手。我使用gcc -S test.c编译了一个test.c文件。

test.s中的部分文件:

 1. .file "test.c"
 2. .local temp
 3. .comm temp,8,4
 4. ...
 5. funtion1:
 6. blah
 7. blah
 8. blah
 9. movl $temp, -8(%ebp)

我知道-8(%ebp)是一个本地变量,但不确定$temp是什么意思

如何在nasm中完成?

我在.bss部分有一个全局临时文件

我能说:

  1. mov eax, [ebp-8]; eax是否包含[ebp-8]的内存地址?
  2. mov ebx, temp; ebx是否包含temp的地址?
  3. mov [eax], ebx;这是否意味着使局部变量指向temp,或者它是否在局部变量中复制了temp?

2 个答案:

答案 0 :(得分:1)

movl $temp, -8(%ebp)temp的地址写入ebp-8的本地变量 这可以在nasm中以mov dword [ebp-8], temp

完成

回答您的其他问题:

  1. 不,eax包含[ebp-8]处的局部变量的值。要加载地址,您可以使用lea eax, [ebp-8]
  2. 使局部变量成为temp的指针,如果eax保存局部变量的地址(参见第1点)。

答案 1 :(得分:0)

要转换为普通的x86语法: 1.从寄存器前面删除%:movl $ LC0,(%esp)=> movl $ LC0,(esp) 2.从常量前面删除$:movl $ LC0,(esp)=> movl LC0,(esp) 3.将()更改为[]:movl LC0,(esp)=> movl LC0,[esp] 4.颠倒操作数的顺序:movl LC0,[esp] => movl [esp],LC0 5.将指令大小后缀转换为前缀:mov [esp],dword LC0。

我在这里找到答案: http://www.cplusplus.com/forum/lounge/88169/