将AT& T语法程序转换为intel语法

时间:2015-12-02 09:13:35

标签: assembly intel att

原始代码产生以下输出:处理器供应商ID为'GenuineIntel' 下面是原始代码:

1.         .section .data
2.   output:
3.         .ascii “The processor Vendor ID is ‘xxxxxxxxxxxx’\n”
4.         .section .text
5.         .globl _start
6.   _start:
7.         movl $0, %eax
8.         cpuid
9.         movl $output, %edi
11.        movl %ebx, 28(%edi)
12.        movl %edx, 32(%edi)
13.        movl %ecx, 36(%edi)
14         movl $4, %eax
15.        movl $1, %ebx
16.        movl $output, %ecx
17.        movl $42, %edx
18.        int $0x80
19.        movl $1, %eax
20.        movl $0, %ebx
21.        int $0x80

我转换为intel会执行,但在代码汇编后屏幕上不显示任何输出:

1.        .intel_syntax noprefix
2.         .section        .data
3.    output:
4.         .ascii "The processor Vendor ID is 'xxxxxxxxxxxx'\n"
5.         .section   .text
6.         .globl _start
7.    _start:
8.          mov     eax, 0
9.          cpuid
10.         mov     edi, OFFSET output
11.         mov     [edi+28], ebx
12.         mov     [edi+32], edx
13.         mov     [edi+36], ecx
14.         mov     eax, 4
15.         mov     ebx, 1
16.         mov     ecx, output
17.         mov     edx, 42
18.         int     0x80
19.         mov     eax, 1
20.         mov     ebx, 0
21.         int     0x80

1 个答案:

答案 0 :(得分:0)

如果您的代码中没有注释,则可以通过汇编,然后使用其他语法进行反汇编来开始。

如果有的话,可能会或可能不会更容易/更不容易出错,然后移动评论。执行此操作可能不方便保留全局符号名称,但某些反汇编程序可以使用符号表。

即使您决定手动执行,也可以通过组装AT& T和NASM版本来了解您是否犯了任何错误。如果这些二进制文件反汇编到相同的代码,那么你就是好的。如果没有,你应该迅速找到他们不同的地方。