2010-05-23 39 views
1

有人可以請解釋是否有可能將這段代碼轉換爲程序集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

你有PDP11嗎? – 2010-05-23 06:00:29

+0

不,我只有模擬器,有可能嗎? – lego69 2010-05-23 06:04:28

+2

我相信這是可能的 - 我無法想象爲什麼你想 – 2010-05-23 06:19:42

回答

4

如果我找對了你只是想運行一個C程序。如果這是正確的,你可以在這裏看到GCC 4.3支持PDP-11。

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

獲取GCC 4.3的來源,學習如何建立一個交叉編譯器,你的問題就解決了。

無需AMD64裝配轉換爲PDP-11

+0

你能解釋一下關於交叉編譯器的問題,我不確定我是否理解它 – lego69 2010-05-23 06:35:19

+0

@ lego69交叉編譯器是一種編譯器,它運行在與編譯代碼不同的體系結構上。如果您搜索構建交叉編譯器的gcc,您將獲得所需的全部內容。在unix中,你可以執行./configure --target = pdp11或者GCC源代碼目錄中的某種東西,然後make。如果你想要一個二進制代碼而不僅僅是彙編輸出,你還需要一個GNU的'binutils'交叉*版本。如果你在Windows中可能會更困難,我建議將cygwin作爲最簡單的出路,因爲你可以使用在網上找到的相同命令。 – jbcreix 2010-05-23 07:32:17

1

鑑於PDP-11是一款16位處理器,你會好得多通過,將產生16位編譯器上運行你的C代碼而不是您發佈的64位代碼。手動將C源代碼轉換爲彙編可能比從64位英特爾彙編到PDP-11彙編更容易。

你可能也想看看Dennis Ritchie的primeval C compilers頁面。我記得,他有一個鏈接給那些得到一兩個舊編譯器來編譯和運行在現代C中的人。它的目標是PDP-11(雖然它接受的來源不是現代C)。您也可以查看已針對PDP-11 with lcc進行的工作。我相信這是一個完整的工作實施。儘管我不知道最近是否有人測試過它,但在pcc檔案中的某處,應該還是有一個古老的PDP-11代碼生成器(一次大量使用)。

+0

@Jerroy Coffin:不好意思,但是gcc呢,它會更容易?或不? – lego69 2010-05-23 06:50:12

+0

@ lego69:也許吧。在你嘗試之前,可能沒有其他答案(不同的人更容易找到不同的東西)。 – 2010-05-23 06:55:16

+0

@Jerroy Coffin:我可以做一些像這樣的gcc -pdp-11 -S foo.c嗎? – lego69 2010-05-23 07:03:06