- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在汇编中进行简单的乘法运算,但是由于某些原因,当标记了MUL函数时,我看不到寄存器会发生变化。
mov bx, 5
mov cx, 10
mul cx
最佳答案
这些称为指令,它们指定要由处理器执行的操作。 mov
是用于移动的助记符,而mul
是用于乘法的助记符。其他常见说明包括add
,sub
和div
。我相信您可以弄清楚这些指定的操作!
大多数指令采用两个参数。用技术术语来说,这些通常称为操作数。第一个(左侧)是目的地,第二个(右侧)是源。因此,在mov bx, 5
的情况下,这会将字面值5
移到目标寄存器bx
中。当然,这些参数的顺序很重要,因为您不能将寄存器bx
的内容移动到文字值5
中!mul
指令有点奇怪,因为它的某些操作数是隐式的。也就是说,它们没有明确指定为参数。对于mul
指令,目标操作数被硬编码为ax
寄存器。源操作数是您作为参数传递的一个:它可以是寄存器或内存位置。
因此,您可以想象mul cx
的意思是mul ax, cx
,但是您不会这样写,因为ax
目标寄存器是隐式的。
现在,mul
指令命令处理器将目标操作数与源操作数相乘,并将结果存储在目标中。在代码中,您可以想象mul cx
将转换为ax = ax * cx
。现在,您应该看到问题了:您尚未初始化ax
寄存器的内容,因此您要乘以10(这是您放置在cx
中的值)乘以ax
中剩下的任何垃圾。因此,结果毫无意义!
如果实际上您想做5 * 10,那么只需在代码中更改一个字符即可:
mov ax, 5 ; ax = 5
mov cx, 10 ; cx = 10
mul cx ; ax = ax * cx ; actually dx:ax = ax * cx
ax
中。
dx:ax
中。这是一个寄存器对,意味着结果的高位部分将存储在
dx
中,而结果的低位部分将存储在
ax
中。为什么会有这种额外的并发症?因为将两个16位值相乘可能会导致一个大于16位的值!在一对16位寄存器中返回全乘法结果允许
mul
指令返回32位结果。但是,当您只是在学习时,就不必为此担心。您可以忽略溢出的可能性,并从
ax
中提取结果的较低部分。 (但是请记住,无论是否要使用16位的
mul
都会覆盖
dx
。在386及更高版本上,您可以使用
imul ax, cx
真正执行
ax *= cx
而不会浪费时间编写
dx
。)
mov ax, 50
。或者让您的汇编器使用
mov ax, 5 * 10
为您完成此操作。但是就像我说的,我确定你已经知道了!
mul
文档以及其他几个站点。这些信息可能很复杂,但是通过一些努力,您应该能够提取所需的信息。您还可以在
x86标记
wiki中找到许多其他重要信息和链接。
mul
指令之后,您应该会看到
ax
和
dx
寄存器的内容发生变化。如果调试器显示了其中一个标志,则还将看到标志和指令指针发生变化。没有别的改变! (Intel的指令参考手册
entry for mul
没有列出对计算机体系结构状态的任何其他影响。)
关于assembly - assembly 中的MUL功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40893026/
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
我是一名优秀的程序员,十分优秀!