rust - 什么是正确的 Rust 内联汇编格式?
问题描述
如何让新的内联汇编格式与 rust 一起使用?我想要一个调用 outb 的函数。
unsafe fn outb(value: u8, port: u16) {
asm!(
"outb {0}, {1}",
in(reg_byte) value,
in(reg_abcd) port,
);
}
这是几乎生成代码的唯一版本。有错误消息是:
error: invalid operand for instruction
|
29 | "outb {0}, {1}",
| ^
|
note: instantiated into assembly here
--> <inline asm>:2:2
|
2 | outb dil, rax
| ^
解决方案
首先,您使用的是 AT&T 语法,但新的asm!
默认值是 Intel 的。您仍然可以使用 AT&T,但必须添加options(att_syntax)
.
然后,看看如何使用该指令。您需要解决OUT DX, AL
(outb %al, %dx
在 AT&T 中),不允许使用其他这些大小的寄存器。
所以你根本不能使用注册类:
asm!(
"outb %al, %dx",
in("dx") port,
in("al") value,
options(att_syntax)
);
或者在英特尔语法中:
asm!(
"out dx, al",
in("dx") port,
in("al") value,
);
推荐阅读
- java - 更新 Kotlin 后主要活动未启动
- button - Xamarin Forms Transalted 按钮单击
- common-lisp - Stack Overflow on lisp 更改列表中的 2 个元素
- google-cloud-dataflow - 在流式传输管道中使用谷歌云发布/订阅服务有什么好处
- html - Angular Material Stepper:设置活动页眉的样式
- c# - 如何使用 C# 可靠地读取串行端口的 CTS 和 DSR 状态
- c++ - 从专用模板类型继承的类的 Swig 包装器导致缺少方法
- python - 设备运动数据上的 sklearn 分类器
- javascript - HERE MAPS 中的 UI 控件 ZOOM 类
- reactjs - 使用 JEST/Enzyme React 测试重新渲染嵌套组件失败