标题:
计算机操作系统启动引导程序显示系统时间基于虚拟机汇编程序
[打印本页]
作者:
lanlanlanlanlan
时间:
2020-3-3 16:00
标题:
计算机操作系统启动引导程序显示系统时间基于虚拟机汇编程序
本帖最后由 lanlanlanlanlan 于 2020-3-3 16:50 编辑
如题 一个汇编语言写的计算机启动引导程序
基于虚拟机 启动BIOS 后显示系统时间
单片机源程序如下:
org 07c00h ; 告诉编译器程序加载到7c00处
mov ax, cs
mov ds, ax
mov es, ax
mov ax, BootMessage ;调用固定显示的字符串内容
mov dx, 0
mov cx, 15 ; 字符串长度长度 对应输入的内容
call DispStr ; 开始调用外部程序 调用显示字符串例程
call TimeDisp ; 系统时间显示
call Keyboard ; 接受 键盘指令程序
jmp [ DISCUZ_CODE_1 ]nbsp; ; 用于主程序暂停
; 以上是基本的启动引导程序
DispStr: ;显示字符子程序
mov bp, ax ; ES:BP = 串地址 BP堆栈指针寄存器
mov ax, 01301h ; AH = 13 代表写字符串, AL = 01h 游标形态
mov bx, 000ch
int 10h ; 显示服务
ret ;子程序返回
NumDis: ;数字显示子程序
mov bh, al ; AL 装的为显示内容第一步 都是放入堆栈指针 高八位
AND AL, 0F0H ;与运算 清除低4位
shr al, 4 ;右移位数 0补足 留下
OR AL, 30H ;
mov bl, 0fh
int 10h ;
mov al, bh
AND AL, 0FH
OR AL, 30H
mov bl, 0fh
int 10h
ret
TimeDisp:
mov ah, 04h ;读取实时时钟日期
int 1ah ;执行中断 获取日期
mov ah, 0eh
mov al, ch
call NumDis ;显示century
mov al, cl ;cl 年
call NumDis ; disp 显示年
mov al, 2fh ;2fh 代表/
int 10h ; 显示 "/" 分隔符
mov al, dh ; dh 月份
call NumDis ; 显示月份
mov al, 2fh
int 10h ; 显示 "/" 分隔符
mov al, dl ;dl 天
call NumDis ; disp 显示天
mov al, 20h ;空格
int 10h ; 显示空格
;开始显示时间
mov ah, 02h ;设定游标位置
int 1ah ;时钟服务
mov ah, 0eh ;读取实时钟
mov al, ch ; ch存储时间
call NumDis ;显示al中的时间
mov al, 3ah ;
int 10h ; disp ":"
mov al, cl ;cl存储分
call NumDis ; 显示分
ret ;时间显示完毕 退出
Namedisp:
mov ax, MyName
mov dx, 0100h
mov cx, 6 ; 分对应我的名字长度
call DispStr ;调用字符显示
ret
Keyboard: ;键盘通信
mov ah, 00h ;读取字符
int 16h ;键盘服中断
cmp al, 0Dh
je Namedisp
jmp Keyboard
BootMessage: db "System Time is:" ; 开机后显示的字符串内容
MyName: db "xxx xx"
times 510-($-$) db 0 ; 填充剩下的空间,使生成的二进制代码恰好为512字节
dw 0xaa55 ; 结束标志
复制代码
51hei.png
(6.27 KB, 下载次数: 94)
下载附件
2020-3-3 16:19 上传
所有资料51hei提供下载:
system_time.rar
(1.83 KB, 下载次数: 9)
2020-3-3 15:59 上传
点击文件名下载附件
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1