【发布时间】:2015-01-05 18:33:47
【问题描述】:
我有这个任务来制作显示我的电脑上的分区磁盘的引导程序.. 我进行了很多搜索,发现将这些信息保存在 1BE 中的部分,所以我试图从那个扇区读取..我找到了一些代码并试图研究中断 13 这段代码,但我不知道我觉得有什么东西错了
然后当我使用 NASM 运行它时 它显示错误无法识别指令 ORG
非常感谢 :) :) :)
[BITS 16] ; 16 bit code generation
[ORG 0x7C00] ; Origin location
; Main program
main: ; Label for the start of the main program
start:
mov ax,cs
mov ds,ax
mov es,ax
mov ss,ax
sti
reset: mov ah,0h ;resetting the drive to the first sector
mov dl, 0x80
int 13h
js reset
read: mov ax,1BEh ;reading sectors into memory address 0x1BE:0
mov es,ax
xor bx,bx
mov ah,02h
mov al,01h ;reading 1 sector
mov cx, 0001h ; track 0, sector 1
mov dx, 0000h ; head 0, drive 0
int 13h
jc errp ; detect error
ret
jmp $ ; Never ending loop
; Procedures
errp: ; process error here
mov ax,0x0000
mov ds,ax
mov si, ERRR ; Load the string into position for the procedure.
call PutStr
PutStr: ; Procedure label/start
; Set up the registers for the interrupt call
mov ah,0x0E ; The function to display a chacter (teletype)
mov bh,0x00 ; Page number
mov bl,0x07 ; Normal text attribute
.nextchar
lodsb
or al,al
jz .return
int 0x10 ; Run the BIOS video interrupt
jmp .nextchar ; Loop back round tothe top
.return ; Label at the end to jump to when complete
ret ; Return to main program
; Data
ERRR db 'ERROOOORR',13,10,0
; End Matter
times 510-($-$$) db 0
dw 0xAA55
【问题讨论】:
-
“我的电脑”是某种模拟计算机系统吗?
-
查看 nasm 手册,ORG 指令不应该有 '[' 和 ']'。
-
看来你没有和
-f bin组装(另一种方式是错误的!)。 -
@CraigAnderson:带括号的原始形式没有错。 From the manual:“NASM 的指令有两种类型:用户级指令和原始指令。通常,每个指令都有用户级形式和原始形式。在几乎所有情况下,我们建议用户使用用户级形式指令,它们被实现为调用原始形式的宏。原始指令用方括号括起来;用户级指令不是。"
-
@rkhb 我在看这个(nasm.us/doc/nasmdoc7.html#section-7.1.1)。该部分是否具有误导性?
标签: assembly nasm boot bios sector