Программа показывает ошибку при сборке с использованием nasm
Я изменил доступный код, чтобы включить линию А20 в защищенный режим. Но появляется ошибка при сборке кода.
Код выглядит следующим образом:
lb_a20_check:
pushf
push ds
push es
push di
push si
cli
xor ax, ax
mov es, ax
mov di, 0x0500
mov si, 0x0510
mov al, byte [es:di]
push ax
mov al, byte [ds:si]
push ax
mov byte [es:di], 0x00
mov byte [ds:si], 0xff
cmp byte [es:di], 0xff
pop ax
mov byte [ds:si], al
pop ax
mov byte [es:di], al
pop si
pop di
pop es
pop ds
mov ax, 0 ;if memory wrapped - protected mode disabled
je lb_en_a20
popf
mov ax, 1 ;if memory not wrapped
ret
lb_en_a20:
popf
mov dl, var_temp_a20
cmp dl, 0x01
je lb_en_KEYBOARD_a20
cmp dl, 02
je lb_en_FAST_a20
lb_en_BIOS_a20:
mov ax, 0x2401
int 0x15
inc dl
mov var_temp_a20, dl
jmp lb_a20_check
lb_en_KEYBOARD_a20:
cli
call fn_wait_kb_cmd
mov al, 0xAD ;disable keyboard
out 0x64, al
call fn_wait_kb_cmd
mov al, 0xD0
out 0x64, al
call fn_wait_kb_data
in al, 0x60
push eax
call fn_wait_kb_cmd
mov al, 0xD1
out 0x64, al
call fn_wait_kb_cmd
pop eax
or al, 2
out 0x60, al
call fn_wait_kb_cmd
mov al, 0xAE
out 0x64, al
call fn_wait_kb_cmd
sti
inc dl
mov var_temp_a20, dl
jmp lb_a20_check
lb_en_FAST_a20:
in al, 0x92
or al, 02
out 0x92, al
inc dl
mov var_temp_a20, dl
jmp lb_a20_check
lb_a20_data:
var_temp_a20 db 0
lb_a20_include_data:
%include 'include\kb.asm'
Код прост, но ошибка выскакивает всякий раз, когда я использую память var_temp_a20 в любом утверждении.
Ошибка говорит неправильный код операции или операнд в заявлениях:
mov var_temp_a20, dl
везде на протяжении всей программы.
Кто-нибудь может интерпретировать проблему?
Благодарю.