首页 > 解决方案 > NASM 汇编器浮点加法

问题描述

我正在我的大学学习计算机体系结构课程,我们目前正在编写与 C 链接的 NASM 代码。我们的任务是编写32 位 IEEE-754 加法,即 2.0 + 0.1 = 2.1。要求是我们不能使用浮点寄存器和运算符,除了MOVD和xmm0、xmm1。

我们只有一些步骤作为我们应该如何编码的提示,仅此而已。我在挣扎,希望有人能解释我从哪里开始。

据我所知,我们在 xmm0 中获取第一个参数,然后将其移至通用寄存器,例如:

MOVD eax, xmm0

之后,我们应该使用移位运算符(shl,shr)将我们的数字分为符号、指数和尾数。我被困在这一步。之后,我们必须比较我们的符号、尾数并进行 IEEE-754 加法。理论上我知道它是如何工作的,但不知道如何编码。

非常感谢您的帮助!

编辑:所以我想我已经迈出了第一步 - 将它分成三部分。

 ;Mantissa, getting it out of xmm0 and saving in r10d 
MOVD eax, xmm0
shl eax, 9 
mov r10d, eax

;Exponent, savin it in r9d
MOVD eax, xmm0
shr eax,23
shl eax,24
mov r9d, eax

;Sign, saving it in r8d
MOVD eax, xmm0
shr eax,31
shl eax,31
mov r8d, eax

标签: assemblyfloating-pointnasmadditionieee-754

解决方案


推荐阅读