Assembly 在换档分割装配后舍入整数

Assembly 在换档分割装配后舍入整数,assembly,x86,nasm,Assembly,X86,Nasm,我需要能够在移位除法后对整数进行四舍五入,并且不能使用mul或div指令 例如: eax = 745 shr eax, 3 这应该给我值93,因为它截断了余数。但是假设浮点值是749,使用shr指令仍然会给我值93,即使它通常会四舍五入到94(学校评分) 我该如何着手处理这个问题 我能用的除法和乘法就是shr/shl 被移出的部分是剩余部分。要实现正确的舍入,您只需要它的最后一位,它将保留在CF中: shr-eax,3;除以8,最后移位的位在CF中 adc-eax,0;如果CF=1,则ea

我需要能够在移位除法后对整数进行四舍五入,并且不能使用
mul
div
指令

例如:

eax = 745

shr  eax, 3
这应该给我值93,因为它截断了余数。但是假设浮点值是749,使用
shr
指令仍然会给我值93,即使它通常会四舍五入到94(学校评分)

我该如何着手处理这个问题


我能用的除法和乘法就是
shr
/
shl

被移出的部分是剩余部分。要实现正确的舍入,您只需要它的最后一位,它将保留在CF中:

shr-eax,3;除以8,最后移位的位在CF中
adc-eax,0;如果CF=1,则eax将增加1
它是如何工作的?除以移位时,余数包含在移出的位中:

745=$2e9=001011101001
749=$2ed=001011101
右移时,最低的3位将被移出。请注意,只有最后移位的位将保留在CF中(由“^”表示),并且它是余数的最高位:

001011101001 shl 3=0000 0101101 | 001=05d | 1=93,其余1(0英寸CF)
^
00101110101 shl 3=0000 01011101 | 101=05d | 5=93,其余5(1英寸CF)
^
对于所有可能的余数(0..111),最高位为0的余数为000、001、010和011(0..3),较高位为1的余数为100、101、110和111(4..7)


因此,只对第二个示例进行取整

所有这一切将完成的是舍入的赔率,而不是平等,它不是检查其余的,看看是否值高于。49@BKreger-不,它会正常旋转。我将编辑答案以清除解释。@BKreger该答案已编辑,并附有一些解释。