gpt4 book ai didi

转换帮助 : __asm__ __volatile__

转载 作者:太空狗 更新时间:2023-10-29 16:53:05 25 4
gpt4 key购买 nike

我想把C的outb函数移植到D上。

static __inline void outb (unsigned char value, unsigned short int port)
{
__asm__ __volatile__ ("outb %b0,%w1"
:
:
"a" (value),
"Nd" (port));
}

这是D版。

extern(C) 
{
void outb (ubyte value, ushort port)
{
// I couldn't figure out this part
}

}

这些是关于该主题的一些链接。

D 内联汇编器

http://dlang.org/iasm.html

GCC-Inline-Assembly-HOWTO

http://ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html

但是我不懂汇编语言,所以我需要一些帮助。任何帮助,将不胜感激。谢谢。

最佳答案

outb 指令只能调用为 outb %al, %dx,其中 %al 是值,%dx 是端口。

D 使用 x86 的 Intel 语法,而不是默认使用 AT&T 语法的 GNU 汇编程序。相应的 Intel 语法是 out dx, al,D 中的相应代码如下:

void outb (ubyte value, ushort port)
{
asm {
mov AL, value;
mov DX, port;
out DX, AL;
}
}

请注意,您根本不需要编写程序集,因为运行时有 core.bitop.outp执行相同指令的函数。

void outb (ubyte value, ushort port)
{
import core.bitop;
outp(port, value);
}

关于转换帮助 : __asm__ __volatile__,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8614721/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com