首页 > 代码库 > 启动程序实现很简单的功能在屏幕中央 ;打印一行字符串(汇编+c+red hat linux实现)
启动程序实现很简单的功能在屏幕中央 ;打印一行字符串(汇编+c+red hat linux实现)
编程:启动程序实现很简单的功能在屏幕中央 ;打印一行字符串(汇编+c+red hat linux实现)
汇编语言编写:
boot.asm启动程序代码:
;我们的启动程序实现很简单的功能在屏幕中央
;打印一行字符串
org 07c00h ;org指令明确告诉编译器我程序开始地址是07c00h,而不是
;原来的00000
;int汇编指令 int 10h
mov ax,cs
mov es,ax
mov bp,msgstr ;es:bp ;指向的内容就是我们要显示的
字符串的地址
mov cx,12 ;字符串长度
mov dh,12 ;显示的行号
mov dl,36 ;显示的列号
mov bh,0 ;显示的页数
mov al,1 ;显示的是串结构
mov bl,0ch ;显示字符属性 黑底红字
mov ah,13h ;明确调用13h子程序
msgstr: db "hello my osi"
int 10h
times 210-($-$$) db 0 ;重复N次每次填充值为0
dw 55aah
jmp $ ;不断跳转到当前位置是个死循环。注:$是当前地址。
汇编运行环境图例:
虚拟机系统:red hat linux运行环境下编写c语言代码实现:
将自己已经编译好的汇编boot.asm启动程序载入虚拟机中,在虚拟机中写入c语言代码实现boot.bin的512B启动程序拷贝。
#include<stdio.h>
#include<fcnt1.h>
#include<sys/types.h>
#include<sys/stat.h>
int main(int argc,char *argv[])
{
int fd_source;
int fd_dest;
int read_count = 0;
char buffer[512]={0};
fd_source=open("boot.bin",0_RDONLY);
if(fd_source<0)
{
perror("open boot.bin error:");
return 0;
}
fd_dest=ope("virtual_floppy.vfd",0_RWONLY);
while ((read_count=read(fd_source,buffer,512))>0)
{
write(fd_dest,buffer,read_count);
memset(buffer,0,512);
}
printf("write image ok!");
return 0;
}
操作步骤图例:
第一步:将我们在汇编写好的空白boot启动镜像加载
接下来,我们在输入此命令准备写入c语言代码
第二步:我们有了c语言基础,那么我们开始将512B的boot.bin的启动程序开始进行拷贝
第三步:好了,我们已经将boot.bin写好了
用winImage启动下我们编写好的程序。
作者注明:刚学习汇编,请大牛勿喷!!!
本文出自 “努力奋斗,互相提高” 博客,请务必保留此出处http://c10086.blog.51cto.com/6433044/1414030