2013-08-16 8 views
1

Я пишу небольшую программу лямбда-исчисления в сборке. Я запускал его с помощью VirtualBox, и он работал отлично, но когда я скопировал код в bootsector моего 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). Все предложения относительно того, что может быть проблемой здесь.

+0

Не знаю, но, пожалуйста, напишите сообщение в блоге об этом, когда вы его заработаете! –

+0

Возможно, ваш USB-накопитель считает, что он диск 0, а не диск 80h? –

+0

Предполагается, что BIOS загрузит номер загрузочного диска в регистр 'DL', поэтому вы должны устранить эту проблему. – Jester

ответ

1

Я, наконец, нашел решение своей проблемы. Оказывается, мой код находился в первых двух секторах логического диска. Хотя на моем USB-диске есть только один логический диск, мой шестнадцатеричный редактор исключает первый сектор 2048 физического диска при открытии в качестве логического диска. Если бы окна видели это различие, для CPU это всего лишь массив бит. Поэтому, когда я загрузил второй сектор в память, вместо того, чтобы загружать 2050-й сектор (насколько я знал в то время был вторым сектором), были данные, которые были расположены, он загрузил совершенно правильно фактический второй сектор, содержащий, кроме некоторых блуждающие биты, только 0x00s.

Теперь, когда данные находятся в правильном секторе, он работает как шарм.

Смежные вопросы