gpt4 book ai didi

assembly - ASM 8086 没有分区的分区

转载 作者:行者123 更新时间:2023-12-04 02:35:37 26 4
gpt4 key购买 nike

我需要在 asm 8086 中编写一个类似 b=a/6 但没有 DIV 指令的程序。我知道如何使用 SAR,但只有 2,4,8,16...

mov ax,a
sar ax,1 ;//div a by 2
mov b,ax

我的问题是如何将其除以 6?

最佳答案

给出 another answer 的方法是一个简单的强力循环,对于较大的 a 值可能需要一段时间。这是一个使用较大块(像长除法问题一样工作)的版本,专门编码为将有符号数除以 6:

; signed divide by 6
mov ax,a
mov cx,1000h ; initial count of how many divisors into ax to check for
mov bx,6000h ; value of "divisor * cx"
xor dx,dx ; result
top:
cmp ax,bx
jl skip
; we can fit "cx" copies of the divisor into ax, so tally them
add dx,cx
sub ax,bx
; optionally can have a "jz done" here to break out of the loop
skip:
shr bx,1
shr cx,1
jnz top

; copy result into ax
mov ax,dx

如果需要除 6 以外的东西,需要调整初始的 cxbx 值。 cx 是保留第 14 位设置的除数的二次幂(因为第 15 位是符号位;对于无符号除法,您希望设置第 15 位)。 bx 是 2 的幂。如果 a 的初始值有限制,您可以调整初始 cxbx 值,但必须小心,因为如果它们太小,您将得到不正确的答案。

关于assembly - ASM 8086 没有分区的分区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62104319/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com