《30天自制操作系统》 第三天


程序:

本次的程序,汇编语言:

; haribote-os
; TAB=4

		ORG		0xc200			; 这个程序将要被装载到内存的什么地方呢?

		MOV		AL,0x13			; VGA显卡,320x200x8位彩色
		MOV		AH,0x00
		INT		0x10
fin:
		HLT                                     ; 让cpu停止,等待指令
		JMP		fin                     ; 无限循环

说明:

设定AH=0x00后,调用显卡BIOS的函数,这样就可以切换显示模式了。我们还可以在支持
网页(AT)BIOS里看看。
设置显卡模式(video mode)
AH=0x00;
AL=模式:(省略了一些不重要的画面模式)
0x03:16色字符模式,80 × 25
0x12:VGA 图形模式,640 × 480 × 4位彩色模式,独特的4面存储模式
0x13:VGA 图形模式,320 × 200 × 8位彩色模式,调色板模式
0x6a:扩展VGA 图形模式,800 × 600 × 4位彩色模式,独特的4面存储模式
(有的显卡不支持这个模式)
返回值:无
参照以上说明,我们暂且选择0x13画面模式,因为8位彩色模式可以使用256种颜色,这一点
看来不错。
如果画面模式切换正常,画面应该会变为一片漆黑。也就是说,因为可以看到画面的变化,
所以能判断程序是否运行正常。由于变成了图形模式,因此光标会消失。

指令:

ORG指令:这个指令会告诉nask,在开始执行的时候,把这些机器语言指令装载到内存中的哪个地址


INT软件中断指令。这里面可以先把它看作一个函数调用。这次调用的是0x10(即16)号函数,它的功能是控制显卡。


注:

cpu中的16位寄存器

AX——accumulator,累加寄存器
CX——counter,计数寄存器
DX——data,数据寄存器
BX——base,基址寄存器
SP——stack pointer,栈指针寄存器
BP——base pointer,基址指针寄存器
SI——source index,源变址寄存器
DI——destination index,目的变址寄存器


CPU中有8个8位寄存器。
AL——累加寄存器低位(accumulator low)
CL——计数寄存器低位(counter low)
DL——数据寄存器低位(data low)
BL——基址寄存器低位(base low)
AH——累加寄存器高位(accumulator high)
CH——计数寄存器高位(counter high)
DH——数据寄存器高位(data high)
BH——基址寄存器高位(base high)


CPU中段寄存器,16位寄存器

ES——附加段寄存器(extra segment)
CS——代码段寄存器(code segment)
SS——栈段寄存器(stack segment)
DS——数据段寄存器(data segment)
FS——没有名称(segment part 2)
GS——没有名称(segment part 3)


cpu中32位寄存器,16位寄存器的名字前面加上一个E就是32位寄存器的名字了

EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值