一小段汇编代码请教

adadad111   2010-6-28 18:42 楼主
我的目的是改变端口中某一位的输出状态

代码如下:
inp(int addr)

{

unsigned char al;

__asm

{

push edx

mov edx, DWORD PTR addr

in al, dx       

and eax, 0xff

pop edx

}

return al;

}

outp(int addr, unsigned char val)
{
        __asm
        {
                push edx
                mov edx, DWORD PTR addr
                mov al, BYTE PTR val
                out dx, al
                pop edx
        }

}

然后应用上面的读取和输出函数进行位操作

1、
unsigned int val = inp(a_porta0);
outp(a_porta0, val | (1 << 1));//端口bit1操作
2:
unsigned int val = inp(a_porta0);
outp(a_porta0, val | (1 << 2));//端口bit2操作

现在有一个问题,当我将bit1置高位(5V),保持bit1不变;
接着改变bit2的电平,发现当改变bit2电平时,bit1的高位没有了,变成低位(0V)

我测试过屏蔽上面的inp函数,以为是位与造成的,结果没变化;
应该是outp(a_porta0, val | (1 << 1));//端口bit1操作
outp(a_porta0, val | (1 << 2));//端口bit2操作
操作出的问题;

我想要的是,当我改变端口中某位的输出时,其他保持不变,不要改了bit2,bit1没了;由于汇编不懂,请高手指点,无限感谢。

回复评论 (3)

我也是刚开始学习C,对好多不知道,望以后多指教
点赞  2010-6-28 18:45
在线等 麻烦高手帮下忙 一档解决马上给分
点赞  2010-6-28 19:00
int al; ---------这个名字能不能换一个.....我有些担心.......
点赞  2010-6-29 16:46
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复