Unity
July 30th, 2013, 13:43
Hi
I am attempting to debug a 16 bit bootloader in Bochs, however when running the code i am met with the following errors:
For code:
The first two are producing error A2206: missing operator in expression
and the third, error A2028: expression must be a code address.
If anyone could advise as to how to make these functions work in MASM I would appreciate it.
Thanks
Complete asm file
I am attempting to debug a 16 bit bootloader in Bochs, however when running the code i am met with the following errors:
For code:
Quote:
jmp far PTR 0:61Dh jmp far ptr 2000h:0 jb short near ptr 106h |
The first two are producing error A2206: missing operator in expression
and the third, error A2028: expression must be a code address.
If anyone could advise as to how to make these functions work in MASM I would appreciate it.
Thanks
Complete asm file
Quote:
; 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 |