1
回答
调用int 0x13中断后,自动跳转
开发十年,就只剩下这套Java开发体系了   

环境如下:

ubuntu 13.10 amd_64

nasm 2.10.07

bochs 2.4.5

代码如下:

org 0x7c00

    jmp     entry
    nop

	BS_OEMName	DB 'ForrestY'	; OEM String, 必须 8 个字节
	BPB_BytsPerSec	DW 512		; 每扇区字节数
	BPB_SecPerClus	DB 1		; 每簇多少扇区
	BPB_RsvdSecCnt	DW 1		; Boot 记录占用多少扇区
	BPB_NumFATs	DB 2		; 共有多少 FAT 表
	BPB_RootEntCnt	DW 224		; 根目录文件数最大值
	BPB_TotSec16	DW 2880		; 逻辑扇区总数
	BPB_Media	DB 0xF0		; 媒体描述符
	BPB_FATSz16	DW 9		; 每FAT扇区数
	BPB_SecPerTrk	DW 18		; 每磁道扇区数
	BPB_NumHeads	DW 2		; 磁头数(面数)
	BPB_HiddSec	DD 0		; 隐藏扇区数
	BPB_TotSec32	DD 0		; wTotalSectorCount为0时这个值记录扇区数
	BS_DrvNum	DB 0		; 中断 13 的驱动器号
	BS_Reserved1	DB 0		; 未使用
	BS_BootSig	DB 29h		; 扩展引导标记 (29h)
	BS_VolID	DD 0		; 卷序列号
	BS_VolLab	DB 'OrangeS0.02'; 卷标, 必须 11 个字节
	BS_FileSysType	DB 'FAT12   '	; 文件系统类型, 必须 8个字节  

entry:
    mov     ax, 0
    mov     ss, ax
    mov     sp, 0x7c00
    mov     ds, ax
    mov     es, ax
   
read:
    mov     ah, 0x00
    mov     dl, 0x00
    int     0x13 ; bochs执行后跳转0x000fe3fe
    
    mov     ax, 0
    mov     es, ax
    mov     bx, 0x8200       ; es:bx 缓存地址
    mov     ch, 0       ; 柱面号
    mov     dh, 1       ; 磁头号
    mov     cl, 15     ; 第5位放入所读的起始扇区号,
    mov     ah, 0x02    ; 0x02 读盘
    mov     al, 2       ; 要读取的扇区数目
    mov     dl, 0x00    ; 驱动器号
    int     0x13
    jc      read
    
    times 	510-($-$$)	db	    0   ; 填充剩下的空间,使生成的二进制代码恰好为512字节
    dw 	    0xaa55				    ; 结束标志
代码中首次调用int 0x13后跳转的0x000fe3fe,是什么原因导致的,请教大神。


寄存器:

eax: 0x00000000 0
ecx: 0x00090000 589824
edx: 0x00000000 0
ebx: 0x00000000 0
esp: 0x00007bfa 31738
ebp: 0x00000000 0
esi: 0x000e46dc 935644
edi: 0x0000ffac 65452
eip: 0x0000e3fe
eflags 0x00000082: id vip vif ac vm rf nt IOPL=0 of df if tf SF zf af pf cf


es:0x0000, dh=0x00009300, dl=0x0000ffff, valid=1
	Data segment, base=0x00000000, limit=0x0000ffff, Read/Write, Accessed
cs:0xf000, dh=0x0000930f, dl=0x0000ffff, valid=1
	Data segment, base=0x000f0000, limit=0x0000ffff, Read/Write, Accessed
ss:0x0000, dh=0x00009300, dl=0x0000ffff, valid=7
	Data segment, base=0x00000000, limit=0x0000ffff, Read/Write, Accessed
ds:0x0000, dh=0x00009300, dl=0x0000ffff, valid=1
	Data segment, base=0x00000000, limit=0x0000ffff, Read/Write, Accessed
fs:0x0000, dh=0x00009300, dl=0x0000ffff, valid=1
	Data segment, base=0x00000000, limit=0x0000ffff, Read/Write, Accessed
gs:0x0000, dh=0x00009300, dl=0x0000ffff, valid=1
	Data segment, base=0x00000000, limit=0x0000ffff, Read/Write, Accessed
ldtr:0x0000, dh=0x00008200, dl=0x0000ffff, valid=1
tr:0x0000, dh=0x00008b00, dl=0x0000ffff, valid=1
gdtr:base=0x000fb6a7, limit=0x30
idtr:base=0x00000000, limit=0x3ff



举报
Pagination
发帖于5年前 1回/556阅
顶部