gpt4 book ai didi

assembly - 在 fasm (MS-DOS) 中访问 0xF000FFFE(计算机类型)的内存

转载 作者:行者123 更新时间:2023-12-04 05:10:55 26 4
gpt4 key购买 nike

问题是:我需要从 BIOS 内存中获取“计算机”类型。我知道,我可以在 fasm 中这样做(我的程序和所有段都是 16 位):

mov al, [0xF000FFFE]

但这返回零,这是不对的,因为 turbo c++ 3.1 中的等效代码
UCHAR pcType = *((UCHAR*)0xF000FFFE);

返回我电脑的正确“类型”, 使用大模型时 (在代码生成设置中)。
那么如何在 fasm 中修复它呢? (例如我知道,masm 有 .model 指令,但在 fasm 中没有这样的东西)。请帮...

最佳答案

Turbo-C 正在执行从 读取的指令远地址 0xF000FFFE。段是地址的高 16 位,偏移量是地址的低 16 位。在大内存模型中 指针 0xF000FFFE 指向段 0xF000,偏移量 = 0xFFFE。实模式segment:offset (logical) address通过计算 (segment<<4)+offset 转换为物理地址,在这种情况下是物理地址 (0xF000<<4)+0xFFFE = 0xFFFFE,这是系统 ID 字节所在的 ROM BIOS 内存 1MiB 标记以下的倒数第二个字节。

您将需要创建等效的 FASM 代码以将段寄存器之一设置为 0xF000,然后检索偏移量 0xFFFE 处的值。以下代码只是通过 Int 21h/AH=4Ch 返回的错误级别(代码)将系统 ID 返回给 DOS。 .返回值在 AL 中:

format mz                      ; Create a DOS EXE program

mov ax, 0xf000
mov es, ax ; ES = 0xf000
mov al, [es:0xfffe] ; Read byte at 0xF000:0xFFFE

mov ah, 4Ch ; DOS Exit and Return with error code function
int 21h ; Exit and return System ID in AL

关于assembly - 在 fasm (MS-DOS) 中访问 0xF000FFFE(计算机类型)的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14924967/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com