|
蓝森林 http://www.lslnet.com 2006年6月6日 10:18
[求助]这段代码用bochs模拟时怎么显示有无效指令?
并且还是个死循环,似乎在copy那里出了点问题。
[ORG 0]
jmp 0x07C0:copy ; Goto segment 07C0
chosemsg db '1 - Boot OS on hard disk', 0AH, 0DH, 'other key - Boot OS on floppy', 0AH, 0DH, $0
myosmsg db 'System Loading...',$0
copy:
; Move the code to 0x9000:0x0000
mov ax, 0x9000
mov es, ax
mov di, ax
mov si, ax
mov ax, cs ;CS == 0x07C0
mov ds, ax
mov cx, 0x0200
cld
repnz movsb ;[ES:DI] <- [DS:SI]
jmp 0x9000:start
start:
mov ax, cs ;CS == 0x9000
mov ds, ax
mov es, ax
mov si, chosemsg
prints1:
lodsb
cmp al, 0x00
je rdanswer
mov ah, 0x0E
mov bh, 0x0007
int 0x10
jmp prints1
rdanswer:
mov ah, 0x00 ;Read key
int 0x16
cmp al, '1'
je loadhd
mov si, myosmsg
prints2:
lodsb
cmp al, 0x00
je hang
mov ah, 0x0E
mov bh, 0x0007
int 0x10
jmp prints2
hang: jmp hang
loadhd:
;Load MBR at 0x07C0:0x0000 and jump to run.
mov ax, 0x07C0
mov es, ax
mov ax, 0x0201
xor bx, bx
mov cx, 0x0001
mov dx, 0x0080
int 0x10
jmp 0x07C0:0x0000
times 510-($-$$) db 0
dw 0AA55h |
[求助]这段代码用bochs模拟时怎么显示有无效指令?
[ORG 0]
jmp 0x07C0:copy ; Goto segment 07C0
chosemsg db '1 - Boot OS on hard disk', 0AH, 0DH, 'other key - Boot OS on floppy', 0AH, 0DH, $0
myosmsg db 'System Loading...',$0
copy:
; Move the code to 0x9000:0x0000
mov ax, 0x9000
mov es, ax
mov di, ax [color=blue]<-这个是不是需要清零?[/color]
mov si, ax [color=blue]<-这个是不是也需要清零?[/color]
mov ax, cs ;CS == 0x07C0
不是很明白... |
[求助]这段代码用bochs模拟时怎么显示有无效指令?
啊,我真是太粗心了,我找了很久都没找到原因,非常谢谢!! |
| |