关于一段检查内存大小的代码
下面一段代码是《30天自制操作系统》的一段代码,书中说:“内存检查时,要往内存里随便写入一个值,然后马上读取,来检查读取的值与写入的值是否相等。如果内存链接正常,则写入的值能够记在内存里,如果没连接上,则读出的值肯定是乱七八糟的”
我的问题是,根据下面的代码,如果地址增加到超过内存的范围,能够向这个地址写入和读取吗?这个是怎么判断内存大小的??有点不明白
操作系统 内存
PUSHEDI
PUSHESI
PUSHEBX
MOVESI,0xaa55aa55; pat0 = 0xaa55aa55;
MOVEDI,0x55aa55aa; pat1 = 0x55aa55aa;
MOVEAX,[ESP+12+4]; i = start;
mts_loop:
MOVEBX,EAX
ADDEBX,0xffc; p = i + 0xffc;
MOVEDX,[EBX]; old = *p;
MOV[EBX],ESI; *p = pat0;
XORDWORD [EBX],0xffffffff; *p ^= 0xffffffff;
CMPEDI,[EBX]; if (*p != pat1) goto fin;
JNEmts_fin
XORDWORD [EBX],0xffffffff; *p ^= 0xffffffff;
CMPESI,[EBX]; if (*p != pat0) goto fin;
JNEmts_fin
MOV[EBX],EDX; *p = old;
ADDEAX,0x1000; i += 0x1000;
CMPEAX,[ESP+12+8]; if (i <= end) goto mts_loop;
JBEmts_loop
POPEBX
POPESI
POPEDI
RET
mts_fin:
MOV[EBX],EDX; *p = old;
POPEBX
POPESI
POPEDI
RET