jmp指令
处理器执行指令的顺序从低地址到高地址依次执行
跳转: 处理器去别的地方执行指令
跳转指令格式
jmp 段地址:偏移地址
计算机启动后是如何进入操作系统的
8086的CS寄存器初始状态FFFF IP寄存器初始状态0000 所以8086的第一条指令在FFFF0处
8086能访问的最大范围是FFFFF FFFF0到FFFFF只有16字节 这个空间是不够操作系统使用的 操作系统存储在硬盘上
ROM BIOS里面固化了指令从外部存储设备(硬盘)读取数据
主引导扇区的加载
对打印hello world程序的改进
原来的打印hello world程序只能在dbg模式下才能运行 因为在设置字符后剩下的指令都是填充字节 CPU无法正确执行
使用jmp指令让程序卡住
start:
mov ax, 0xb800
mov ds, ax
mov byte[0x00], 'H'
mov byte[0x01], 0x06
mov byte[0x02], 'e'
mov byte[0x03], 0x06
mov byte[0x04], 'l'
mov byte[0x05], 0x06
mov byte[0x06], 'l'
mov byte[0x07], 0x06
mov byte[0x08], 'o'
mov byte[0x09], 0x06
mov byte[0x0a], ' '
mov byte[0x0b], 0x06
mov byte[0x0c], 'W'
mov byte[0x0d], 0x06
mov byte[0x0e], 'o'
mov byte[0x0f], 0x06
mov byte[0x10], 'r'
mov byte[0x11], 0x06
mov byte[0x12], 'l'
mov byte[0x13], 0x06
mov byte[0x14], 'd'
mov byte[0x15], 0x06
loop:
; 主引导扇区会被加载到07C00处 第一条代码
; CPU会重复执行这条指令 程序卡住
jmp 0x0000:0x7c00+loop
current:
times 510-(current-start) db 0
db 0x55, 0xaa
使用bochs.exe的执行结果