当前位置: 代码迷 >> 汇编语言 >> 如何用Masm6.15来编译以下这个程序(用过Masm6.15的进)
  详细解决方案

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

热度:6399   发布时间:2013-02-26 00:00:00.0
怎么用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 ;数据端口