找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 2324|回復(fù): 0
收起左側(cè)

計(jì)算機(jī)操作系統(tǒng)啟動(dòng)引導(dǎo)程序顯示系統(tǒng)時(shí)間基于虛擬機(jī)匯編程序

[復(fù)制鏈接]
ID:698534 發(fā)表于 2020-3-3 16:00 | 顯示全部樓層 |閱讀模式
本帖最后由 lanlanlanlanlan 于 2020-3-3 16:50 編輯

如題 一個(gè)匯編語(yǔ)言寫(xiě)的計(jì)算機(jī)啟動(dòng)引導(dǎo)程序
基于虛擬機(jī) 啟動(dòng)BIOS 后顯示系統(tǒng)時(shí)間

單片機(jī)源程序如下:
  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     ; 字符串長(zhǎng)度長(zhǎng)度 對(duì)應(yīng)輸入的內(nèi)容

  11.                 call DispStr   ; 開(kāi)始調(diào)用外部程序  調(diào)用顯示字符串例程  
  12.                
  13.                 call TimeDisp  ; 系統(tǒng)時(shí)間顯示
  14.                
  15.                 call Keyboard   ; 接受 鍵盤(pán)指令程序

  16.                 jmp [        DISCUZ_CODE_1        ]nbsp;         ; 用于主程序暫停      
  17.                        ; 以上是基本的啟動(dòng)引導(dǎo)程序

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

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

  20.                 mov ax, 01301h ; AH = 13 代表寫(xiě)字符串,  AL = 01h 游標(biāo)形態(tài)

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

  24.                 ret            ;子程序返回
  25.                

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

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

  28.                 AND AL, 0F0H    ;與運(yùn)算 清除低4位
  29.                
  30.                 shr al, 4      ;右移位數(shù) 0補(bǔ)足 留下
  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    ;讀取實(shí)時(shí)時(shí)鐘日期
  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.                                            ;開(kāi)始顯示時(shí)間

  87.                 mov ah, 02h   ;設(shè)定游標(biāo)位置
  88.                
  89.                 int 1ah       ;時(shí)鐘服務(wù)
  90.                
  91.                 mov ah, 0eh   ;讀取實(shí)時(shí)鐘
  92.                
  93.                 mov al, ch      ; ch存儲(chǔ)時(shí)間
  94.                
  95.                 call NumDis      ;顯示al中的時(shí)間
  96.                
  97.                 mov al, 3ah     ;
  98.                
  99.                 int 10h         ; disp ":"
  100.                
  101.                 mov al, cl      ;cl存儲(chǔ)分
  102.                
  103.                 call NumDis     ; 顯示分
  104.                  
  105.                 ret             ;時(shí)間顯示完畢 退出
  106.                


  107. Namedisp:      

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

  111.                 mov cx, 6   ; 分對(duì)應(yīng)我的名字長(zhǎng)度
  112.                
  113.                 call DispStr  ;調(diào)用字符顯示

  114.                 ret
  115.                
  116.                
  117. Keyboard:             ;鍵盤(pán)通信

  118.                 mov ah, 00h     ;讀取字符
  119.                
  120.                 int 16h   ;鍵盤(pán)服中斷
  121.                
  122.                 cmp al, 0Dh   
  123.                
  124.                 je Namedisp  
  125.                
  126.                 jmp Keyboard   


  127. BootMessage: db "System Time is:" ; 開(kāi)機(jī)后顯示的字符串內(nèi)容
  128. MyName: db "xxx xx"

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

  130. dw  0xaa55             ; 結(jié)束標(biāo)志
復(fù)制代碼
51hei.png
所有資料51hei提供下載:
system_time.rar (1.83 KB, 下載次數(shù): 9)




評(píng)分

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

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

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

快速回復(fù) 返回頂部 返回列表