0

我将一个简单的 c 程序翻译成 IA32,然后将其音译成 Y86,但由于我刚刚学习 Y86,所以我收到一个我不理解或不知道如何调试的错误。错误是:

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

Changes to memory:

该程序应该将 i 初始化为 0,然后继续执行 for 循环,直到 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 代码,如果它可以帮助您回答我的问题,我真的需要一些帮助,谢谢。

4

1 回答 1

0

您忘记在源文件中添加额外的 NL (CR)。YAS 有缺陷。如果在源 (ys) 文件的末尾没有 NL (CR),它在组装时将程序集包装起来,覆盖创建的目标代码 (yo) 文件的开头。

结果……嗯,很糟糕。在您的情况下,YAS 可能在目标文件的第一个字符中插入了 HLT 指令。

于 2015-11-12T14:52:17.647 回答