我剛剛接近機器級別的x86編碼,所以請原諒我的問題的微不足道。以下代碼旨在成爲簡單的引導加載程序。它將軟盤的某個扇區轉儲到內存中,然後跳轉到加載的代碼。在加載的代碼中,我試圖從內存變量中讀取,但沒有成功,如註釋中所述。i386實模式。關於從內存加載數據的一些問題
[ORG 0]
jmp 07C0h:start ; Goto segment 07C0
start:
; Update the segment registers
mov ax, cs
mov ds, ax
mov es, ax
reset: ; Reset the floppy drive
mov ax, 0
mov dl, 0
int 13h
jc reset
read:
mov ax, 1000h ; ES:BX = 1000:0000
mov es, ax
mov bx, 0
mov ah, 2 ; Load disk data to ES:BX
mov al, 5 ; Load 5 sectors
mov ch, 0 ; Cylinder=0
mov cl, 2 ; Sector=2
mov dh, 0 ; Head=0
mov dl, 0 ; Drive=0
int 13h ; Read!
jc read ; on error
jmp 1000h:0000 ; Jump to the program
times 510-($-$$) db 0
dw 0AA55h
; == Loaded code from second floppy sector ==
prog:
mov ah, 0x0E ; Prints a char. This one works: the '-'
mov al, '-' ; is printed.
mov bx, 0
int 10h
mov bx, 0
a:
mov al, [L1+bx] ; Should read from L1 and print out chars.
inc bx ; But it prints only white spaces. Why?
int 10h
cmp bx, 10
jz h
jmp a
cli
hlt
L1 db "" ; my string
我不明白爲什麼它不起作用。我非常感謝任何幫助。
只是爲了澄清,上面是一個單一的源文件或兩個? –
你也可以給我們實際的代碼?缺少'h'標籤,沒有它,這個代碼就無法組裝。 –
檢查我答案更新中的最後一句話 –