1

我正在使用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

我不想在复杂的寻址模式下使用几个通用寄存器来达到我的目的,我想你有一些简单有效的方法。

4

1 回答 1

4

要增加 64 位 QWORD,可以使用addandadc指令:

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因为前者没有设置进位标志。

于 2017-05-07T14:52:42.293 回答