首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

如何用Masm6.15来编译以下这个程序(用过Masm6.15的进)

2012-03-17 
怎么用Masm6.15来编译以下这个程序(用过Masm6.15的进)PMU_SCequ6Ch命令端口PMU_DATAequ68h数据端口RD_EC

怎么用Masm6.15来编译以下这个程序(用过Masm6.15的进)
PMU_SC equ 6Ch ;命令端口  
 PMU_DATA equ 68h ;数据端口  
 RD_EC_SMI equ 80h ;读寄存器命令  
 POLLING_DATA equ 0E7h ;CPU温度寄存器号  
 看上面的定义,PMU寄存器读取的步骤是这样的:  
 1.等待输入缓冲器空,即PMU将上一条命令处理完毕;  
 1.将命令(RD_EC_SMI)写入命令端口(PMU_SC);  
 2.等待输入缓冲器空,即PMU将命令(RD_EC_SMI)处理完毕;  
 3.将要访问的寄存器号(POLLING_DATA)写入数据端口(PMU_DATA);  
 4.等待输出缓冲器满,即PMU将从寄存器(POLLING_DATA)读出的数据放到输出缓冲器;  
 5.将数据从数据端口(PMU_DATA)读出。  
 (说明,这里的输入输出缓冲是指的PMU的缓冲。)  
 这样,就完成了一次读操作,写操作和其类似。  
   
 具体代码如下:  
 ;AL-----CPU Temperature  
 GetCPUTempe proc  
  pusha  
  pushf  
  cli  
  mov dx,PMU_SC  
  mov al,RD_EC_SMI  
  call pmuWait4IBE ;Must have 输入缓冲为空吗,为空可以放命令了
  out dx,al // 将读寄存器命令放到命令端口中。
   
  mov dx,PMU_DATA  
  mov al,POLLING_DATA  
  call pmuWait4IBE ;Must have 输入缓冲为空吗,为空可以放命令了
  out dx,al // 将CPU温度寄存器号 放到数据端口中
   
  mov dx,PMU_DATA  
  call pmuWait4OBF ;Must have 输出缓冲为满吗? 有数据则可以读了
  in al,dx ;从数据端口中读入数据  
  sti  
  popf  
  popa  
 GetCPUTempe endp  
 ;#########################################################  
 pmuWait4IBE proc  
  PUSH AX  
  PW4IBE:  
  IN AL, 06CH ; Read PMU status  
  TEST AL, 2 ; Is Input Buffer Empty?  
  JNZ PW4IBE ; Jmp if no  
  POP AX  
  ret  
 pmuWait4IBE endp;END OF PMUWAIT4IBE  
 ;#########################################################  
 pmuWait4OBF proc  
  PUSH AX  
  PW4OBF:  
  IN AL, 06CH ; Read PMU status  
  TEST AL, 1 ; Is Output Buffer Full?  
  JZ PW4OBF ; Jmp if no  
  POP AX  
  ret  
 pmuWait4OBF endp;END OF PMUWAIT4OBF  
 ;#########################################################


谢谢  



[解决办法]
汇编可以通过:
data segment 
PMU_SC equ 6Ch ;命令端口
PMU_DATA equ 68h ;数据端口


RD_EC_SMI equ 80h ;读寄存器命令
POLLING_DATA equ 0E7h ;CPU温度寄存器号
data ends 
code segment 
assume cs:code,ds:data 
start: 
GetCPUTempe proc
pushf
cli
mov dx,PMU_SC
mov al,RD_EC_SMI
call pmuWait4IBE ;Must have 输入缓冲为空吗,为空可以放命令了 
out dx,al ; 将读寄存器命令放到命令端口中。 
mov dx,PMU_DATA
mov al,POLLING_DATA
call pmuWait4IBE ;Must have 输入缓冲为空吗,为空可以放命令了 
out dx,al ;将CPU温度寄存器号 放到数据端口中 
mov dx,PMU_DATA
call pmuWait4OBF ;Must have 输出缓冲为满吗? 有数据则可以读了 
in al,dx ;从数据端口中读入数据
sti
popf
GetCPUTempe endp
;#########################################################
pmuWait4IBE proc
PUSH AX
PW4IBE:
IN AL, 06CH ; Read PMU status
TEST AL, 2 ; Is Input Buffer Empty?
JNZ PW4IBE ; Jmp if no
POP AX
ret
pmuWait4IBE endp;END OF PMUWAIT4IBE
;#########################################################
pmuWait4OBF proc
PUSH AX
PW4OBF:
IN AL, 06CH ; Read PMU status
TEST AL, 1 ; Is Output Buffer Full?
JZ PW4OBF ; Jmp if no
POP AX
ret
pmuWait4OBF endp;END OF PMUWAIT4OBF
mov ah,4ch 
int 21h 
code ends 
end start




[解决办法]
自己再写个调用的就可以了。
[解决办法]
晕,网络上的教程太多了。
实在不行,你直接把3#的代码直接拷到记事本。
存成test.asm
保存路径为你安装到masm615/bin下。
然后masm test.asm
link test.obj
[解决办法]
不用这么麻烦直接:ML TEST.ASM就直接可以汇编了.
如果需要列表文件:ML /Fl /sG TEST.ASM.
[解决办法]
这只是代码片段,需要补充完整,至少要有段定义。你想编译得到什么文件,做什么用?
[解决办法]
估计得不到你想要的结果,除非找到与写这个代码的人的相同的平台和环境
[解决办法]

探讨
你是说这不是完整的,我只有这么多了,就想看个运行的结果,因为有人告诉我这段代码可以得到CPU温度
所以我到这来请教高手,我用什么编译都不知道,更不用说想得到什么文件了,能不能教我怎么样得到结果,谢谢了

[解决办法]
探讨
不用这么麻烦直接:ML TEST.ASM就直接可以汇编了.
如果需要列表文件:ML /Fl /sG TEST.ASM.

热点排行