本帖最后由 lanlanlanlanlan 于 2020-3-3 16:50 編輯
如題 一個匯編語言寫的計算機啟動引導程序
基于虛擬機 啟動BIOS 后顯示系統(tǒng)時間
單片機源程序如下:
- org 07c00h ; 告訴編譯器程序加載到7c00處
- mov ax, cs
- mov ds, ax
- mov es, ax
-
- mov ax, BootMessage ;調(diào)用固定顯示的字符串內(nèi)容
-
- mov dx, 0
-
- mov cx, 15 ; 字符串長度長度 對應輸入的內(nèi)容
- call DispStr ; 開始調(diào)用外部程序 調(diào)用顯示字符串例程
-
- call TimeDisp ; 系統(tǒng)時間顯示
-
- call Keyboard ; 接受 鍵盤指令程序
- jmp [ DISCUZ_CODE_1 ]nbsp; ; 用于主程序暫停
- ; 以上是基本的啟動引導程序
- DispStr: ;顯示字符子程序
- mov bp, ax ; ES:BP = 串地址 BP堆棧指針寄存器
- mov ax, 01301h ; AH = 13 代表寫字符串, AL = 01h 游標形態(tài)
- mov bx, 000ch
-
- int 10h ; 顯示服務
- ret ;子程序返回
-
- NumDis: ;數(shù)字顯示子程序
- mov bh, al ; AL 裝的為顯示內(nèi)容第一步 都是放入堆棧指針 高八位
- AND AL, 0F0H ;與運算 清除低4位
-
- shr al, 4 ;右移位數(shù) 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 ;執(zhí)行中斷 獲取日期
-
- 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 ;調(diào)用字符顯示
- ret
-
-
- Keyboard: ;鍵盤通信
- mov ah, 00h ;讀取字符
-
- int 16h ;鍵盤服中斷
-
- cmp al, 0Dh
-
- je Namedisp
-
- jmp Keyboard
- BootMessage: db "System Time is:" ; 開機后顯示的字符串內(nèi)容
- MyName: db "xxx xx"
- times 510-($-$) db 0 ; 填充剩下的空間,使生成的二進制代碼恰好為512字節(jié)
- dw 0xaa55 ; 結(jié)束標志
復制代碼
51hei.png (6.27 KB, 下載次數(shù): 94)
下載附件
2020-3-3 16:19 上傳
所有資料51hei提供下載:
system_time.rar
(1.83 KB, 下載次數(shù): 9)
2020-3-3 15:59 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|