;--------------------------------------------------------------------------------------
; Project: info.asm
; Name: zwp
; Date: 2014/5
;--------------------------------------------------------------------------------------
data segment
thirty db 30 ; value for mul instruction
msg0 db '-----------------------HeBei University of Enginging------------------------!'
msg1 db '----------------------- COMPUTER SCIENCE 2013-5 -----------------------------!'
msg2 db '-----------------------------------------------------------------------------!'
msg3 db '----- I LOVE YOU !'
msg4 db '----------------------I LOVE YOU !'
msg5 db '----------------------------------------I LOVE YOU !'
msg6 db '------------------- Believe Yourself Your Will Cool--------------------------!'
msg7 db 'One day I meet you !'
msg8 db 'I am very happy, because I found a beautiful gril !'
msg9 db 'Yes I am sure I like you! !'
errmsg db 'No You don't like me, I ....... !'
data ends
stack segment
db 256 dup(0)
tos label word
stack ends
code segment
main proc far
assume cs:code, ds:data, ss:stack
start:
mov ax, stack
mov ss, ax
mov sp, offset tos ; 设置堆栈
push ds
sub ax, ax
push ax
mov ax, data
mov ds, ax ; 设置数据段
begin:
mov ah, 1
int 21h ; call bios 21h 1 function
sub al, '0'
jc error ; if <0 goto error
cmp al, 9
ja error ; if (0, 9)‘s character is true
mov bx, offset msg0 ; point first message
mul thirty ; ax = al * 30
add bx, ax
call display ; show message
jmp begin
;------------------------------------------------------------------
; if error will be executed
;-------------------------------------------------------------------
error:
mov bx, offset errmsg ; bx = errmsg's offset address
call display
ret
;--------------------------------------------------------------------
; display character
;---------------------------------------------------------------------
display proc near
mov cx, 30
disp1:
mov dl, [bx]
call dispchar ; show char
inc bx
loop disp1 ; cx--
mov dl, 0dh ; 回车
call dispchar
mov dl, 0ah ; 换行
call dispchar
ret
display endp
dispchar proc near
mov ah, 2
int 21h ; show char
ret
dispchar endp
main endp
code ends
end start
写在前面:
读了几本操作系统的书籍,发现一个不足,(估计也不算不足)那就是大多数讲操作系统原理的书,只涵盖操作系统--这一软件层面的解释,像I/O, 内存管理,进程/线程管理,文件系统,网络(有些只是稍微略带一点介绍)等等。
向设备驱动,BIOS,内核层面涉及的很少,具体的话就更是少之又少,估计和硬件联系的太紧密,所以难度大一些吧!
往具体了看其实一个系统(软件 + 硬件)它们是密不可分的,只要越往底层走越明显。太紧密了。前些天翻了下模电发现(运算放大)涵盖了模电很大一部分,最令我感觉模电 “吊炸天”的是 加法器,减法器,乘法器,除法器,积分,微分,指数....都可以在模电中实现,大家都知道(CPU中 + - * /)都是用加法实现的(具体可参看数电加法器一节)。。。越来越发现自己要学的太多了,没办法奋斗吧——少年!
进入正题:
8042 Keyboard Microcontroller
具体细节请参阅 8042的数据手册,我就不一一细说了。
来段汇编代码:
本文提供了一个使用8042键盘微控制器的汇编语言示例代码,通过该代码可以了解如何利用8042进行基本的输入处理。文中还探讨了操作系统与硬件之间的紧密联系。
864

被折叠的 条评论
为什么被折叠?



