C++Builder如何嵌入汇编语言?在线等待

blcr 2002-12-31 11:52:34
我用 C++Builder 做一个工控程序,其中要向一个端口发送数据,我嵌入了汇编程序
asm
{
mov dx, 026dH
mov al, led1 //这一句有错误。
xor al,0080H
out dx, al
}
其中026dH 为输出端口地址,led1为一个变量,该变量随时都有可能变化,存放我要向该端口送出的数。我如何处理? 很久没有用汇编了,忘记了,请帮帮忙!!!
...全文
9 点赞 收藏 12
写回复
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
bigwhiteshark 2003-01-11
2k
回复
blcr 2002-12-31
老兄
0x260这是一个固定地址,变化的是要向它送的数据。
回复
netsys2 2002-12-31


BYTE portNO = 0x260;

MyPort( &portNO);
回复
blcr 2002-12-31
老兄:
能详细点么?
回复
netsys2 2002-12-31
以指针方式存放即可,

MyPort(BYTE *portNO)
回复
maxying 2002-12-31
关注~~~
回复
bcbsoft 2002-12-31
这个贴子不应该放在 非技术区 !!
回复
blcr 2002-12-31
我是否将led1以数组的方式存放?
回复
netsys2 2002-12-31
我同事写的代码:

// 将16进制转换为字符串并加入空白间隔符,例如:输入0x12,0x34,0x56,输出"12 34 56 ")
// assic_str的长度应为:hex_len * 3 + 1
LPSTR _fastcall HexStrToCharStr2(BYTE *hex_array, LPSTR assic_str, int hex_len)
{
#pragma warn -8070 // 屏蔽无return警告
#pragma warn -8002 // 屏蔽嵌入汇编警告
__asm
{
MOV ESI,EAX // ESI = hex_array首地址
MOV EDI,ECX
PUSH EBX
ADD EDI,ECX
XOR EAX,EAX
ADD EDI,ECX // EDI = hex_len * 3
MOV EBX,ECX // EBX = hex_len
MOV [EDX + EDI],AL // 字符串末尾的'0'
__next2:
DEC EBX
MOVZX EAX,[ESI + EBX]
MOV ECX,EAX
AND AX,0x0F
SHR ECX,4
MOV AH,[EAX + ASCTABLE]
MOV AL,[ECX + ASCTABLE]
MOV [EDX + EDI - 3],AX
MOV EAX,' '
MOV [EDX + EDI - 1],AL
SUB EDI,3
JNZ __next2

MOV EAX,EDX // return = assic_str
POP EBX
}
#pragma warn +8002
}
#pragma warn +8070

回复
netsys2 2002-12-31
是你自己编写的PORT函数!
回复
blcr 2002-12-31
MyPort( &portNO,buf);

MyPort()是个什么东西???
回复
netsys2 2002-12-31
BYTE portNO = 0x260;
BYTE buf[100];
//Put you data in buf

MyPort( &portNO,buf);

回复
发动态
发帖子
茶馆
创建于2007-08-02

525

社区成员

C++ Builder 茶馆
申请成为版主
社区公告
暂无公告