找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1847|回复: 0
打印 上一主题 下一主题
收起左侧

计算机操作系统启动引导程序显示系统时间基于虚拟机汇编程序

[复制链接]
跳转到指定楼层
楼主
本帖最后由 lanlanlanlanlan 于 2020-3-3 16:50 编辑

如题 一个汇编语言写的计算机启动引导程序
基于虚拟机 启动BIOS 后显示系统时间

单片机源程序如下:
  1.                 org 07c00h ; 告诉编译器程序加载到7c00处

  2.                 mov ax, cs

  3.                 mov ds, ax

  4.                 mov es, ax
  5.                
  6.                 mov ax, BootMessage   ;调用固定显示的字符串内容
  7.                
  8.                 mov dx, 0
  9.                
  10.                 mov cx, 15     ; 字符串长度长度 对应输入的内容

  11.                 call DispStr   ; 开始调用外部程序  调用显示字符串例程  
  12.                
  13.                 call TimeDisp  ; 系统时间显示
  14.                
  15.                 call Keyboard   ; 接受 键盘指令程序

  16.                 jmp [        DISCUZ_CODE_1        ]nbsp;         ; 用于主程序暂停      
  17.                        ; 以上是基本的启动引导程序

  18. DispStr:              ;显示字符子程序

  19.                 mov bp, ax     ; ES:BP = 串地址  BP堆栈指针寄存器

  20.                 mov ax, 01301h ; AH = 13 代表写字符串,  AL = 01h 游标形态

  21.                 mov bx, 000ch
  22.                
  23.                 int 10h        ; 显示服务

  24.                 ret            ;子程序返回
  25.                

  26. NumDis:                ;数字显示子程序

  27.                 mov bh, al    ;  AL 装的为显示内容第一步 都是放入堆栈指针 高八位

  28.                 AND AL, 0F0H    ;与运算 清除低4位
  29.                
  30.                 shr al, 4      ;右移位数 0补足 留下
  31.                
  32.                 OR  AL, 30H   ;
  33.                
  34.                 mov bl, 0fh
  35.                
  36.                 int 10h      ;
  37.                
  38.                 mov al, bh  
  39.                
  40.                 AND AL, 0FH   
  41.                
  42.                 OR  AL, 30H
  43.                
  44.                 mov bl, 0fh   
  45.                
  46.                 int 10h     
  47.                
  48.                 ret

  49.         
  50. TimeDisp:

  51.                 mov ah, 04h    ;读取实时时钟日期
  52.                
  53.                 int 1ah         ;执行中断 获取日期
  54.                
  55.                 mov ah, 0eh  
  56.                
  57.                 mov al, ch
  58.                
  59.                 call NumDis      ;显示century
  60.                
  61.                 mov al, cl      ;cl 年
  62.                
  63.                 call NumDis     ; disp 显示年
  64.                
  65.                 mov al, 2fh     ;2fh 代表/
  66.                
  67.                 int 10h         ; 显示 "/" 分隔符
  68.                
  69.                 mov al, dh      ; dh 月份
  70.                
  71.                 call NumDis     ; 显示月份
  72.                
  73.                 mov al, 2fh
  74.                
  75.                 int 10h         ; 显示 "/" 分隔符
  76.                
  77.                 mov al, dl       ;dl 天
  78.                
  79.                 call NumDis     ; disp 显示天
  80.                
  81.                 mov al, 20h     ;空格
  82.                
  83.                 int 10h         ; 显示空格
  84.                
  85.                        
  86.                                            ;开始显示时间

  87.                 mov ah, 02h   ;设定游标位置
  88.                
  89.                 int 1ah       ;时钟服务
  90.                
  91.                 mov ah, 0eh   ;读取实时钟
  92.                
  93.                 mov al, ch      ; ch存储时间
  94.                
  95.                 call NumDis      ;显示al中的时间
  96.                
  97.                 mov al, 3ah     ;
  98.                
  99.                 int 10h         ; disp ":"
  100.                
  101.                 mov al, cl      ;cl存储分
  102.                
  103.                 call NumDis     ; 显示分
  104.                  
  105.                 ret             ;时间显示完毕 退出
  106.                


  107. Namedisp:      

  108.                 mov ax, MyName  
  109.                
  110.                 mov dx, 0100h   

  111.                 mov cx, 6   ; 分对应我的名字长度
  112.                
  113.                 call DispStr  ;调用字符显示

  114.                 ret
  115.                
  116.                
  117. Keyboard:             ;键盘通信

  118.                 mov ah, 00h     ;读取字符
  119.                
  120.                 int 16h   ;键盘服中断
  121.                
  122.                 cmp al, 0Dh   
  123.                
  124.                 je Namedisp  
  125.                
  126.                 jmp Keyboard   


  127. BootMessage: db "System Time is:" ; 开机后显示的字符串内容
  128. MyName: db "xxx xx"

  129. times  510-($-$) db 0 ; 填充剩下的空间,使生成的二进制代码恰好为512字节

  130. dw  0xaa55             ; 结束标志
复制代码

所有资料51hei提供下载:
system_time.rar (1.83 KB, 下载次数: 9)




评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表