關於x86 assemby 的問題... |
尚未結案
|
badcmos
一般會員 發表:1 回覆:2 積分:0 註冊:2004-10-01 發送簡訊給我 |
Please write a program (C or assembly) to get CMOS data ( form CMOS data offset 0 to CMOS data offset 127).The CMOS INDEX port is 70h,and the DATA port is 71h.For example,
mov AL, 0
out 70h, AL
in AL, 71h
Then you get the offset 0 data in CMOS data area.
Note:
1. In assembly code, because the value of AL is ASCII code,you must transfer it to a visiable HEX.
2. Please list the result as following example:
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
-----------------------------------------------
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
07 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
3.Because some values are variable, please updata the data per 1 or 2 seconds in the screen.
以上是題目…下面是我的做法.但我一直找不出來我哪裡做錯了><
.model small
.stack 64
code segment
assume cs:code,ds:code
org 100h
mov bl,0
start: mov al,bl
out 70H,al ;從al暫存器的位元組資料輸出至70h位址
in al,71H ;從71h埠位址讀取位元組資料至al暫存器
next:
mov cl,4 ;將 4 存於 CL
mov dl,al ;將 AL 之內容存於 DL 中以方便印出
shr dl,cl ;把 DL 較高之 4 位元變成 DL 中較低之 4 位元
call print ;呼叫副程式
mov dl,al ;將 AL 之值存入 DL
and dl,0fh ;取得 DL 之較低的 4 個位元
call print ;呼叫副程式
call cr_lf ;印出歸位及換行字元
mov ah,2 ;此行及以下兩行印出空白
mov dl,' '
int 21h
;---------------------------------------
ADD bl, 1
CMP bl, 128
JNE start
mov ax,4c00h
int 21h
;---------------------------------------
print proc near
add dl,30h ;加上 30H
cmp dl,39h ;比較看看是否超過 39H
jbe ok ;沒超過直接印出
add dl,7 ;若超過再加上 7
ok: mov ah,2
int 21h ;印出
ret
print endp
;---------------------------------------
cr_lf proc near
mov ah,2
mov dl,00h ;歸位字元
call ok
mov dl,00h ;換行字元
call ok
ret
cr_lf endp
code ends
end start 發表人 - badcmos 於 2004/10/01 15:59:34
|
badcmos
一般會員 發表:1 回覆:2 積分:0 註冊:2004-10-01 發送簡訊給我 |
正確執行結果:
這個程式的答案不會是00,01,02,03,...這種有順序的值,甚至有些值是隨著時間而改變的
CMOS offset 00h 的值代表"秒",如果你的程式正確的話,每次都會讀到不同的時間秒數,和系統的時間"秒"一樣才對
CMOS offset 02h 的值代表"分",如果你的程式正確的話,讀到的值應該和系統的時間"分"一樣才對 我的問題:
我執行後這個程式00h與02h是有變動,但是沒有跟系統時間一致
這也是我困擾的地方 ><
00h的執行結果是固定的跳躍00 11 22 33 ...
而02h也是如此~但是跳躍的時間久久一次 文有點長,請各位多多包涵
多謝~多謝
|
H君
一般會員 發表:0 回覆:1 積分:0 註冊:2004-12-30 發送簡訊給我 |
|
badcmos
一般會員 發表:1 回覆:2 積分:0 註冊:2004-10-01 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |