Hello,world! x86版本
程序主要用到BIOS中断,关于BIOS中断大体就是用寄存器做参数,中断号是功能。编译过程
>nasm boot.asm –o boot.bin
; boot.asm
;%define bootloader ;如果是MBR定义这行宏
%ifdef bootloader
%define org_start 7c00h
%else
%define org_start 0100h
%endif
boot:
org org_start ;告诉编译器,以后的代码从org_start算偏移地址;
mov ax,cs ;让ds es都为cs内容;
mov ds,ax ;11行cx的[]可以正确得到地址的内容;
mov es,ax ;10行bp es:bp指向正确的串地址;
call print ;打印hello ;
jmp $ ;死循环 ;
print:
mov bp,str_hello ;ES:BP = 串地址,基地址指针
mov cx,[str_hello_size] ;CX = 串长度
mov ax,01301h ;AH = 13, AL = 01h
mov bx,000ch ;BH页号 BL 黑底红字(BL = 0Ch)
mov dx,0000h ;DH行 DL列
int 10h ;10h号中断 BIOS调用
ret
str_hello:
db "Hello,world!"
str_hello_size:
db $-str_hello
fill:
times 510-($-$$) db 0 ;填充剩余空间
dw 0xaa55 ;MBR标志