eax=0e820h调用int 15h后怎么CF=1?

Really_want 2014-07-11 11:50:07
我正在看《自己动手写操作系统》,其中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的文章,都是关于怎么用,但还没看到说这样调用出错的情况。几天过去了,还是没想明白,请老师们指点一下。
...全文
217 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
啊,应该是北桥MCH,我怎么写反了。
  • 打赏
  • 举报
回复
我觉得Ralf Brown说的有问题,ntldr实际上是读南桥MCH的配置寄存器确定内存可用范围,Ralf说的“ various versions of Windows call it to find out about the system memory”可能是更早版本的Windows。
zara 2014-07-14
  • 打赏
  • 举报
回复
如果真如 Ralf Brown 中断说明里的那样,为什么虚拟机里的 windows 都可以正常进行了呢
  • 打赏
  • 举报
回复
DOSBox或者Windows的DOS窗口中都是不支持的,你要在纯DOS中运行。
赵4老师 2014-07-11
  • 打赏
  • 举报
回复
虚拟机终归是虚拟机。
zara 2014-07-11
  • 打赏
  • 举报
回复
运行场合的缘故?没做过这个,刚才看了下 Ralf Brown 的中断说明,这个应该是被支持的,因为各个版本的 Windows 都是通过它来做的;CF=1 时,AH=86h 表明不支持,说明 DOSBox 虚拟机没有实现这方面的功能;在 VPC 的纯 DOS 6.22 里,返回的 AX=E802,又是另外个结果,还不知道意思。

21,497

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧