0xb8000 显示器可以换行输出字符

127 篇文章 0 订阅
61 篇文章 0 订阅
#include"gdt.h"


//screen only here size
#define screen_width 80
#define screen_height 25



extern "C" void print_char(u8 x,u8 y,char c){
	
	//wait x,y outcome ,then output str[i] !!!
	//very important algorithm processs!!!
	//0xb8000内存地址是显示器地址,往这里写数据就直接能够输出到屏幕上
	static u16 *monitor_io_memory=(u16 *)0xb8000;
	u32 idx = y*screen_width+x;
	//using '&' not '|' ,otherwise blink letters!!!
	monitor_io_memory[idx] = (monitor_io_memory[idx]&0xFF00)|c;
}

extern "C" void clear_screen(){
	//rows
	for(u8 y=0;y<screen_height;y++){
		//cols
		for(u8 x=0;x<screen_width;x++){
			print_char(x,y,'\0');
		}
	}
}

extern "C"
void printf(char *str){


	
	
	//y-->rows,x-->cols
	static u8 x=0,y=0;
	
	//写入字符串,取或0xff00的意思是我们需要把屏幕高四位拉低,
	//否则就是黑色的字体,黑色的字体黑色的屏幕是啥也看不到的
	for(int i=0;str[i]!='\0';++i){
		//fistly check letter
		switch(str[i]){
			case '\n':
				y++;//checkout rows not output!!!
				x=0;
				break;
			default:
				//firstly,check pos
				if(x>=screen_width){
					y++;
					x=0;			
				}
				if(y>=screen_height){
					clear_screen();	
					x=0;
					y=0;
				}
				//wait x,y outcome ,then output str[i] !!!
				//very important algorithm processs!!!	
				print_char(x,y,str[i]);
				x++;
				
		}
		
			
		
		
	}
}

//操作系统构造函数委托方法
typedef void(*constructor)();
//全局定义构造委托
constructor start_ctors;
//全局定义析构委托
constructor end_ctors;
 
//轮询函数,并且执行
extern "C" void system_constructors(){
	for(constructor* i=&start_ctors;i!=&end_ctors;i+=1){
		(*i)();
	}
}

extern "C"
void kernel_main(void *multiboot_structure,unsigned int magicnumber){

	printf("Hello world\n");
	printf("C++ Operating System\n");
	printf("End");
	
	GlobalDescriptorTable gdt;
	
	//for(;;){
	//	printf("C++ Operating System");
	//}
	
	for(;;);// jmp here for ever	

}


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答1: Python语句`print(0xA 0xB)`的输出结果是23。 这是因为0xA和0xB都是十六进制数字,分别对应十进制的10和11。在Python中,空格被视为运算符,所以这个语句实际上等价于`print(0xA + 0xB)`,即10 + 11,结果为23。 ### 回答2: Python语句print(0xA 0xB)的输出结果是:SyntaxError: invalid syntax。 在Python中,0xA和0xB分别表示十六进制的10和11。然而,在这个语句中两个十六进制数之间缺少了运算符。正确的语法应该是print(0xA + 0xB),即两个十六进制数相加并输出结果。 而在该语句中,解释器会检测到错误的语法,因为两个十六进制数之间没有运算符连接。因此,会抛出SyntaxError异常,提示语法无效。 正确的语句应该是print(0xA + 0xB),它的输出结果是21。 ### 回答3: Python语句print(0xA 0xB)的输出结果是: 在 Python 中,0xA 表示十六进制数 A,其十进制等价值为 10。0xB 表示十六进制数 B,其十进制等价值为 11。当这两个十六进制数连在一起,并用空格隔开时,在该语句中将被视为两个不同的数字。 如果我们运行这个语句,Python 解释器会检测到语法错误。这是因为在两个数字之间缺少了运算符,例如加号 (+) 或减号 (-)。 所以,这个语句 print(0xA 0xB) 并不能执行运算,也无法输出任何结果。相反,它会引发一个 SyntaxError 异常,并指示该语句中存在语法错误。 为了使这个语句正常工作并输出结果,我们可以在两个十六进制数之间添加一个运算符,例如加号 (+)。修正后的语句可以写作 print(0xA + 0xB)。这个语句将会输出结果 21。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值