📄 cpumsr.asm
字号:
.MODEL SMALL
.386p
;============================================================================
.CODE ;Code segment
ORG 100h
Begin:
jmp Entry
;----------------------------------------------------------------------------
;prefix0 equ ' '
prefix0 equ '.'
cpuinfo db '>>>>>> Intel CPU MSR information <<<<<<',0dh,0ah,0dh,0ah,0dh,0ah,'$'
bq_m db 'bq2040 Regeisters:',0dh,0ah
f01_m db 'RemainingCapacityAlarm.......$'
f01_d db '?????mAh',0dh,0ah
f02_m db 'RemainingTimeAlarm...........$'
f02_d db '?????minutes',0dh,0ah
f03_m db 'BatteryMode..................$'
f03_d db '????h {"CPUID" 69xh=>Banias;6Dxh=>Dothan}',0dh,0ah,0dh,0ah,'$'
f04_d db '????????h{Freq_ID}',0dh,0ah,0dh,0ah,'$'
f05_d db '????????h {"PLATFORM_ID(EDX)" bit[26:25]:L2 Cache Size;00b=>1M/B,2M/D;01b=>512K/ B,1M/D;10b=>512K/B,1M/D}',0dh,0ah,0dh,0ah,'$'
f06_d db '????????h {"PLATFORM_ID(EAX)" bit[26:25]:L2 Cache Size;00b=>1M/B,2M/D;01b=>512K/ B,1M/D;10b=>512K/B,1M/D}',0dh,0ah,0dh,0ah,'$'
inbuff dword 255 DUP(0)
myarray dword 50 dup(?)
byterd dword ?
f07_d db 'input the msr address (must key_in 4 byte):',0dh, 0ah, 0dh, 0ah,'$'
comment %
f04_m db 'AtRate.......................$'
f04_d db '?????mA',0dh,0ah
f05_m db 'AtRateTimeToFull.............$'
f05_d db '?????minutes',0dh,0ah
f06_m db 'AtRateTimeToEmpty............$'
f06_d db '?????minutes',0dh,0ah
%
Entry:
;=>CPU information.
mov ah, 09h
lea dx, cpuinfo
int 21h
;=>CPU ID.
mov eax, 1
DB 00Fh, 0A2h
mov dx, ax
mov al, dh
lea di, f03_d
call Hex2ascii
mov al, dl
lea di, f03_d+2
call Hex2ascii
mov ah, 09h
lea dx, f03_d
int 21h
;=>Platform ID.
mov ah, 09h
lea dx, f07_d
int 21h
mov ah, 3fh
mov bx, 0
mov cx, 255
mov dx, offset inbuff
int 21h
mov eax, inbuff
and eax, 0000ffffh
push ax
shr al, 4
cmp al, 3h
je three_al
four_al:
pop ax
and al, 0fh
add al, 9h
jmp forah
three_al:
pop ax
and al, 0fh
forah:
push ax
shr ah,4
cmp ah, 3h
je three_ah
four_ah:
pop ax
and ah, 0fh
add ah, 9h
jmp next
three_ah:
pop ax
and ah, 0fh
next:
shl ah, 4
or ah,al
shr ax, 8
rol al, 4
mov ebx,eax
mov eax, inbuff
shr eax, 16
cmp ax, 0a0dh
je keep_doing
push ax
shr al, 4
cmp al, 3h
je three_al2
four_al2:
pop ax
and al, 0fh
add al, 9h
jmp forah2
three_al2:
pop ax
and al, 0fh
forah2:
push ax
shr ah,4
cmp ah, 3h
je three_ah2
four_ah2:
pop ax
and ah, 0fh
add ah, 9h
jmp next2
three_ah2:
pop ax
and ah, 0fh
next2:
shl ah, 4
or ah,al
shr ax, 8
rol al, 4
shl eax, 8
or eax, ebx
rol ax, 8
jmp after_do
keep_doing:
mov eax, ebx
after_do:
mov edx, eax
mov ecx, eax
DB 00Fh, 032h
push eax
mov al, dh
lea di, f05_d+4
call Hex2ascii
mov al, dl
lea di, f05_d+6
call Hex2ascii
shr edx, 16
mov al, dh
lea di, f05_d
call Hex2ascii
mov al, dl
lea di, f05_d+2
call Hex2ascii
mov ah, 09h
lea dx, f05_d
int 21h
pop eax
mov edx, eax
mov al, dh
lea di, f06_d+4
call Hex2ascii
mov al, dl
lea di, f06_d+6
call Hex2ascii
shr edx, 16
mov al, dh
lea di, f06_d
call Hex2ascii
mov al, dl
lea di, f06_d+2
call Hex2ascii
mov ah, 09h
lea dx, f06_d
int 21h
mov ah, 4Ch
int 21h
jmp $
Hex2ascii proc ; Entry:al=Hex, Return:[di]..[di+1]=ASCII
pusha
mov ah, 0
mov cl, 10h
div cl ; ax / cl = al ... ah
add al, '0'
cmp al, '9'
jna @f
add al, 07h
@@:
stosb
add ah, '0'
cmp ah, '9'
jna @f
add ah, 07h
@@:
xchg ah, al
stosb
popa
ret
Hex2ascii endp
END Begin
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -