Как увеличить эффективный адрес 64-битной памяти в реальном режиме
Я читаю сектора с моего расширенного диска в реальном режиме, используя прерывание 0x13
с функцией расширенных приводов 0x42
,
Я определяю DAP как 16 байтов в следующей структуре:
DAP:
db 0x10 ; size of DAP
db 0 ; Reserved zero
dw 0x0001 ; Number of sectors to read
dd 0x00000200 ; Memory Location to load the sector (s)
dq 0 ; Start of the sectors to be read
Как вы могли заметить, сегмент DAP имеет длину 8 байтов. Во время поиска моего сектора (зацикливание на секторах) я увеличиваю сегмент и сравниваю его с реальным размером моего диска. Неправильный код, который я использую для увеличения, ограничен 16-битным режимом:
mov ax, [DAP+0x08]
inc ax
mov [DAP+0x08], ax
Я не хочу использовать несколько регистров общего назначения в режиме сложной адресации для достижения моей цели, я думаю, у вас есть простой и эффективный способ.
1 ответ
Чтобы увеличить 64-битный QWORD, вы можете использовать add
а также adc
инструкции:
ADD WORD [DAP+ 8], 1
ADC WORD [DAP+10], 0
ADC WORD [DAP+12], 0
ADC WORD [DAP+14], 0
Или, если вы не нацелены на 8088, 8086 или 80286, вы также можете использовать 32-битный add/adc:
ADD DWORD [DAP+ 8], 1
ADC DWORD [DAP+12], 0
Обратите внимание, что вы не можете использовать INC WORD [DAP+ 8]
вместо ADD WORD [DAP+ 8], 1
потому что первый не устанавливает флаг переноса.