我一直在研究x86汇编语言,并且问题来自PUSHA指令.
据我所知,Pusha与PUSH AX,CX,DX,BX,原始SP,BP,SI和DI相同.
我想知道为什么在PUSH指令执行PUSH BX之前执行PUSH CX.
硬件架构有什么理由吗?
我正在尝试实现简单的操作系统,现在必须实现内存管理.
首先,我们输入简单的代码来检查内存大小,如下所示.
我遇到的问题是这个函数的结果取决于增量大小.
如果我将增量设置为1024,则此函数返回640Kb.
但是,如果我将增量设置为1024*1024,则此功能返回120Mb.
(我的系统(bochs)的内存设置为120MB.)
我检查了优化选项和A20门.
有谁知道为什么我的功能不能正常工作?
unsigned int memtest_sub(unsigned int start, unsigned int end)
{
unsigned int i;
unsigned int* ptr;
unsigned int orgValue;
const unsigned int testValue = 0xbfbfbfbf;
for (i = start; i <= end; i += 1024*1024) {
ptr = (unsigned int*) i;
orgValue = *ptr;
*ptr = testValue;
if (*ptr != testValue) {
break;
}
*ptr = orgValue;
}
return i;
}
Run Code Online (Sandbox Code Playgroud)