Altair 8800数据和说明

时间:2016-09-20 19:27:05

标签: assembly binary intel-8080

最近我一直在玩Altair 8800仿真器,以了解计算的基础知识,我想知道处理器如何知道"如果一个字节是一个指令或数据?

2 个答案:

答案 0 :(得分:6)

处理器不知道字节是否是指令。它只执行程序计数器指向的任何代码。

如果程序计数器落在数据区中(由于编程错误,堆栈损坏或其他原因),CPU会尝试解释指令,直到它发现某些无效操作码为止,在这种情况下它会调用特殊的“非法指令” “(或其他)处理程序和程序崩溃/操作系统重新启动/定义从错误中恢复的任何行为。

编辑:正如罗斯提到Altair实际上并没有非法指令一样,“程序”会在混乱,随机读取和写入中无休止地运行,直到有人拔掉插头。

另一方面,您可以使用包含代码的区域加载地址寄存器,CPU只能看到数据。

那就是说,反汇编/逆向工程的挑战之一就是找到原始程序员组装成代码的区域和仅仅定义数据的区域,如错误消息,图形...... 它们有时非常接近/缠绕,特别是在使用组装时。

跳转表,动态计算的入口点,动态解密,自修改代码可以使任务更难,即使对于像IDAPro这样的好的反汇编程序也是如此。您经常需要帮助反汇编程序来决定,基于数据看起来很像代码的事实(可识别的操作码,例如:对于68k:0x4E75表示RTS,不太可能是数据),或者代码看起来很像数据,因为它没有加起来(不连贯,无关的asm代码行)

答案 1 :(得分:4)

处理器看到的指令是程序计数器给出的地址处的字节。根据指令,后续字节可以是当前指令的下一条指令或数据("立即指令")。在这种情况下,程序计数器会增加以跳过数据。

某些指令使用寄存器的内容(在8080的情况下为HL或DE)来确定存储器访问。获取的内容被处理器视为数据。