我正在为学校项目编写DOS克隆,并尝试使用BIOS INT 13、2从软盘驱动器(主要是FAT12文件系统的根目录,扇区19)读取某些扇区。我将参数设置正确-或至少我认为是这样做的-然后用AH = 2调用INT 0x13。然后,系统挂起。我不知道为什么。
我正在使用以下代码来调用中断:
mov ah, 0x2 ;Read sectors function
mov al, 1 ;I want to read one sector
mov ch, 0 ;From track 0
mov cl, 2 ;Sector 2
mov dh, 1 ;Head 1
mov dl, [device_number] ;Obtained from BIOS during boot
mov bx, 0x7C0 ;Buffer located at 0x7C00:0x0000*
mov es, bx
mov bx, 0
stc ;Set carry for older BIOSes that just unset it.
int 0x13 ;Call BIOS INT 0x13
jc .error ;If there's an …Run Code Online (Sandbox Code Playgroud) 在大学里,我研究了x86和x64架构,以及其他使用MOV函数的架构。在与他们一起工作后,当我发现像MIPS r3000或 Commodore 64 这样的产品没有 MOV 并且依赖于保存到内存和从内存加载来在寄存器之间移动值时,我感到很困惑。
所以,我想知道,这背后的原因是什么?我们设计了基于信号处理的架构,至少在这些情况下,MOV 函数的实现仅依赖于同时打开注册表写入和注册表读取信号,从而使其成为一个非常简单的命令。那么,为什么它没有在这些架构中实现呢?他们是如此不同,事情就不是这样的吗?空间问题?时髦设计?
我不禁想知道。