首页 > 代码库 > 程序分区
程序分区
计算机科学家,为了能够更好的管理,设计程序。
为我们提供了一种抽象思维,把程序分成几个不同的区域。
当然,这仅仅是我们用汇编语言的时候,并且没有操作系统的情况下,才需要这种抽象思维。
现在我们是在没有操作系统上的计算机进行模拟程序运行。
当然下面的这幅图仅仅是参考,并非绝对的。
程序的概念:
section data1 align=16
vstart=0;ds:0x07c0
mydata1:db 0x11
section data2 align=16
vstart=0;ds:0x07c1
mydata2:db 0x22
section data3 align=16 vstart=0;ds:0x07c2
mydata3:db
0x33
mov ax,[mydata1]
mov ax,[mydata2]
mov
ax,[mydata3]
;按照正常套路,如果我们写进引导区的话.
;0 ds:07c0 bx:0
;1
ds:07c0 bx:1
;2 ds:07c0 bx:2
;0x07c00 ds:07c0 :bx:0
;0x07c00 ds:07c1
:bx:0
;0x07c00 ds:07c2 :bx:0
mycode:
mov ax,0x07c0
mov ds,ax
;初始化数据段寄存器
mov ax,0xb800
mov es,ax ;初始化显存段寄存器
mydata1:
db 0x11
mydata2:
db 0x22
mydata3:
db 0x33
stop:
jmp near stop
times 510-($-$$) db 0
dw
0xAA55
Intel处理器要求段在内存中的起始物理地址起码是16字节对齐的。这句话的意思是,必须是16的倍数,或者说该物理地址必须能被16整除。
这叫做内存对齐,包括硬盘里面有扇区对齐。
对齐是为了能够快速定位,包括我们未来将要接触的内存分页,保护模式等概念,都是为了让计算机变的运算能力更加快速。
为了让大家理解这个概念,我举个例子。
NASM编译器提供了以下的表达式,可以用在你的程序中:
section.段名称.start
程序分区