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

junsanrao 2009-05-18 04:52:40
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
;#########################################################


谢谢

...全文
1017 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
jp78070531 2012-02-22
  • 打赏
  • 举报
回复
IO得不到
znxllyuan 2011-02-14
  • 打赏
  • 举报
回复
这个程序是干什么的?
by1dk 2011-02-13
  • 打赏
  • 举报
回复
试了,汇编没通过。
lzjdlsl 2009-12-24
  • 打赏
  • 举报
回复
这个问题解决了没?这段代码根本就是不对的,
xtdumpling 2009-05-19
  • 打赏
  • 举报
回复
估计得不到你想要的结果,除非找到与写这个代码的人的相同的平台和环境
junsanrao 2009-05-19
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 cnzdgs 的回复:]
这只是代码片段,需要补充完整,至少要有段定义。你想编译得到什么文件,做什么用?
[/Quote]
你是说这不是完整的,我只有这么多了,就想看个运行的结果,因为有人告诉我这段代码可以得到CPU温度
所以我到这来请教高手,我用什么编译都不知道,更不用说想得到什么文件了,能不能教我怎么样得到结果,谢谢了
光宇广贞 2009-05-19
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 BAYNPU 的回复:]
不用这么麻烦直接:ML TEST.ASM就直接可以汇编了.
如果需要列表文件:ML /Fl /sG TEST.ASM.
[/Quote]

对,直接地 ML 就可以了。

ML 是无敌的。无论床上还是桌面上……
cnzdgs 2009-05-19
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 junsanrao 的回复:]
你是说这不是完整的,我只有这么多了,就想看个运行的结果,因为有人告诉我这段代码可以得到CPU温度
所以我到这来请教高手,我用什么编译都不知道,更不用说想得到什么文件了,能不能教我怎么样得到结果,谢谢了
[/Quote]
上面的代码只是几个函数,完整的程序需要有段定义、程序入口点,通常还要有输入/输出(例如取到结果后显示出来)。
junsanrao 2009-05-19
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 xtdumpling 的回复:]
估计得不到你想要的结果,除非找到与写这个代码的人的相同的平台和环境
[/Quote]
这样啊,那不是白费,哎,那你看这段代码的意义何在,它能做什么呢?
谢谢
cnzdgs 2009-05-18
  • 打赏
  • 举报
回复
这只是代码片段,需要补充完整,至少要有段定义。你想编译得到什么文件,做什么用?
BAYNPU 2009-05-18
  • 打赏
  • 举报
回复
不用这么麻烦直接:ML TEST.ASM就直接可以汇编了.
如果需要列表文件:ML /Fl /sG TEST.ASM.
junsanrao 2009-05-18
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 pla_007 的回复:]
晕,网络上的教程太多了。
实在不行,你直接把3#的代码直接拷到记事本。
存成test.asm
保存路径为你安装到masm615/bin下。
然后masm test.asm
link test.obj
[/Quote]

好好好,试试去
pla_007 2009-05-18
  • 打赏
  • 举报
回复
晕,网络上的教程太多了。
实在不行,你直接把3#的代码直接拷到记事本。
存成test.asm
保存路径为你安装到masm615/bin下。
然后masm test.asm
link test.obj
junsanrao 2009-05-18
  • 打赏
  • 举报
回复
谢谢,我需要步骤啊,我不会玩汇编,但我目前有个Masm6.15,想用它来编译这个东东,请指点步骤
junsanrao 2009-05-18
  • 打赏
  • 举报
回复
楼上的大哥,用记事本吗?能介绍下流程吗?
pla_007 2009-05-18
  • 打赏
  • 举报
回复
自己再写个调用的就可以了。
BAYNPU 2009-05-18
  • 打赏
  • 举报
回复
汇编可以通过:
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



junsanrao 2009-05-18
  • 打赏
  • 举报
回复
为什么没人来回答,急啊

21,500

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧