- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 8085 处理器上,一种将 BCD 除以 2 的高效算法在将 BCD 转换为二进制表示时会派上用场。您可能会想到递归减法或乘以 0.5,但是这些算法需要冗长的算术运算。
因此,我想与您分享以下代码(在 8085 汇编程序中),它可以更有效地完成此操作。该代码已在 GNUSim8085 和 ASM80 仿真器上进行了全面测试。如果此代码对您有帮助,请与我分享您的经验。
在运行代码之前,将 BCD 放入寄存器 A。如果要从更高有效字节(值 50)接收余数,则设置进位标志。执行后,寄存器 A 将包含结果。进位标志用于将余数(如果有)传递到下一个较低有效字节。
该算法在以非常特殊的方式处理 C 和 Acflags后使用 DAA 指令,因此考虑到传递到下一个半字节(即半八位字节)的任何余数都值 5 而不是 8。
;Division of BCD by 2 on an 8085 processor
;Set initial values.
;Register A contains a two-digit BCD. Carry flag contains remainder.
stc
cmc
mvi a, 85H
;Do modified decimal adjust before division.
cmc
cma
rar
adc a
cma
daa
cmc
;Divide by 2.
rar
;Save quotient and remainder to registers B and C.
mov b, a
mvi a, 00H
rar
mov c, a
;Continue working on decimal adjust.
mov a, b
sui 33H
mov b, a
mov a, c
ral
mov a, b
hlt
最佳答案
假设一个两位数的 BCD 码表示为:
D7D6D5D4 D3D2D1D0对于除以 2,对于二进制(或十六进制),只需将数字右移一位即可。如果有溢出则余数为 1,否则为 0。当 D 4 为 0 时,同样的事情适用于两位数(8 位)BCD 数,即没有从高阶四位开始的有效位移。现在,如果 D 4 为 1(在移位之前),则移位将在低四位中引入 8 (1000),这显然会危及此过程。请注意,在 BCD 中,位移位应该引入 10/2 = 5 而不是 16/2 = 8。因此我们可以通过从较低的四位减去 8-5 = 3 来简单地进行调整,即从整个数字中减去 03H。下面的代码总结了这个策略。我们假设累加器保存数据,除法后结果保存在累加器中,余数保存在寄存器B中。
MVI B,00H ; remainder = 0 STC CMC ; clear the carry flag RAR ; right shift the data JNC SKIP INR B ; CY=1 so, remainder = 1SKIP: MOV D,A ; backup ANI 08H ; if get D3 after the shift (or D4 before the shift) MOV A,D ; get the data from backup JZ FIN ; if D4 before the shift was 0 SUI 03H ; adjustment for the shiftFIN: HLT ; A has the result, B has the remainder
关于division - 如何在 8085 处理器上将 BCD 除以 2?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33817123/
考虑以下 Python 2 代码 from timeit import default_timer def floor(): for _ in xrange(10**7): 1
每当我运行此代码时,我都会在下面提到的行中得到零除错误。同样,当列表不是用户输入时,也不会发生该错误。错误如何出现,我该如何解决? n=int(input("Dimension of the coef
Find a regular expression which represents strings made of {a, b}, where number of a's is divisible
我有一些测试套件中的MXL文件,其中第一个度量表示除法为8(即每四分音符8个单位)。 措施4是3/4的时间,其余时间如下: 24 1 我希望在这里看到。由于24除以8等于
我需要在不使用 %、/ 或 * 的情况下判断一个数字是否能被 3 整除。给出的提示是使用atoi()函数。知道该怎么做吗? 最佳答案 当应用“将所有数字相加,看看是否能除以 3”时,当前答案都集中在十
这个问题已经有答案了: Division of integers returns 0 (2 个回答) 已关闭去年。 我的目标是在 Presto 0.212 中二除两个整数,e。 G。 1/2。天真的方
这个问题已经有答案了: Division of integers returns 0 (2 个回答) 已关闭去年。 我的目标是在 Presto 0.212 中二除两个整数,e。 G。 1/2。天真的方
我正在尝试将十进制数转换为十六进制,内置的十六进制函数限制为 8 个字符,因此我不得不编写自己的函数,但是 VBScript 似乎将数字四舍五入到小数点后两位。 例如。 106681252129194
也许这是在这里问的错误问题,但我很好奇。我知道许多语言在被要求除以 0 时只会爆炸并失败,但是是否有任何编程语言可以智能地处理这个不可能的总和 - 如果是这样,它们会做什么?他们是继续处理,将 350
机器以一元形式取2个自然数(a, b)作为输入,输出整数商和整数除法的余数a/b。 磁带上的初始和最终状态是什么?功能图会是什么样子? 提前致谢。 最佳答案 此处使用的设计如下: 从表示 a 的磁带部
我想检查一个浮点值是否“接近”32 的倍数。例如64.1“几乎”可以被 32 整除,63.9 也是如此。 现在我正在这样做: #define NEARLY_DIVISIBLE 0.1f float o
我正在尝试将间隔*[a,b]*除以保存在浮点变量数组中的*npt*点。 我需要 *a* 和 *b* 始终出现在最终数组中,并且 *npt* 可以根据我的需要进行变化。 我尝试过: delta = (b
这个问题在这里已经有了答案: My computer thinks that signed int is smaller then -1? [duplicate] (3 个答案) sizeof()
在 C 中,如果我想将 int 除以 2,x%2应该像 (x%10)% 2 一样快 因为一个好的编译器只会看最后一点。但是在具有无限精度算术的语言中呢? 特别是,在 Haskell 中会更快(或者它们
哪个版本更快?x * 0.5 or x / 2 前段时间我在大学里有一门叫做计算机系统的类(class)。从那时起,我记得可以使用相对“简单”的逻辑门来实现两个值的乘法,但除法不是“ native ”
我正在尝试为 bignum 实现长除法。不幸的是,由于嵌入式编程的限制,我无法使用像 GMP 这样的库。此外,我想要学习如何实现它的智力练习。到目前为止,我已经使用任意长度的字节数组完成了加法和乘法(
由于许多 Project Euler 问题需要您多次进行可分性检查,因此我一直试图在 ZX81 中找出执行此任务的最快方法。基本的。 到目前为止,我已经比较过 (N/D)至 INT(N/D)检查,是否
运行代码后,我收到一个ZeroDivisionError!有人可以解释发生了什么吗?寻找bscore和gscore输入的平均值 bscore = 0 gscore = 0 bcount = 0 gco
我正在尝试用 Javascript 创建一个逻辑开关。目的是创建一个 Javascript 函数,该函数可用于触发按钮单击事件并打开或关闭特定的日历源。当您第一次单击按钮时,它应该加载日历提要,当第二
我正在尝试为bignums 实现长除法。不幸的是,由于嵌入式编程的限制,我无法使用像 GMP 这样的库。此外,我想要学习如何实现它的智力练习。到目前为止,我已经使用任意长度的字节数组完成了加法和乘法(
我是一名优秀的程序员,十分优秀!