- 1、本文档共66页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第6章 算术与逻辑指令及程序 6.1 算术指令 6.2 有符号数概念与算术运算 6.3 逻辑与比较指令 6.4 循环位移指令与数据串行化 6.5 BCD、ASCII及其他应用程序 本章目标 定义8051无符号数据算术运算 使用8051逻辑指令 使用比较与跳指令进行程序控制 编写8051程序以实施ASCII和BCD数据转换 6.1 算术指令 无符号数加法 在8051中,为了将数相加,必须用到累加寄存器A。 ADD指令格式: ADD A, 源操作数 ;A=A+源操作数 指令ADD用于将两个操作数相加,目的操作数总是在寄存器A中。 在8051汇编语言中不允许进行存储器到存储器的算术运算的。 例6-1 试说出标志寄存器如何受如下指令的作用。 解: 实施加法以后,寄存器A包含00,标志变化如下: CY=1 因为从D7有进位 P=0 因为1的个数为0 AC=1 因为从D3到D4有进位 单字节加法 8位寄存器可能持有的最大值是FFH,为了计算任意个数的操作数之和,加上每个操作数后,进位标志都应当检测。 例6-2 假设RAM单元40-44H持有如下值。编写程序,求得这些值之和。要求寄存器A持有低字节,R7持有高字节。 40=(7D) 41=(EB) 42=(C5) 43=(5B) 44=(30) 解: ADDC与16位数加法 将2个16位数相加时,需要考虑从低字节向高字节的进位传递。 指令:ADDC A, 源操作数 表示 A=A+源操作数+CY 例如:3CE7H+3B8DH 当低字节相加E7H+8DH=74H,CY=1。进位传递到高字节,得到3CH+3BH+01H=78H 例6-3 试编写程序,以将16位数相加。这2个数是3CE7H和3B8DH,将其和放入R7和R6中。 解: BCD数制 BCD代表二进制编码的十进制数。 非压缩BCD 在非压缩BCD中,数的低4位表示BCD数字,其余位为0。例如一个非压缩BCD数字需要1字节存储空间或8位寄存器加以保存。 压缩BCD 在压缩BCD中,一个字节含有2个BCD数字,一个在低4位,另一个在高4位。例如占有1字节存储器以存放压缩BCD操作数。 BCD数的矫正 在BCD数加法中,所相加的数必须是正确的BCD数。但是,BCD数相加后,其结果值可能不再是BCD表示,例如: 结果是3FH,它不再是BCD数。 为校正这个问题,必须在结果值的数字上加6,例如: 3FH+06H=45H D9H+60H=139H DA指令 在8051中,DA指令用于校正BCD值。 助记符DA仅有1个操作数即累加器A。 DA指令在需要时将6加到相应字节上,不需要时不予校正。 DA动作小结 在ADD或ADDC指令之后: 若低4位大于9,即AC=1,则将0110加到这4位上。 若高4位大于9,即CY=1,则将0110加到这4位上。 例如: 假设从40H开始的RAM单元中存储5个BCD数据项,如下所示。编写程序球这些值的和,结果必须满足BCD格式。 40=(71) 41=(11) 42=(65) 43=(59) 44=(37) 无符号数减法 在8051中仅有SUBB指令。 SUBB A, 源操作数 ;A=A - 源操作数 – CY 由SUBB实施减法,必须先使得CY=0再执行该指令。 注意:使用CY标志作为借位。 当CY=0时的SUBB 假定8051需要执行简单减法指令,并且在执行该指令之前CY=0,则可以将对无符号数执行SUBB指令时CPU硬件的步骤归纳如下: 取减数(源操作数)的补码。 将它加到被减数(A)上。 对进位求反。 例6-5 试指出如下代码的步骤。 解: 执行SUBB后:CY=0,结果为正;CY=1,结果为负,目的寄存器中是结果的补码。 例6-6 试分析如下程序: 解: 分析步骤: CY=1,结果为负,补码形式。 当CY=1时的SUBB 这个指令用于多字节数情形时,应注意低位操作数的借位,若执行SUBB之前CY=1,则要将结果减1。 例6-7 试分析如下程序: 解:在第一次执行SUBB指令后,A=62H-96H=CCH,进位标志置为高,表明有借位。 第二次执行SUBB指令时,A=27H-12H-1=14H。 因此,得到2762H-1296H=14CCH 无符号数的乘法 8051只支持逐个字节乘法。假设这些字节都是无符号数。其语法如下: MUL AB ; A × B,16位结果置于A和B中 在逐字节乘法中,操作数之一必须放在寄存器A中,而第二个操作数必须放在寄存器B中。 乘法操作以后,结果值在寄存器A和B中,低位字节在A中,高位字节在B中。例如
文档评论(0)