- 论坛徽章:
- 0
|
lz
我在 bochs 调试了你的代码,如下:
- 0009000a: ( ): call .+0x010a ; e80a01
- 0009000d: ( ): mov ax, 0x0000 ; b80000
- 00090010: ( ): mov ds, ax ; 8ed8
- 00090012: ( ): mov es, ax ; 8ec0
- 00090014: ( ): mov ah, 0x03 ; b403
- 00090016: ( ): xor bh, bh ; 30ff
- 00090018: ( ): int 0x10 ; cd10
- 0009001a: ( ): mov word ptr ds:0x500, dx ; 89160005
- 0009001e: ( ): mov ah, 0x88 ; b488
- 00090020: ( ): int 0x15 ; cd15
- 00090022: ( ): add ax, 0x0400 ; 050004 >> ax = 0
- 00090025: ( ): shr ax, 0x02 ; c1e802
- 00090028: ( ): shr ax, 0x0a ; c1e80a
- 0009002b: ( ): mov word ptr ds:0x502, ax ; a30205
- 0009002e: ( ): cmp ax, 0x0004 ; 3d0400 >>>>
- 00090031: ( ): jnl .+0x000d ; 7d0d
- 00090033: ( ): mov ax, 0x9000 ; b80090
- 00090036: ( ): mov ds, ax ; 8ed8
- 00090038: ( ): mov si, 0x02ca ; beca02
- 0009003b: ( ): call .+0x00d9 ; e8d900
复制代码
错误在于:
00090020: ( ): int 0x15 ; cd15
00090022: ( ): add ax, 0x0400 ; 050004 >> ax = 0
00090025: ( ): shr ax, 0x02 ; c1e802
00090028: ( ): shr ax, 0x0a ; c1e80a
你使用了 int 0x15 来进行获取 memory size, 它返回 memory 放在 ax,加上 0x400 是什么意思? |
|