- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 x86 汇编中,大多数指令具有以下语法:
operation dest, source
例如,add
看起来像
add rax, 10 ; adds 10 to the rax register
但是像 mul
和 div
这样的助记符只有一个操作数 - source
- destination
被硬编码作为rax
。这迫使您在需要乘法或除法时设置并跟踪 rax 寄存器,如果您正在进行一系列乘法,这可能会变得很麻烦。
我假设存在与乘法和除法的硬件实现相关的技术原因。有吗?
最佳答案
mul
和div
的目标寄存器不是rax
,而是rdx:rax
。这是因为两条指令都返回两个结果; mul
返回双宽度结果,div
返回商和余数(在采用双宽度输入之后)。
x86 指令编码方案仅允许在旧指令中对两个操作数进行编码(div
和 mul
很旧,可以追溯到 8086)。只有一个操作数允许专用于另一操作数的位用作操作码的扩展,从而可以编码更多指令。由于 div
和 mul
指令使用得不太频繁,并且无论如何都必须对一个操作数进行硬编码,因此对第二个操作数进行硬编码被认为是一种很好的权衡。
这与辅助指令 cbw
、cwd
、cwde
、cdq
、cdqe
和 cqo
用于为 div
指令准备操作数。
请注意,后来引入了 imul
指令的其他形式,允许在单字(而不是双字)乘法的常见情况下使用两个 modr/m 操作数 (80386 ) 并乘以常数 (80186)。甚至后来,BMI2 引入了一种 VEX 编码的 mulx
指令,允许三个自由选择的操作数,其中一个源操作数可以是内存操作数。
关于assembly - 为什么 x86 mul 和 div 指令仅采用源操作数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72152783/
MUL CL CL 是 BYTE 大小,它等于 AX = AL * CL MUL BX BX 是 WORD 大小,它等于 DX:AX = AX * BX MUL EBX EBX 是 DWORD 大小,
我正在尝试学习 Tensor Flow,因此我遵循了 https://pythonprogramming.net/tensorflow-neural-network-session-machine-l
我的代码中有错误,我已经阅读了文档,但仍然错误,维度必须相等是什么意思?但实际上我已经在代码中添加了一些层 model.fit() 这是我的代码: # USAGE # python train_sim
假设我已经在汇编机中实现了所有ADD、AND、SHF、JUMP、BR、LDW、LDB(加载字加载字节...)......除了MUL(多个)指令。现在我想编写汇编代码来操作MUL指令,该指令接收存储在0
我正在为 ARMv7 处理器编写指令。我想知道为什么我不允许在 MUL 指令本身中有一个常量值?您可以使用 ADD 和 SUB 指令,为什么不使用 MUL? 干杯 最佳答案 如果您查看 instruc
我已经实现了Point3D结构: use std::ops; #[derive(Debug, PartialEq)] pub struct Point3D { pub x: f32,
这就是问题所在:在第二个 mul 时,溢出标志被设置为 1;乘法是一个简单的 120*(-6) = -720,它包含在 16 位中......我不明白为什么。 .model small
我有以下 assembly 线: ... MOV ECX, 0x36EE80 MOV EDX, 0x95217CB1 MUL EDX SHR EDX, 0x15 MOV DWORD PTR SS:[E
我正在使用一个 MySQL 查询,该查询对四个表执行三个表连接。其中两个连接位于一对 MUL key 上。第三个连接是在一对主键上。查询需要一整分钟才能获取 100 行。 我相信两对 MUL key
全部, 假设我有以下 mysql 表testtable: +----------+------------------------------+------+-----+---------+-----
我有一个现有的表,我通过一个脚本过夜填充该表,该脚本读取二进制格式文件并将其转换为通过管道传输到 mysql 的一系列 replace 语句。该脚本存在错误,并且对每个二进制文件循环两次,因此每个 r
我正在用 Rust 创建一个简单的矩阵结构,我正在尝试实现一些基本的运算符方法: use std::ops::Mul; struct Matrix { cols: i32, rows:
这个问题在这里已经有了答案: Automatically implement traits of enclosed type for Rust newtypes (tuple structs wit
这个问题在这里已经有了答案: x86 Multiplication with 3: IMUL vs SHL + ADD (1 个回答) 关闭 1 年前。 让我们考虑以下函数: #include u
我有一个时间索引的 DataFrame,其中只有一部分数据是有效的(出于某些“外部”原因)。 我已经为有效数据制作了一个时间索引的Series 1 和数据无效的 NaN,所以我可以使用这是我的 Dat
数据 1 import pandas as pd #data 01 df_products = pd.DataFrame([{'Product ID' : 4109,'Price' : 5.0,'Pr
我有这段代码,它使用了 PBC 库: element_t pk, pk_temp; element_init_G2(pk, pairing); element_init_G2(pk_temp, pai
我正在尝试对附加了单位的求解评估的输出进行舍入。 例如: solve(Eq(x, 22/7 * seconds), x)[0] 输出: 3.14285714285714*s 有没有办法在保留 s 的同
HLSL 的 mul( x, y) 的参数表示 here : 这么说 如果 x 是 vector ,则将其视为行 vector 。 如果 y 是 vector ,则将其视为列 vector 。 这是否
// main.rs #[derive(Clone, Copy)] struct A(f64, f64); impl Mul for A where f64: From, T: Cop
我是一名优秀的程序员,十分优秀!