1

我正在尝试在 Bochs 中调试 16 位引导加载程序,但是在运行代码时遇到以下错误:

jmp far ptr 0:61Dh => 错误:应有逗号、冒号或行尾

错误截图

有人可以建议我如何正确地在 NASM 中重新组装 MBR 而不会遇到这个错误?

; Format      : Binary file
; Base Address: 0000h Range: 0000h - 0098h Loaded length: 0098h

        .686p
        .mmx
        .model flat

; ===========================================================================

; Segment type: Pure code
seg000      segment byte public 'CODE' use16
        assume cs:seg000
        assume es:nothing, ss:nothing, ds:nothing, fs:nothing, gs:nothing
        cli
        xor ax, ax
        mov ss, ax
        mov sp, 7C00h
        mov si, sp
        push    ax
        pop es
        push    ax
        pop ds
        sti
        cld
        mov di, 600h
        mov cx, 100h
        rep movsw
        jmp far ptr 0:61Dh
; ---------------------------------------------------------------------------
        mov dh, 0
        mov cx, 2
        mov di, 5

loc_25:                 ; CODE XREF: seg000:0036j
        mov bx, 700h
        mov ax, 201h
        push    di
        int 13h     ; DISK - READ SECTORS INTO MEMORY
                    ; AL = number of sectors to read, CH = track, CL = sector
                    ; DH = head, DL = drive, ES:BX -> buffer to fill
                    ; Return: CF set on error, AH = status, AL = number of sectors read
        pop di
        jnb short loc_3D
        xor ax, ax
        int 13h     ; DISK - RESET DISK SYSTEM
                    ; DL = drive (if bit 7 is set both hard disks and floppy disks reset)
        dec di
        jnz short loc_25
        mov si, 68Ah
        jmp short loc_78
; ---------------------------------------------------------------------------

loc_3D:                 ; CODE XREF: seg000:002Fj
        mov cx, 3

loc_40:                 ; DATA XREF: seg000:0083r
        mov di, 5

loc_43:                 ; CODE XREF: seg000:0059j
        mov bx, 2000h
        push    bx
        pop es
        assume es:nothing
        mov bx, 0
        mov ax, 220h    ; DATA XREF: seg000:002Cr seg000:0033r ...
        push    di
        int 13h     ; DISK - READ SECTORS INTO MEMORY
                    ; AL = number of sectors to read, CH = track, CL = sector
                    ; DH = head, DL = drive, ES:BX -> buffer to fill
                    ; Return: CF set on error, AH = status, AL = number of sectors read
        pop di
        jnb short loc_60
        xor ax, ax
        int 13h     ; DISK - RESET DISK SYSTEM
                    ; DL = drive (if bit 7 is set both hard disks and floppy disks reset)
        dec di
        jnz short loc_43
        mov si, 68Ah
        jmp short loc_78
; ---------------------------------------------------------------------------

loc_60:                 ; CODE XREF: seg000:0052j
        mov cx, 3FFFh
        mov si, 800h
        xor di, di

loc_68:                 ; CODE XREF: seg000:0071j
        lodsw
        and si, 0FFBFh
        xor ax, es:[di]
        stosw
        dec cx
        jnz short loc_68
        jmp far ptr 2000h:0
; ---------------------------------------------------------------------------

loc_78:                 ; CODE XREF: seg000:003Bj seg000:005Ej ...
        lodsb
        cmp al, 0
        jz  short loc_88
        push    si
        mov bx, 7
        mov ah, 0Eh
        int 10h     ; - VIDEO - WRITE CHARACTER AND ADVANCE CURSOR (TTY WRITE)
                    ; AL = character, BH = display page (alpha modes)
                    ; BL = foreground color (graphics modes)
        pop si
        jmp short loc_78
; ---------------------------------------------------------------------------

loc_88:                 ; CODE XREF: seg000:007Bj
                    ; seg000:loc_88j
        jmp short loc_88
; ---------------------------------------------------------------------------
        inc sp
        imul    si, [bp+di+6Bh], 4920h
        das
        dec di
        and [di+72h], al
        jb  short near ptr 106h
; ---------------------------------------------------------------------------
        db  72h ; r
seg000      ends


        end

ASM 文件在这里

谢谢

4

0 回答 0