C:如何模拟8086寄存器?
欧海, 我目前正在尝试实现一个 8086 ASM 调试器以用于学习目的。到目前为止,我尝试用字符数组模拟 8 位和 16 位寄存器,但在使用 AX、AL 和 AH 时,这种方法让我抓狂。
#define setAL() { int i; for (i = 0; i < 8; i++) AL[i] = AX[i]; }
char AX[16] = {0, 1, 1, 1, 1 ,1 ,1, 0, 0, 0, 0, 0, 0, 0, 0, 0};
char AL[8] = {0, 0, 0, 0, 0, 0, 0, 0};
有谁有任何好主意(或诸如“最佳实践”之类的东西)如何模拟这些寄存器?
Ohai,
I'm currently trying to implement an 8086 ASM debugger for learning purposes. Until now, I tried to simulate the 8 and 16 bit registers with char arrays but this approach is driving me nuts, when working with AX, AL and AH.
#define setAL() { int i; for (i = 0; i < 8; i++) AL[i] = AX[i]; }
char AX[16] = {0, 1, 1, 1, 1 ,1 ,1, 0, 0, 0, 0, 0, 0, 0, 0, 0};
char AL[8] = {0, 0, 0, 0, 0, 0, 0, 0};
Does anyone has any good idea (or something like 'best practice') how to simulate those registers?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
我不认为有“最佳实践”方法可以做到这一点,但您可以采取的一种方法可能会少让您发疯,那就是使用联合来覆盖 8 位和 16 位部分:
或者考虑到您明确的目标只是对于 8086,您可以拥有一种包含所有 16 位寄存器的结构和一种包含所有字节部分的结构。例如
I don't think there's a 'best practice' way of doing this, but one approach you could take that may drive you nuts less is to use a union to overlay the 8 and 16 bit portions:
Alternatively given you're explicitly targeting just 8086 you could have one structure containing all the 16 bit registers and one containing all of the byte portions. e.g.
我将结构抽象出来并使用访问器函数。
启用内联后,这种方法的性能不会比使用联合差。
I'd abstract the structure away and use accessor functions.
With inlining enabled, this approach will be no less performant than using a union.
如果它可能对某人有用,我把我写的放在这里。
In case it might be useful for someone, I put the one I wrote here.
为什么不像这样使用
struct
和union
:Why not use
structure
andunion
like this: