1.汇编地址与偏移地址
代码经过编译之后的文件内容,即代码对应的汇编地址如下:
;汇编地址 机器码 源程序代码
00000000 B800B8 mov ax,0xb800
00000003 8EC0 mov es,ax
;注释不编译
对应的汇编地址与偏移地址的关系如下图:
将该段程序加载到物理地址0x60000处,能看到汇编地址与偏移地址是一致的。
2.align
Intel处理器要求段在内存中起始地址为16或32字节对齐,即能被16(32)整除:align =16
,align =32
segment header
db 0xaa
segment code align=16
db 0xbb
segment date align=16
db 0xcc
汇编地址如下:code段为16位对齐,因此要从0x0010开始,用0x00填充
0x00000000: aa 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x00000010: bb 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x00000020: cc 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
3.vstart
vstart可以使汇编地址从段开头开始计算:
segment header
db 0xaa ;0x00
segment code align=16 vstart=0
db 0xbb ;0x00