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

时间:2022-11-13 01:15:00
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   
 ;#########################################################


谢谢   

18 个解决方案

#1


为什么没人来回答,急啊

#2


汇编可以通过:
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


自己再写个调用的就可以了。

#4


楼上的大哥,用记事本吗?能介绍下流程吗?

#5


谢谢,我需要步骤啊,我不会玩汇编,但我目前有个Masm6.15,想用它来编译这个东东,请指点步骤

#6


晕,网络上的教程太多了。
实在不行,你直接把3#的代码直接拷到记事本。
存成test.asm
保存路径为你安装到masm615/bin下。
然后masm test.asm
    link test.obj

#7


引用 6 楼 pla_007 的回复:
晕,网络上的教程太多了。 
实在不行,你直接把3#的代码直接拷到记事本。 
存成test.asm 
保存路径为你安装到masm615/bin下。 
然后masm test.asm 
    link test.obj


好好好,试试去

#8


不用这么麻烦直接:ML TEST.ASM就直接可以汇编了.
如果需要列表文件:ML /Fl /sG TEST.ASM.

#9


这只是代码片段,需要补充完整,至少要有段定义。你想编译得到什么文件,做什么用?

#10


引用 9 楼 cnzdgs 的回复:
这只是代码片段,需要补充完整,至少要有段定义。你想编译得到什么文件,做什么用?

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

#11


估计得不到你想要的结果,除非找到与写这个代码的人的相同的平台和环境

#12


引用 11 楼 xtdumpling 的回复:
估计得不到你想要的结果,除非找到与写这个代码的人的相同的平台和环境

这样啊,那不是白费,哎,那你看这段代码的意义何在,它能做什么呢?
谢谢

#13


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

上面的代码只是几个函数,完整的程序需要有段定义、程序入口点,通常还要有输入/输出(例如取到结果后显示出来)。

#14


引用 8 楼 BAYNPU 的回复:
不用这么麻烦直接:ML TEST.ASM就直接可以汇编了. 
如果需要列表文件:ML /Fl /sG TEST.ASM.


对,直接地 ML 就可以了。

ML 是无敌的。无论床上还是桌面上……

#15


这个问题解决了没?这段代码根本就是不对的,

#16


试了,汇编没通过。

#17


 这个程序是干什么的?

#18


IO得不到

#1


为什么没人来回答,急啊

#2


汇编可以通过:
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


自己再写个调用的就可以了。

#4


楼上的大哥,用记事本吗?能介绍下流程吗?

#5


谢谢,我需要步骤啊,我不会玩汇编,但我目前有个Masm6.15,想用它来编译这个东东,请指点步骤

#6


晕,网络上的教程太多了。
实在不行,你直接把3#的代码直接拷到记事本。
存成test.asm
保存路径为你安装到masm615/bin下。
然后masm test.asm
    link test.obj

#7


引用 6 楼 pla_007 的回复:
晕,网络上的教程太多了。 
实在不行,你直接把3#的代码直接拷到记事本。 
存成test.asm 
保存路径为你安装到masm615/bin下。 
然后masm test.asm 
    link test.obj


好好好,试试去

#8


不用这么麻烦直接:ML TEST.ASM就直接可以汇编了.
如果需要列表文件:ML /Fl /sG TEST.ASM.

#9


这只是代码片段,需要补充完整,至少要有段定义。你想编译得到什么文件,做什么用?

#10


引用 9 楼 cnzdgs 的回复:
这只是代码片段,需要补充完整,至少要有段定义。你想编译得到什么文件,做什么用?

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

#11


估计得不到你想要的结果,除非找到与写这个代码的人的相同的平台和环境

#12


引用 11 楼 xtdumpling 的回复:
估计得不到你想要的结果,除非找到与写这个代码的人的相同的平台和环境

这样啊,那不是白费,哎,那你看这段代码的意义何在,它能做什么呢?
谢谢

#13


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

上面的代码只是几个函数,完整的程序需要有段定义、程序入口点,通常还要有输入/输出(例如取到结果后显示出来)。

#14


引用 8 楼 BAYNPU 的回复:
不用这么麻烦直接:ML TEST.ASM就直接可以汇编了. 
如果需要列表文件:ML /Fl /sG TEST.ASM.


对,直接地 ML 就可以了。

ML 是无敌的。无论床上还是桌面上……

#15


这个问题解决了没?这段代码根本就是不对的,

#16


试了,汇编没通过。

#17


 这个程序是干什么的?

#18


IO得不到