Win32汇编如何读取端口数据
mov dx,2eh + 30h ;2eh是端口地址,30h是偏移地址
in ax,dx
这段代码老是出错,IN指令读取出错,为什么???
问题点数:0、回复次数:4Top
1 楼allonhoo()回复于 2003-12-03 15:02:10 得分 0
编译能通过,运行出错,不用IN指令的话就没问题。Top
2 楼haowh(一个人走在黑黑的夜)回复于 2003-12-03 16:40:24 得分 0
给你提供一个参考
// Function
// ReadCMOS - read CMOS register
//
// Input
// reg number of register (0 to 0x7f) to read
//
// Remarks
// Reads a byte of the CMOS RAM. The RTC registers are in the CMOS
// RAM.
//
// Returns
// Returns the value of the specified register.
//
BYTE ReadCMOS(BYTE reg)
{
BYTE r;
_asm {
pushfd
cli
mov al, reg
or al, 80h
out 70h, al
jmp _1
}
_1:
_asm jmp _2
_2:
_asm {
in al, 71h
mov r, al
jmp _3
}
_3:
_asm jmp _4
_4:
_asm {
xor al, al
out 70h, al
popfd
}
return r;
}
// Function
// WriteCMOS - write a CMOS RAM location
//
// Input
// reg CMOS register to write
// value Value to write to register
//
// Remarks
// Writes a CMOS RAM location. The RTC registers are in the CMOS
// RAM.
//
VOID WriteCMOS(BYTE reg, BYTE value)
{
_asm {
pushfd
cli
mov al, reg
or al, 80h
out 70h, al
jmp _1
}
_1:
_asm jmp _2
_2:
_asm {
mov al, value
out 71h, al
jmp _3
}
_3:
_asm jmp _4
_4:
_asm {
xor al, al
out 70h, al
popfd
}
}
Top
3 楼zkhj(学习.Net中......)回复于 2003-12-03 16:49:46 得分 0
应该用INT 21h吗,用DOS中断功能调用才对。Top
4 楼ytfr()回复于 2003-12-03 18:52:07 得分 0
看你运行在什么平台上了
WIN2K以上不能用in读取断口Top




