首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带DAA的Z80溢出

带DAA的Z80溢出
EN

Stack Overflow用户
提问于 2013-09-30 17:07:25
回答 2查看 633关注 0票数 3

我正在编写一个Z80仿真器,试图理解十进制调整指令对某些操作数的作用。这些操作码在真实Z80上的结果(在寄存器A&F中)是什么?

代码语言:javascript
复制
LD   A,1h
ADD  A,99h
DAA

我的代码目前在A寄存器中用0xA0完成,并且设置了一半的进位和溢出位。但是它应该返回0吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-01 04:02:56

之后:

代码语言:javascript
复制
LD A, 1h
ADD A, 99h

A应该包含9Ah。进位、半进位和溢出应全部重置,因为从第3位到第4位或从第7位到第7位没有进位,而且在签名的解释中,您在否定的情况下添加了一个正数,所以溢出是不可能的。

然后,当您执行DAA时,处理器会发现低咬口的值大于0x9。因此,它将决定要添加0x6,以便从低位数创建一个合适的十进制进位。

考虑到它将将0x9添加到低咬口,它将检查是否会期望高咬口创建十进制进位。测试是高咬口是否大于0x8。它是。因此DAA也将决定将0x6添加到高咬口。

因此,DAA将决定添加0x66。

代码语言:javascript
复制
(0x9a + 0x66) MOD 0x100 = 0x00

因此,A中留下的结果将是0x00。

DAA决定将0x6添加到最上面的咬口。因此,现在将设置进位。

DAA还决定将0x6添加到底部小口。所以一半的进位也会被设定。

符号、零等将根据0x00的结果进行设置。

如果我不得不猜测的话,你的代码似乎发现低咬口是不正确的,并计划创建一半的进位。但是,它没有检查顶部的咬口是否会因此变得不正确(例如,它是否是0x8或更高的),并且也没有计划创建一个顶咬带。

票数 1
EN

Stack Overflow用户

发布于 2013-09-30 17:54:30

只在添加指令后执行DAA,该指令在A寄存器中留下两个BCD数字字节结果。

添加操作符应该由两个打包的BCD数字组成。DAA指令调整寄存器以包含正确的两位数打包的十进制结果,溢出、进位和零标志也会受到影响。如果结果( DAA执行后)大于99,则在DAA之后设置进位标志。

x86 CPU还支持与Z80 DAA指令非常接近的DAA指令,所以如果您在x86平台上工作,您可以在仿真时使用它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19099892

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档