实现一个最简单的boot

1.汇编语言实现,汇编和链接器分别为as86和ld86。代码如下:

.globl begtext,begdata,begbss,endtext,enddata,endbss
.text
begtext:
.data
begdata:
.bss
begbss:
.text
BOOTSEG=0x7c0
entry start
start:
	jmpi go,BOOTSEG

go:
	mov ax,cs
	mov ds,ax
	mov es,ax

	mov ax,#0x0600
	mov cx,#0x0000
	mov dx,#0xFFFF
	int 0x10

	mov cx,#20
	mov dx,#0x0000
	mov bx,#0x000c
	mov bp,#msg1
	mov ax,#0x1301
	int 0x10
loop0:jmp loop0

msg1:
	.ascii "Loading system..."
	.byte 13,10
.org 510
	.word 0xAA55
.text
endtext:
.data
enddata:
.bss
endbss:


BOOTSEG=0x7c00

entry start

start:

jmpi go,BOOTSEG

go:

entry start告诉编译器程序入口是start,我们这段是引导代码,引导代码在引导盘的指定位置处,BIOS会读取引导盘的第一个扇区到内存0x7c00:0x00处。

注意:程序运行在实模式下面,寻址方式段*16+偏移,要想在0x7c00初开始执行,要设BOOTSEG=0x7c0,而不是0x7c00。

jmpi go,BOOTSEG是跳转到0x7c00:go处执行,前面我们说到BIOS会读取引导扇区到内存的0x7c00处,而jmpi 这条语句使得引导程序从0x7c00开始执行,也就是说,开始执行我们当前的引导区程序。

mov ax,#0x0600

mov cx,#0x0000

mov dx,#0xFFFF

int 0x10

这段代码调用BIOS的0x10中断,功能是清屏。

mov cx,#20

mov dx,#0x0000

mov bx,#0x000c

mov bp,#msg1

mov ax,#0x1301

int 0x10

上面代码调用BIOS的0x10中断,显示字符串msg1

.org 510 

.word 0xAA55

启动扇区标志

2.编译调试boot.s程序。

前边说过使用as86汇编器和ld86链接器,使用bochs模拟器,bochs支持虚拟的软盘和硬盘,因为软盘简单一些,所以我们把程序编译后放到软盘上即可启动了。

(1)编译boot.s

as86 -0 -a -o boot.o boot.s

(2)连接boot.o

ld86 -0 -s -o boot boot.o

(3)制作虚拟软盘

dd bs=32 if=boot of=boot.img skip=1

因为boot前32字节是文件头,所以要跳过不写,把后边所有的内容写进boot.img,至此boot.img就是做好的可启动虚拟软盘了

3.运行调试

创建bochsrc.txt,输入bochs命令即可调试boot程序

4.linux的dd命令详解

dd [option]

语法:

 if=输入文件[STDIN] 

 of=输出文件[STDOUT]

 ibs=bytes 一次读取bytes字节

 skip=blocks,跳过输入文件开头的ibs*blocks块

 seek=bytes,跳过输出文件bytes*blocks块

 obs=bytes,一次写入bytes字节

 bs=bytes,等于同时设置obs和ibs

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
首先,需要在 `application.properties` 文件中设置支持的语言和默认语言: ``` spring.messages.basename=messages spring.mvc.locale=zh_CN spring.mvc.locale-resolver=fixed ``` 接着,在 `src/main/resources` 目录下创建 `messages.properties` 和 `messages_zh_CN.properties` 两个文件,分别对应默认语言和中文语言的翻译文本。 例如,`messages.properties` 中可以设置如下的键值对: ``` greeting=Hello, world! ``` 而 `messages_zh_CN.properties` 中可以设置如下的键值对: ``` greeting=你好,世界! ``` 然后,在 Spring Boot 应用程序中可以使用 `MessageSource` 实现国际化。 首先,需要在配置类中添加 `MessageSource`: ```java @Configuration public class AppConfig { @Bean public MessageSource messageSource() { ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource(); messageSource.setBasename("classpath:messages"); messageSource.setDefaultEncoding("UTF-8"); return messageSource; } } ``` 然后,在控制器中使用 `MessageSource` 获取翻译文本: ```java @Controller public class GreetingController { private final MessageSource messageSource; public GreetingController(MessageSource messageSource) { this.messageSource = messageSource; } @GetMapping("/") public String greeting(Model model, Locale locale) { String greeting = messageSource.getMessage("greeting", null, locale); model.addAttribute("greeting", greeting); return "greeting"; } } ``` 最后,在视图模板中使用 `th:text` 显示翻译文本: ```html <!DOCTYPE html> <html lang="en" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>Greeting</title> </head> <body> <h1 th:text="${greeting}"></h1> </body> </html> ``` 当浏览器设置为中文时,应用程序会自动使用中文翻译文本来显示问候语。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值