Talk:Intel BCD opcodes
Computing Unassessed | ||||||||||
|
Can anyone is able to tell why we only add (0110)bcd only in BCD addition??--220.225.33.97 (talk) 09:10, 21 July 2008 (UTC)--220.225.33.97 (talk) 09:10, 21 July 2008 (UTC)--220.225.33.97 (talk) 09:10, 21 July 2008 (UTC)manoj
- To make sure the result is valid BCD. For example, if you were to add 9 + 9 = 18, that would be 0000:1001 + 0000:1001 = 0001:0010, which would be wrong: 12. So 6 (16 - 10) is added: 0001:0010 + 0110 = 0001:1000, which equals 18, the correct result. Shinobu (talk) 09:53, 18 October 2008 (UTC)
Alternatives
From the article: "Therefore, even financial software today usually stores values in binary representation and only converts to decimal for input and output.", with a cited reference about X86 instruction sets, not financial software (unless I missed it in the linked to article). It is my understanding that in some countries, such as the USA, financial corporations like banks are required to use decimal based math for financial calculations. Mainframe instruction sets still fully support packed and unpacked decimal math, as well as programming languages like COBOL. Rcgldr (talk) 03:45, 15 September 2017 (UTC)
Generalization
Just as an idea: transfer this thread to "BCD instruction set" and add to the thread other CPUs, which support BCD calculations, like 68k with "ABCD" and "SBCD". --93.220.220.157 (talk) 16:41, 3 October 2017 (UTC)
- There is another article: Binary-coded_decimal, with section Binary-coded_decimal#Other_computers_and_BCD Rcgldr (talk) 19:33, 5 October 2017 (UTC)
Immediate operand
The article should perhaps mention that there was not enough mask space on the original 8086 to store the constant 10, so the AAM and AAD instructions actually have it as an imm8 operand, and were in fact capable of performing the "adjustment" in an arbitrary radix, not just decimal. This was not officially supported by Intel, and some later processors ignored the immediate operand and always used 10. The Intel and Microsoft assemblers did not support specifying the operand but other assemblers did, and of course it could be trivially hand-assembled (both instructions have single-byte opcodes). 2001:470:1F06:CCB:0:0:0:2 (talk) 19:40, 19 September 2020 (UTC)