数学 – Z80 DAA指令

对于这个看似微不足道的问题抱歉,但我似乎无法在任何地方找到答案 – 我只是在我的Z80模拟器中实现DAA指令,我在Zilog手册中注意到这是为了调整用于二进制编码十进制算术的累加器.它表示该指令旨在在加法或减法指令之后运行.

我的问题是:

>如果在另一个指令之后运行会发生什么?
>它如何知道前面讲了什么?
>我知道有N个标志 – 但是这肯定不会明确表示以前的指令是加法或减法指令?
>根据DAA表中规定的条件,它是否只是修改累加器,不管以前的指令如何?

Does it just modify the accumulator anyway, based on the conditions set out in the DAA table, regardless of the previous instruction?

是.文档只是告诉你DAA是要用于什么.也许你指的是this link的表:

--------------------------------------------------------------------------------
|           | C Flag  | HEX value in | H Flag | HEX value in | Number  | C flag|
| Operation | Before  | upper digit  | Before | lower digit  | added   | After |
|           | DAA     | (bit 7-4)    | DAA    | (bit 3-0)    | to byte | DAA   |
|------------------------------------------------------------------------------|
|           |    0    |     0-9      |   0    |     0-9      |   00    |   0   |
|   ADD     |    0    |     0-8      |   0    |     A-F      |   06    |   0   |
|           |    0    |     0-9      |   1    |     0-3      |   06    |   0   |
|   ADC     |    0    |     A-F      |   0    |     0-9      |   60    |   1   |
|           |    0    |     9-F      |   0    |     A-F      |   66    |   1   |
|   INC     |    0    |     A-F      |   1    |     0-3      |   66    |   1   |
|           |    1    |     0-2      |   0    |     0-9      |   60    |   1   |
|           |    1    |     0-2      |   0    |     A-F      |   66    |   1   |
|           |    1    |     0-3      |   1    |     0-3      |   66    |   1   |
|------------------------------------------------------------------------------|
|   SUB     |    0    |     0-9      |   0    |     0-9      |   00    |   0   |
|   SBC     |    0    |     0-8      |   1    |     6-F      |   FA    |   0   |
|   DEC     |    1    |     7-F      |   0    |     0-9      |   A0    |   1   |
|   NEG     |    1    |     6-F      |   1    |     6-F      |   9A    |   1   |
|------------------------------------------------------------------------------|

我必须说,我从来没有见过dafter指令规范.如果仔细检查表格,您将看到指令的影响仅取决于C和H标志以及累加器中的值 – 它不依赖于上一条指令.此外,它不会泄露如果例如C = 0,H = 1,并且累加器中的低位数是4或5,会发生什么情况.因此,在这种情况下您将不得不执行NOP,或者产生错误消息或某事.

相关文章
相关标签/搜索