Спросите, какие самокомпиляция и бохи несовместимы? Я хочу что-то прочитать с дискеты, произошла ошибка.
mycode:
Load_FAT:
and di, 0x0ffe0
add di, 0x1a # 起始簇号的偏移量26
mov cx, word ptr es:[di] # cx是起始簇号
push cx # 保存簇号, 因为Load_File用到. 空文件的簇号是0, 要处理 # TODO
mov ax, 0x00
mov es, ax
mov bx, 0x8000 # es:bx=>数据缓冲区
mov ax, word ptr [BPB_RsvdSecCnt] # 待读取的起始LBA扇区号
mov cx, word ptr [BPB_FATSz16] # 要读入的扇区个数
call Func_ReadSectors
objdump disas:
1e9: 83 e7 e0 and $0xffe0,%di
1ec: 83 c7 1a add $0x1a,%di
1ef: 26 8b 0d mov %es:(%di),%cx
1f2: 51 push %cx
1f3: b8 00 00 mov $0x0,%ax
1f6: 8e c0 mov %ax,%es
1f8: bb 00 80 mov $0x8000,%bx
1fb: a1 44 00 mov 0x44,%ax
1fe: 8b 0e 4c 00 mov 0x4c,%cx
202: e8 7c ff call 0x181
bochs disas:
# memory start from 0x10000
000101e9: ( ): and di, 0xffe0 ; 83e7e0
000101ec: ( ): add di, 0x001a ; 83c71a
000101ef: ( ): mov cx, word ptr es:[di] ; 268b0d
000101f2: ( ): push cx ; 51
000101f3: ( ): mov ax, 0x0000 ; b80000
000101f6: ( ): mov es, ax ; 8ec0
000101f8: ( ): mov bx, 0x8000 ; bb0080
000101fb: ( ): mov ax, word ptr ds:0x44 ; a14400
000101fe: ( ): mov cx, word ptr ds:0x0 ; 8b0e0000
00010202: ( ): add byte ptr ds:[bx+si], al ; 0000
00010204: ( ): add byte ptr ds:[si], cl ; 004c00
00010207: ( ): call .-132 ; e87cff
из-за того, что Bochs работает mov cx, word ptr ds:0x0
, я получил неверный результат.