我正在尝试理解如何使用gdb在xv6 (教学操作系统)中引导。
初始引导过程中的指令之一是(AT&T语法):
cmpl 0x0,%cs:0x65a4然后,
jne 0xfd2b9现在,据我所知,cmpl比较了这两个值并设置了标志,如果刚才比较的值不相等,jne会查看标志和跳转。
但我不明白%cs:0x65a4作为操作数的含义。这是指地址(cs*16 + 65a4)的值还是该内存位置的实际内容?
我之所以问这个问题,是因为系统不会在jne指令之后跳转,这意味着第二个操作数(%cs:0x65a4)被计算为零。但不应该这样,因为地址和内容都不是零。
发布于 2015-01-27 16:17:08
这是指地址(cs*16 + 65a4)的值还是该内存位置的实际内容?
将位于地址(cs*0x10 + 0x65a4)的内存中的32位字与值0进行比较-假设CPU以“真实模式”运行。
然而,对我来说,有件事显得很奇怪:
您将讨论"cs*0x10“,它是”实模式“的地址计算。由于80286有第二个寻址模式称为“保护模式”。在这种模式下,绝对地址不能简单地.
只有在保护模式下运行时,CPU才能处于“32位模式”。x86 CPU的16位指令集和32位指令集是不同的!
"jne 0xfd2b9“绝对是32位指令,EIP绝对是32位寄存器。
所以要么..。
https://stackoverflow.com/questions/28168240
复制相似问题