单片机指令RLC A带进位的循环转移,怎么进位呀?进位进到哪里去呀?可以举一个例子吗?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单片机指令RLC A带进位的循环转移,怎么进位呀?进位进到哪里去呀?可以举一个例子吗?相关的知识,希望对你有一定的参考价值。
先看 RL A,这条指令只是把 A 中的八位数,循环左移。再看 RLC A,这条指令把 A 中的八位数,以及C,共九位数,循环左移。
例如:C = 1,A = 0011 0000,执行RLC A 后:
A 中的最高位 0,移到C;C 中原来的 1,移到 A 的最低位。
结果:C = 0,A = 0110 0001。
------------------
如果执行 RL A,则仅有 A 循环移位,C 就不变了。
结果:C = 1,A = 0110 0000。 参考技术A 进位位CY在PSW寄存器内,是真实的物理存在,你用与不用它都在那里。在单片机执行指令RLC A前,CY有一确定值,执行RLC A时,CY到了A寄存器的D0位,D0位到D1位,以此类推,把最高位D7挤出去了,D7就进了CY位。
图示如下:
RLC A ;CY←D7←...←D0←CY
例子:
CY=1,A=01101001
执行RLC A后
CY=0,A=11010011
汇编语言从入门到精通-5微机CPU的指令系统2
微机CPU的指令系统
5.2.2 标志位操作指令
标志位操作指令是一组对标志位置位、复位、保存和恢复等操作的指令。
1、进位CF操作指令
a、清进位指令CLC(Clear Carry Flag):CF←0
b、置进位指令STC(Set Carry Flag):CF←1
c、进位取反指令CMC(Complement Carry Flag):CF←not CF
2、方向位DF操作指令
a、清方向位指令CLD(Clear Direction
Flag):DF←0
b、置方向位指令STD(Set Direction Flag):DF←1
3、中断允许位IF操作指令
a、清中断允许位指令CLI(Clear Interrupt
Flag):IF←0
其功能是不允许可屏蔽的外部中断来中断其后程序段的执行。
b、置中断允许位指令STI(Set Interrupt
Flag):IF←1
其功能是恢复可屏蔽的外部中断的中断响应功能,通常是与CLI成对使用的。
4、取标志位操作指令
a、LAHF(Load AH from
Flags):AH←Flags的低8位
b、SAHF(Store AH in Flags):Flags的低8位←AH
5、标志位堆栈操作指令
a、PUSHF/PUSHFD(Push Flags onto
Stack):把16位/32位标志寄存器进栈;
b、POPF/POPFD(Pop Flags off
Stack):把16位/32位标志寄存器出栈;
6、逻辑操作指令的小结
下面是学习标志位指令的控件,浏览者可以运用此类指令,观看标志寄存器的相应变化。
5.2.3 算术运算指令
算术运算指令是反映CPU计算能力的一组指令,也是编程时经常使用的一组指令。它包括:加、减、乘、除及其相关的辅助指令。
该组指令的操作数可以是8位、16位和32位(80386+)。当存储单元是该类指令的操作数时,该操作数的寻址方式可以是任意一种存储单元寻址方式。
1、加法指令
a、加法指令ADD(ADD Binary Numbers Instruction)
指令的格式:ADD Reg/Mem, Reg/Mem/Imm
受影响的标志位:AF、CF、OF、PF、SF和ZF
指令的功能是把源操作数的值加到目的操作数中。
b、带进位加指令ADC(ADD With Carry Instruction)
指令的格式:ADC Reg/Mem,
Reg/Mem/Imm
受影响的标志位:AF、CF、OF、PF、SF和ZF
指令的功能是把源操作数和进位标志位CF的值(0/1)一起加到目的操作数中。
c、加1指令INC(Increment by 1 Instruction)
指令的格式:INC
Reg/Mem
受影响的标志位:AF、OF、PF、SF和ZF,不影响CF
指令的功能是把操作数的值加1。
d、交换加指令XADD(Exchange and Add)
指令的格式:XADD Reg/Mem,
Reg ;80486+
受影响的标志位:AF、CF、OF、PF、SF和ZF
指令的功能是先交换两个操作数的值,再进行算术“加”法操作。
例5.3 已知有二个32位数d1和d2(用数据类型DD说明),编写程序片段把d2的值加到d1中。
解:32位数d1和d2在内存中如下所示。
方法1:用16位寄存器编写程序
MOV AX, word ptr d1 ;由于d1是双字类型,必须使用强制类型说明符。以下同。
MOV DX, word ptr d1+2 ;(DX,AX)构成一个32位数据
ADD AX, word ptr d2 ;低字相加
ADC DX, word ptr d2+2 ;高字相加。在低字相加时,有可能会产生“进位”
MOV word ptr d1, AX ;低字送给d1的低字
MOV word ptr d1+2, DX ;高字送给d1的高字
方法2:用32位寄存器编写程序
MOV EAX, d1
ADD EAX, d2
MOV d1, EAX
从上面两段程序不难看出:用32位寄存器来处理32位数据显得简单、明了,而16位微机虽然也能处理32位数据,但做起来就要复杂一些。
下面是学习和掌握加法类指令的控件,可模拟执行ADD、ADC、INC、XADD、CLC、STC和CMC等指令。用鼠标左键单击寄存器列表框中指定的寄存器,则可修改其值。后面其它控件的有关操作与此相一致,不再说明。从上面两段程序不难看出:用32位寄存器来处理32位数据显得简单、明了,而16位微机虽然也能处理32位数据,但做起来就要复杂一些。
以上是关于单片机指令RLC A带进位的循环转移,怎么进位呀?进位进到哪里去呀?可以举一个例子吗?的主要内容,如果未能解决你的问题,请参考以下文章