assembly - 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