会汇编当然最好
硬件控制可以直接用C语言
#include <stdio.h>
extern void swi_handler(void);
/*中断处理子程序*/
void do_swi(int num)
{
/*
switch (num)
{
case 0x1: ...
case 0x2: ...
}
*/
printf("%d helloworld\n", num);
}
//swi_handler
void install_swi_handler(void (*fun)(void))
{
unsigned int cmd;
//1.构造一条跳转指令
*((unsigned int *)0x38) = (unsigned int)fun;
cmd = 0xe59ff028;
//2.把此指令机器码放到0x8地址
*((unsigned int *)0x8) = cmd;
}
int main(void)
{
int i = 0;
install_swi_handler(swi_handler);
for (i = 0; i < 10; i++) {
if (i == 3) {
__asm
{
swi 0x123
}
}
else
printf("aa\n");
}
return 0;
}
追问比如mov dx,1234h
mov ax,080h
out dx,ax上面的代码用c语言怎么实现?可以给出示例代码吗?谢谢。
追答sfr dx = 0x80;
sfr ax = 0x90;
dx= 0x1234;
ax= 0x80;
dx= ax;
想要直接操作特殊寄存器,需要知道寄存器地址。我上面是以单片机寄存器访问方式给的示例。
C语言嵌入汇编也很常见的