最近我一直在玩弄一点与牵牛星8800模拟器,了解计算机的基础知识,我想知道怎样的处理器“知道”如果一个字节指令或数据?牛郎星8800的数据和指令
回答
处理器不知道一个字节是否是一条指令。它只是执行程序计数器指向的任何代码。
如果程序计数器落在数据区(由于编程错误,堆栈损坏或其他原因),CPU会尝试解释指令,直到它在某个无效的操作码上绊倒,在这种情况下,它会调用特殊的“非法指令“(或其他)处理程序,并且程序崩溃/操作系统重新启动/定义了哪些行为以从错误中恢复。
编辑:罗斯mentionned的牛郎星并没有真正有非法指令,“方案”将在不休运行混乱,读,任意位置写入,直到有人拉插头。
在另一方面,可以装载一个地址寄存器用含有代码的区域,并且CPU将只能看到数据。
也就是说,这是拆解/逆向工程的难题之一,以寻找原始程序员组装为代码的区域以及仅仅定义数据的区域,例如错误消息,图形...... 它们是有时非常接近/缠绕,特别是使用组装时。
跳表,动态计算的入口点,在即时解密,自修改代码可以使任务更加努力,甚至有一个良好的反汇编像IDAPro。您经常需要帮助反汇编人员根据数据看起来很像代码(可识别的操作码,例如:对于68k:0x4E75
表示RTS,不可能是数据)或者代码看起来很像数据,因为它不加起来(非相干的,无关的汇编代码行)
非常好,但仍然...“*实际*代码和*实际*数据..”使John von Neumann像硬盘一样在他的坟墓中旋转。 ([相关解决方案](http://stackoverflow.com/a/26826328/2564301)) – usr2564301
:)好的,我编辑过那部分。现在好多了 ? –
对不起 - 我已经提出了一些建议,并且花费了一些时间:P答案核心关键的关键在于,你甚至可以编译一些汇编代码(使其成为二进制代码),或者,如果你愿意,“真正的”代码)并且*仍将其打印为错误字符串*。一个CPU不知道也不在意。 – usr2564301
处理器看到什么作为指令是在由程序计数器给出的地址的字节。根据指令,后续字节可以是当前指令的下一条指令或数据(“立即指令”)。在这种情况下,程序计数器会增加以跳过数据。
有些指令使用的寄存器(HL或DE在8080的情况下)的内容,以确定所述存储器的访问。处理器将数据视为数据。
我不确定这是问题的精神,但你在这里有一个要点。 –
- 1. 数据指令中的MIPS指令
- 2. 指南二郎
- 3. 加快二郎指数函数
- 4. 二郎数据结构
- 5. 二郎MySQL源码命令
- 6. 奶牛和公牛游戏
- 7. AngularJS使用儿童作为指令数据的指令
- 8. 观看流星收集器/指令
- 9. 二郎和PostgreSQL
- 10. 奶牛和公牛的方法
- 11. JavaScript中的公牛和奶牛
- 12. 的Java郎空指针异常,的onCreate
- 13. 如何根据纬度和郎
- 14. 存储指令中的数据对齐
- 15. Angular指令中的数据混乱
- 16. VueJS更新指令中的$ data数据
- 17. 二郎:指定的模块找不到
- 18. 获得的Java郎空指针异常
- 19. 角2 HTML指令和属性指令
- 20. 星火的Sql数据集获得指数
- 21. 在父指令和子指令之间传递参数
- 22. 指令引用和数据引用之间的区别
- 23. 将数据传递给AngularJS中带有$ broadcast和Service的指令
- 24. Angularjs控制器,指令和服务之间的数据绑定
- 25. 指令中模板和控制器之间的数据绑定
- 26. 二郎,io_lib和Unicode
- 27. 星期数和星期几
- 28. 二郎,SSH和authorized_keys的
- 29. 注释/元数据中镖郎
- 30. 整数不相容乔达和Java郎
它不知道。 –
这就是为什么我用'知道'而不知道 –
那么你的问题是什么? –