装配转换

时间:2010-05-23 05:57:48

标签: assembly

有人可以解释是否可以将此代码片段转换为pdp11程序集?

movq    %rdi, -8(%rbp)
    movl    %esi, -12(%rbp)
    movl    %edx, -16(%rbp)
    movl    -16(%rbp), %eax
    cltq
    leaq    0(,%rax,4), %rdi
    movq    -8(%rbp), %r8
    movl    -12(%rbp), %eax
    cltq
    leaq    0(,%rax,4), %rcx
    movq    -8(%rbp), %rsi
    movl    -16(%rbp), %eax
    cltq
    leaq    0(,%rax,4), %rdx
    movq    -8(%rbp), %rax
    movl    (%rdx,%rax), %eax
    addl    (%rcx,%rsi), %eax
    movl    %eax, (%rdi,%r8)
    movl    -12(%rbp), %eax
    cltq
    leaq    0(,%rax,4), %rdi
    movq    -8(%rbp), %r8
    movl    -16(%rbp), %eax
    cltq
    leaq    0(,%rax,4), %rcx
    movq    -8(%rbp), %rsi
    movl    -12(%rbp), %eax
    cltq
    leaq    0(,%rax,4), %rdx
    movq    -8(%rbp), %rax
    movl    (%rdx,%rax), %edx
    movl    (%rcx,%rsi), %eax
    subl    %edx, %eax
    movl    %eax, (%rdi,%r8)
    movl    -16(%rbp), %eax
    cltq
    leaq    0(,%rax,4), %rdi
    movq    -8(%rbp), %r8
    movl    -16(%rbp), %eax
    cltq
    leaq    0(,%rax,4), %rcx
    movq    -8(%rbp), %rsi
    movl    -12(%rbp), %eax
    cltq
    leaq    0(,%rax,4), %rdx
    movq    -8(%rbp), %rax
    movl    (%rdx,%rax), %edx
    movl    (%rcx,%rsi), %eax
    subl    %edx, %eax
    movl    %eax, (%rdi,%r8)
    leave
    ret

它只是我拥有的所有代码的一小部分...... 我也有相同程序的C代码,我发现使用gcc -S标志,我可以得到汇编代码,但我可以将它转换为pdp11的代码吗?

2 个答案:

答案 0 :(得分:4)

如果我找对你,你只想运行一个C程序。如果这是正确的,你可以在这里看到GCC 4.3支持PDP-11。

http://en.wikipedia.org/wiki/GNU_Compiler_Collection#Architectures

获取GCC 4.3源代码,了解如何构建交叉编译器并解决您的问题。

无需将amd64程序集转换为PDP-11

答案 1 :(得分:1)

鉴于PDP-11是一个16位处理器,你最好通过一个编译器运行你的C,这个编译器将生成16位代码而不是你发布的64位代码。从C源代码转换为汇编(手动)可能比从64位Intel汇编到PDP-11汇编更容易。

您可能还想查看Dennis Ritchie的primeval C compilers页面。我记得,他有一个链接到那些已经有一两个旧编译器在现代C中编译和运行的人。它的目标是PDP-11(虽然它接受的来源不是现代C)。您还可以查看在定位PDP-11 with lcc时所做的工作。我相信这是一个完整的,有效的实施方案。虽然我不知道是否有人最近在pcc档案中的某个地方测试了它,但应该仍然有一个古老的PDP-11代码生成器(一次大量使用)。