ORG是Origin的缩写:起始地址,源。在汇编语言源程序的开始通常都用一条ORG伪指令来实现规定程序的起始地址
在编写引导程序是,在程序的开通通常有
org 0x7c00
作用是改变标号的位置(不是真正的地址,只是加上了一个偏移量),即并不是因为org 0x7c00引导程序才被装到内存的0x7c00。比如
org 0x7c00
mov si,msg
msg:
db "hello,world"
mov si,msg
msg:
db "hello,world"
则上面寄存器里的值下面寄存器里的值加上0x7c00,如果上面的si要正确指向msg,还需要加上0x7c00。
附一段引导程序帮助理解
;org 0x7c00
mov ax,cs;cs为0,因为硬盘首扇区加载到了0x7c00,即0:7c00
mov ss,ax
mov ds,ax
mov ax,0xb800
mov es,ax
mov si,mmsg+0x7c00 ;mmsg只是这个程序段里mmsg的偏移量,org 0x7c00做的也就是这个
xor bx,bx
print:
mov al,[ss:si]
mov ah,0x0f
add si,1
cmp al,0x00
jz infi
mov [es:bx],ax
inc bx
inc bx
jmp print
infi:jmp near infi
mmsg:
db 'hello,world'
db 0x00
times 510-($-$$) db 0x00
db 0x55,0xaa
在.com程序通常会有org 100h,这是因为.com程序会强制加载到内存段偏移100h处,所以就要加个org 100h了