我在汇编语言里写了一个小的计算程序。我用VirtualBox运行它,它工作得很好,但是当我将代码复制到USB驱动器的引导区并从它引导我的计算机时,它没有工作。
我已经将问题隔离到包含函数库的额外扇区的初始加载中。下面是有问题的代码片段:
PUSH 0x2000
POP ES ;segment 0x2000
MOV BX, 0x0000 ;offset
MOV CX, 0x0002 ;sector 2 and track 0
MOV DX, 0x0080 ;drive 80 and head 0
load:
MOV AX, 0x0201 ;read only one sector
INT 0x13 ;read sector
JC load ;repeat until no error
MOV BX, 0x0007
MOV AH, 0x0E
MOV AL, [ES:0x0000]
INT 0x10 ;print a '!' character to test if the process is successful (purely for debugging reasons)所以和VirtualBox在一起我得到了一个很好的!为了证明加载过程是成功的,但是在我的计算机上它给了我一个空白(ASCII 0x00)。有人对这里的问题有什么建议吗?
发布于 2013-11-09 17:22:23
我终于找到了解决问题的办法。结果,我的代码位于逻辑磁盘的前两个扇区中。虽然我的USB驱动器上只有一个逻辑磁盘,但当作为逻辑磁盘打开时,我的十六进制编辑器不包括物理磁盘的第一个2048扇区。如果windows看到了这种区别,那么对于CPU来说,它只是一个位数组。因此,当我将第二个扇区加载到内存中时,而不是加载第2050扇区(据我当时所知,第二个扇区是第二个扇区)是被定位的,它非常正确地加载了实际的第二个扇区,除了一些杂散位外,只有0x00s。
既然数据在正确的领域,它就像一种魅力。
https://stackoverflow.com/questions/18275644
复制相似问题