; write by zhujiu123
; nasm编译器
;========================================================
SECTION header vstart=0 ;定义用户程序头部段
program_length dd program_end ;双字节来存储代码长度
;用户程序入口点
code_entry dw start ;偏移地址[0x04]
dd section.code_1.start ;段地址[0x06]
realloc_tbl_len dw (header_end-code_1_segment)/4
;段重定位表项个数[0x0a]
;段重定位表
code_1_segment dd section.code_1.start ;[0x0c]
code_2_segment dd section.code_2.start ;[0x10]
data_1_segment dd section.data_1.start ;[0x14]
data_2_segment dd section.data_2.start ;[0x18]
stack_segment dd section.stack.start ;[0x1c]
header_end:
;==============================================================================
start;
SECTION code_1 align=16 vstart=0
SECTION code_2 align=16 vstart=0
SECTION data_1 align=16 vstart=0
SECTION data_2 align=16 vstart=0
SECTION stack align=16 vstart=0
SECTION trail align=16
program_end:
代码编译后:
上述代码,并没有执行实际的机器指令,只是将数据进行了存储。伪指令不占用地址。
上述代码定义了32个字节的变量,所以到header_end 地址就是0x20. code_1_segment 等于12 .
realloc_tbl_len =(32-12)/4 = 5;
彻底清了以上的结构,便可以写应用程序了。