下面的**實現的功能是實時的顯示時間,顯示的效果就如同乙個電子時鐘,這個**來自於「網易雲課堂」講彙編的一位老師(從0開始,講的非常的好),這段**老師寫的太好了,貼在下面學習效仿一下:
assume cs:code, ds:data, ss:stack
data segment
db 128 dup(0)
data ends
stack segment stack
db 128 dup(0)
stack ends
code segment
time_style db 'yy/mm/dd hh:mm:ss', 0
time_cmos db 9,8,7,4,2,0
start:
mov ax, stack
mov ss, ax
mov sp, 128
call init_reg
call show_clock
mov ax, 4c00h
int 21h
;----------------------------
show_clock:
call show_time_style
showtime:
mov si, offset time_cmos
mov di, 160*10+30*2
mov cx, 6
showdate:
mov al, ds:[si]
out 70h, al
in al, 71h
mov ah, al
shr ah, 1
shr ah, 1
shr ah, 1
shr ah, 1
and al, 00001111b
add ah, 30h
add al, 30h
mov es:[di], ah
mov es:[di+2], al
inc si
add di, 6
loop showdate
jmp showtime
ret;----------------------------
init_reg:
mov bx, 0b800h
mov es, bx
mov bx, cs
mov ds, bx
ret;----------------------------
show_string:
push dx
push ds
push es
push si
push di
showstring:
mov dl, ds:[si]
cmp dl, 0
je showstringret
mov es:[di], dl
add di, 2
inc si
jmp showstring
showstringret:
pop di
pop si
pop es
pop ds
pop dx
ret;---------------------------
show_time_style:
mov si, offset time_style
mov di, 160*10+30*2
call show_string
retcode ends
end start
體會:這段**雖然初看起來有點繞,但是使用了模組化的思想,這裡已經體現出大型程式模組化的影子;同事在**跳轉時,注意是怎樣在上下文之間切換的,思考這種切換技巧。
實驗結果:
組合語言 實驗14 訪問CMOS RAM
是什麼?存放計算機開機必備的一些資料的硬體,由bios basic input output system 呼叫其資料。怎麼用?首先要理解埠的概念,在計算機中,與cpu可以訪問的資料的位置可以有一下三種 儲存器 暫存器 埠。而埠的另一端是晶元,即cpu通過埠與其他晶元相連。在這些晶元中,都有一組可供...
組合語言 實驗14 訪問CMOS RAM
程式設計,以 年 月 日 時 分 秒 的格式,顯示當前的日期 時間。assume cs code,ds data data segment db 2000 00 00 00 00 00 0 db 9,8,7,4,2,0 data ends code segment start mov ax,data...
組合語言 實驗14 訪問CMOS RAM
是什麼?存放計算機開機必備的一些資料的硬體,由bios basic input output system 呼叫其資料。怎麼用?首先要理解埠的概念,在計算機中,與cpu可以訪問的資料的位置可以有一下三種 儲存器 暫存器 埠。而埠的另一端是晶元,即cpu通過埠與其他晶元相連。在這些晶元中,都有一組可供...