2014-11-25 95 views
0

我把一個簡單的c程序翻譯成IA32,然後將它轉譯成Y86,但是我收到一個錯誤,我不明白或知道如何調試,因爲我只是學習Y86。錯誤是:Y86停止1步異常HLT

Stopped in 1 steps at PC = 0x1. Exception 'HLT', CC Z=1 S=0 O=0 
Changes to registers: 

Changes to memory: 

的程序是應該初始化i到0,然後通過繼續進行循環,直到i大於或等於5,並且每個時間增量I。在for循環中,我將j設置爲等於i * 2,k等於j + 1。我Y86代碼如下:

main: 
    irmovl $0, %ebx 
    jmp L2 
    halt 
L3: 
    rrmovl %ebx, %eax 
    addl %eax, %eax 
    rrmovl %eax, %ecx 
    rrmovl %ecx, %eax 
    irmovl $1, %esi 
    addl %esi, %eax 
    rrmovl %eax, %edx 
    addl %esi, %ebx 
L2: 
    irmovl $4, %edi 
    subl %edi, %ebx 
    jle L3 

我可以提供C代碼和IA32代碼,我從音譯如果它會幫你回答我的問題,我真的需要一些幫助的感謝。

+0

輸出看起來很奇怪,但我猜你的代碼只是在最後一行的'jle'之後掉進未初始化的內存......你不是在那裏丟失什麼嗎? – Jester 2014-11-25 01:57:46

+0

在主程序結束時停止應該停止程序,但這兩種方法都無關緊要,因爲它只執行第一行 – user3369628 2014-11-25 02:21:22

回答

0

您忘了在源文件中添加額外的NL(CR)。 YAS有缺陷。當它彙編時,如果源(ys)文件末尾沒有NL(CR),則覆蓋創建的目標代碼(yo)文件的開頭。

結果......好壞。在你的情況下,YAS可能在目標文件的第一個字符中插入了HLT指令。