有人可以解释是否可以将此代码片段转换为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的代码吗?
答案 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代码生成器(一次大量使用)。