找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2267|回復: 0
打印 上一主題 下一主題
收起左側(cè)

計算機操作系統(tǒng)啟動引導程序顯示系統(tǒng)時間基于虛擬機匯編程序

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:698534 發(fā)表于 2020-3-3 16:00 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
本帖最后由 lanlanlanlanlan 于 2020-3-3 16:50 編輯

如題 一個匯編語言寫的計算機啟動引導程序
基于虛擬機 啟動BIOS 后顯示系統(tǒng)時間

單片機源程序如下:
  1.                 org 07c00h ; 告訴編譯器程序加載到7c00處

  2.                 mov ax, cs

  3.                 mov ds, ax

  4.                 mov es, ax
  5.                
  6.                 mov ax, BootMessage   ;調(diào)用固定顯示的字符串內(nèi)容
  7.                
  8.                 mov dx, 0
  9.                
  10.                 mov cx, 15     ; 字符串長度長度 對應輸入的內(nèi)容

  11.                 call DispStr   ; 開始調(diào)用外部程序  調(diào)用顯示字符串例程  
  12.                
  13.                 call TimeDisp  ; 系統(tǒng)時間顯示
  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 游標形態(tài)

  21.                 mov bx, 000ch
  22.                
  23.                 int 10h        ; 顯示服務

  24.                 ret            ;子程序返回
  25.                

  26. NumDis:                ;數(shù)字顯示子程序

  27.                 mov bh, al    ;  AL 裝的為顯示內(nèi)容第一步 都是放入堆棧指針 高八位

  28.                 AND AL, 0F0H    ;與運算 清除低4位
  29.                
  30.                 shr al, 4      ;右移位數(shù) 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         ;執(zhí)行中斷 獲取日期
  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  ;調(diào)用字符顯示

  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:" ; 開機后顯示的字符串內(nèi)容
  128. MyName: db "xxx xx"

  129. times  510-($-$) db 0 ; 填充剩下的空間,使生成的二進制代碼恰好為512字節(jié)

  130. dw  0xaa55             ; 結(jié)束標志
復制代碼

所有資料51hei提供下載:
system_time.rar (1.83 KB, 下載次數(shù): 9)




評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表