调用int 0x13中断后,自动跳转
环境如下:
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
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论