鱼C论坛

 找回密码
 立即注册
查看: 2045|回复: 3

15号中断0e8号功能问题:探测内存,求助= =

[复制链接]
发表于 2013-2-9 14:56:46 | 显示全部楼层 |阅读模式
25鱼币
本帖最后由 张国祥 于 2013-2-9 14:58 编辑

我给虚拟机分配了64MB内存,使用15号中断探测内存并显示在屏幕上,乍看似乎是对的,但仔细一看,肯定有错,先上图:
shot.png
第8个ARDS结构的LengthLow(长度)已经达到1000000H,远超64MB,这是什么问题呢?再上代码(补充:此代码首先进入保护模式,接着通过retf进入ring3,再通过调用门回到ring0,再探测内存):
%include "pm.inc"
org 0100h
jmp start
;enter pm,call data segment,ring0->ring3->ring0,check memory,clean,study page
[SECTION .gdt]
GDT_DESC:        Descriptor        0,0,0
MAIN_DESC:        Descriptor        0,mainlen-1,DA_C+DA_32
DATA_DESC:        Descriptor        0,datalen-1,DA_DRW+DA_DPL3
STK_DESC:        Descriptor        0,TopOfStk+2,DA_DRW
DISP_DESC:        Descriptor        0b8000h,0ffffh,DA_DRW+DA_DPL3

CODE3_DESC:        Descriptor        0,code3len-1,DA_C+DA_32+DA_DPL3
STK3_DESC:        Descriptor        0,TopOfStk3+2,DA_DRW+DA_DPL3

CODE0_DESC:        Descriptor        0,code0len-1,DA_C+DA_32

TSS_DESC:        Descriptor        0,tsslen-1,DA_386TSS
CALL_GATE:        Gate                SEL_CODE0,0,0,DA_386CGate+DA_DPL3

gdtlim:        dw $-$-1
dd 0

SEL_MAIN                EQU                MAIN_DESC-$
SEL_DATA                EQU                DATA_DESC-$+SA_RPL3
SEL_STK                        EQU                STK_DESC-$
SEL_DISP                EQU                DISP_DESC-$+SA_RPL3

SEL_CODE3                EQU                CODE3_DESC-$+SA_RPL3
SEL_STK3                EQU                STK3_DESC-$+SA_RPL3

SEL_CODE0                EQU                CODE0_DESC-$

SEL_TSS                        EQU                TSS_DESC-$
SEL_CALL_GATE        EQU                CALL_GATE-$+SA_RPL3

[SECTION .data1]
data:
        _Msg:                db "PM Now!",0
        _Titles:        db        "BaseAddrL BaseAddrH LengthLow LengthHigh   Type",0ah,0ah,0
        _MemMsg1:        db "AVL RAM:",0
        _MemMsg2:        db "RAM Size:",0
        _Cr:                db 0ah,0
        _ARDSCnt:        dd 0
        _DisPos:        dd 160*2+2*0
        _MemAVL:        dd 0
        _MemTotal:        dd 0
        _MemCache:        times 512 db 0
        
        DataOst                Msg
        DataOst                Titles
        DataOst                MemMsg1
        DataOst                MemMsg2
        DataOst                Cr
        DataOst                ARDSCnt
        DataOst                DisPos
        DataOst                MemAVL
        DataOst                MemTotal
        DataOst                MemCache
datalen                equ        $-$

[SECTION .stk]
[BITS 32]
stk:
        times 512 db 0
TopOfStk        equ        $-$-2

[SECTION .stk3]
[BITS 32]
stk3:
        times 512 db 0
TopOfStk3        equ        $-$-2

[SECTION .tss]
ALIGN 32
[BITS 32]
tss:
        dd 0
        dd TopOfStk
        dd SEL_STK
        times 22 dd 0
        dw 0
        dw $-tss+2
        db 0ffh
tsslen                equ        $-$

[SECTION .start]
ALIGN 32
[BITS 16]
start:
        mov ax,cs
        mov ds,ax
        mov es,ax
        mov ss,ax
        mov sp,0100h
        
        mov ebx,0
        mov di,_MemCache
        mov cx,20
        mov edx,534d4150h
        
chk:
        mov eax,0e820h
        int 15h
        jc chk_err
        add di,20
        inc dword [_ARDSCnt]
        cmp ebx,0
        je chk_ok
        jmp chk
                
chk_err:
        mov dword [_ARDSCnt],0
                
chk_ok:
        DescInit        cs,main,MAIN_DESC
        DescInit        ds,data,DATA_DESC
        DescInit        ss,stk,STK_DESC
        DescInit        cs,code3,CODE3_DESC
        DescInit        ss,stk3,STK3_DESC
        DescInit        cs,code0,CODE0_DESC
        DescInit        ds,tss,TSS_DESC
                
        mov ax,ds
        movzx eax,ax
        shl eax,4
        add eax,GDT_DESC
        mov dword [gdtlim+2],eax
        lgdt [gdtlim]
                
        cli
        
        in al,92h
        or al,00000010b
        out 92h,al
        
        mov eax,cr0
        or eax,1
        mov cr0,eax
        
        jmp dword SEL_MAIN:0
        
[SECTION .main]
ALIGN 32
[BITS 32]
main:
        mov ax,SEL_DATA
        mov ds,ax
        mov ax,SEL_DISP
        mov gs,ax
        mov ax,SEL_STK
        mov ss,ax
        mov sp,TopOfStk

        mov esi,Msg
        mov edi,0
        mov ah,0ah
        
dispm:
        mov al,[ds:esi]
        cmp al,0
        je disok
        mov [gs:edi],ax
        inc esi
        add edi,2
        jmp dispm
        
disok:
        mov ax,SEL_TSS
        ltr ax
        
        push SEL_STK3
        push TopOfStk3
        push SEL_CODE3
        push 0
        retf
mainlen                equ        $-$

[SECTION .code3]
ALIGN 32
[BITS 32]
code3:
        mov ah,0ah
        mov al,'3'
        mov [gs:20],ax
        call SEL_CALL_GATE:0
code3len        equ        $-$

[SECTION .code0]
ALIGN 32
[BITS 32]
code0:
        mov ax,Titles
        call DispStr

        mov ecx,[ARDSCnt]
        mov esi,MemCache
        
d0:
        push ecx
        mov ecx,5
        
d1:
        mov eax,[ds:esi]
        call DispInt
        
        mov edi,[DisPos]
        mov al,'H'
        mov ah,0ch
        mov [gs:edi],ax
        add esi,4
        add edi,4
        mov [DisPos],edi
        loop d1
        
        mov ax,Cr
        call DispStr

        sub esi,4
        cmp byte [ds:esi],1
        jne noavl
        sub esi,8
        mov eax,[ds:esi]
        add [MemAVL],eax
        jmp c0
        
noavl:
        sub esi,8
        
c0:
        mov eax,[ds:esi]
        add [MemTotal],eax
        
        add esi,12
        pop ecx
        loop d0

        mov ax,Cr
        call DispStr

        mov ax,MemMsg1
        call DispStr

        mov eax,[MemAVL]
        call DispInt
        
        mov ax,Cr
        call DispStr
        
        mov ax,MemMsg2
        call DispStr
        
        mov eax,[MemTotal]
        call DispInt
        
        
        
        jmp $
%include "library.inc"
code0len        equ        $-$
关于代码中引用的文件,通过附件:
code.rar (175.25 KB, 下载次数: 0)
问题有些长- -希望大家帮忙= =

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2013-2-9 15:06:18 | 显示全部楼层
在帖子上的代码有问题,貌似不能同时显示两个$$,请大家以附件里的为准
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-2-10 23:11:51 | 显示全部楼层
顶起求助,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-2-12 20:44:41 | 显示全部楼层
{:7_176:}再次顶起。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-18 02:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表