在boot.s汇编程一开始就定义了一个:
BOOTSEG = 0x07c0 !引导扇区(本程序)被BIOS加载到内存0x7c00处。
随后就定义了段间跳转指令:
jmpi go,#BOOTSEG !段间跳转至0x7c0:go处。当本程序刚运行时所有段寄存器的值均为0。该跳转语句会把cs寄存器加载未0x70c(原为0)
后来又搜索了一下jmpi这个指令:
jmpi为段间跳转指令
执行这条指令之后
CS = INITSEG
IP = go
也就是跳转到地址 INITSEG : go
但是我又对jmp后面的i不理解,不明白后面为什么带i,在网上搜索资料如下:
当同一指令对应于两种及两种以上的机器指令编码时,用以下的后缀予以区分 | ||||
i | 操作数为 立即数 | |||
a | 操作数为 AH,AL,AX | |||
f | FAR 仅用于跳转指令 | |||
n | NEAR 仅用于跳转指令 | |||
s | SHORT 仅用于跳转指令 | |||
1 | 操作数为 01h 仅用于移位指令 | |||
cl | 操作数为 CL 仅用于移位指令 | |||
dx | 操作数为 DX,仅用于 IN 和 OUT | |||
m | 操作数为 MEM | |||
r | 操作数为 REG | |||
s | 操作数为 SEGMENT REG | |||
w | 操作数为 字节,仅用于 DEC |