当前位置: 代码迷 >> 汇编语言 >> eax=0e820h调用int 15h后如何CF=1
  详细解决方案

eax=0e820h调用int 15h后如何CF=1

热度:278   发布时间:2016-05-02 04:33:31.0
eax=0e820h调用int 15h后怎么CF=1?
我正在看《自己动手写操作系统》,其中PMTEST7.ASM里有如下这段代码:

.loop:
mov eax, 0E820h
mov ecx, 20
mov edx, 0534D4150h
int 15h
jc LABEL_MEM_CHK_FAIL
add di, 20
inc dword [_dwMCRNumber]
cmp ebx, 0
jne .loop
jmp LABEL_MEM_CHK_OK
LABEL_MEM_CHK_FAIL:
mov dword [_dwMCRNumber], 0
LABEL_MEM_CHK_OK:

在DOSBox下PMTEST7.COM运行出错。我在Turbo Debugger下调试发现,INT 15H后,产生了错误CF=1,也就是说程序在INT 15H后就跳到LABEL_MEM_CHK_FAIL这个地方了。通常情况下应该不会是这样的吧。我在网上找了很久,也有很多关于 0E820h int 15h的文章,都是关于怎么用,但还没看到说这样调用出错的情况。几天过去了,还是没想明白,请老师们指点一下。
------解决方案--------------------
运行场合的缘故?没做过这个,刚才看了下 Ralf Brown 的中断说明,这个应该是被支持的,因为各个版本的 Windows 都是通过它来做的;CF=1 时,AH=86h 表明不支持,说明 DOSBox 虚拟机没有实现这方面的功能;在 VPC 的纯 DOS 6.22 里,返回的 AX=E802,又是另外个结果,还不知道意思。
------解决方案--------------------
虚拟机终归是虚拟机。
------解决方案--------------------
DOSBox或者Windows的DOS窗口中都是不支持的,你要在纯DOS中运行。
  相关解决方案