我想问一下如何在 16 位汇编中模拟 C 指针。
int var = 10;
int * ptr = &var;
在汇编中就像
mov dword ptr [ebp-x], 10
lea eax, dword ptr [ebp-x]
mov dword ptr [ebp-x+4], eax
有什么方法可以在 16 汇编中获取 [bp-x]
变量的物理地址。
例如:
我有一个从软盘读取扇区的程序,然后跳转到 segment:0
并执行它。
正在加载的程序是简单的文本编辑器。在编辑器中,我需要获取单个变量的物理地址,将其转换为 segment:offset
并将其用于加载文本文件。我曾尝试在跳转到退出程序之前设置 DS:SI
,但这不是很好的解决方案。有谁知道如何解决它?请帮忙。
最佳答案
在实寻址方式下,一个字节内存的物理地址等于段*16+偏移量。
当您通过[(e)bp+...]
或[esp+...]
引用内存时,涉及的默认段是ss
。否则为 ds
。可选的段覆盖前缀将更改默认段寄存器。
因此,例如,如果您的变量地址为 [bp-8]
,那么它的物理地址为 ss*16+bp-8
。
关于c - 16位模式加载地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12004921/