A. 单片机加法指令只怎么执行的
A,30H是将30H内存中数加A放到A的存储单元。84H+8DH,D是13,加4为17,0到15即0到F这16个数,结果为1,进位标志C为有效,然后加进8+8+C=17,还是保留1并进位,所以最后是11H。PSW是单片机内部标志寄存器,是单片机运行必不可少的基本运算基础,CY是进位标志,是字节内的,如第一个进位,AC是辅助进位,字节间的,第二个进位就是。OV是溢出,这里结果大于FFH必定溢出,P那个忘了…我在床上呢不好查,不好意思,希望能帮到一些
B. 51单片机,使用keil软件,4字节加法或减法子程序
四个字节加上四个字节,和应该是4~5个字节。
本程序,需要三个地址指针,但是一般只有两个(R0和R1)可以用;如果换用工作区,就比较麻烦了。下面使用B充当“和”的地址指针,RESULT + 4单元,充当加数2的地址指针。
程序如下:
RESULT equ 30H ;和数的地址
ORG 0000H
;实验数据如下:
MOV 20H, #22H ;加数1
MOV 21H, #33H
MOV 22H, #44H
MOV 23H, #0F3H
MOV 24H, #12H ;加数2
MOV 25H, #34H
MOV 26H, #56H
MOV 27H, #78H
MOV R0, #20H ;给定地址
MOV R1, #24H
LCALL _4_JIA_4 ;调用加法子程序
NOP
SJMP$
_4_JIA_4:
MOV RESULT + 4, R1 ;保存加数2地址
MOV B, #RESULT ;保存和的地址
CLR C
MOV R2, #4
LOOP:
MOV A, @R0
INC R0
MOV R1, RESULT + 4
ADDC A, @R1 ;加上加数2
INC R1
MOV RESULT + 4, R1
MOV R1, B
MOV @R1, A ;保存和数
INC R1
MOV B, R1
DJNZ R2, LOOP
CLR A
ADDC A, #0
MOV RESULT + 4, A ;保存第五字节
RET
减法子程序,与上面的加法子程序雷同,只要把ADDC换成SUBB即可改为减法子程序。请楼主自行改写。
C. 51单片机 三字节加法程序
首先:R1+R4
和
R2+R5
两个值都大于单字节最大值FF导致存储在单字节寄存器中溢出,导致高字节的数据丢失。
其次:楼主在将R1、R2存放到中间寄存器的时候中间寄存器A应该为16位寄存器才不会丢失高字节的数据。
具体的程序编写,相信楼主经过提示一定能自行解决,这样提高也是最大的。
D. 单片机 加法
得到的A=0A6H,原因是在汇编中,如果出现结果为高位为:A~F都要在字母前加0,以免机器误认为是指令。
E. 51单片机 加法程序 两数相加 不大于10 例:(5+3=8 ) 要这个程序 谢谢各位高手
ORG 0000H;
LJMP MAIN;
ORG 0030H;
MAIN:
MOV R2,#XXH;
MOV R3,#XXH;
MOV A,R2
ADD A,R3
MOV R2,A;
SJMP $
END
加数和被加数放到R2和R3寄存器中,最终结果放回到R2中
当结果大于255时,(PSW.7)=1
F. 用51单片机做加法计算器的设计
51单片机你要不?
G. 一个简单51单片机加法程序问题
说错了呗。——要知道 221bH是一个16位(bit)的(16进制)数,41h只是一个8位(bit)的存储单元,怎么可能放得下这么大个数呢?
正确说法应该是:把221bh存放到41h、40h两个连续的存储单元中。
H. 单片机无符号十进制加法
;51单片机程序如下
CLR C
LOOP:
MOV A, @R0
ADDC A, @R1
DA A
MOV @R0, A
INC R0
INC R1
DJNZ R7, LOOP
END
I. 单片机的加法运算问题
你的公式我看不懂,程序错的太多。 只能是随便帮你改了几下了。
ORG 0000H
LJMP MAIN
ORG 0100H ;不能用0010h 好像是中断的向量表的。
MAIN:
MOV 30H,a
MOV 31H,b
RLC A ;ACC.7移入进位位
JNC MAINL ;进位位为0转移到MAINL
MOV R0,B ;似乎不能用ADDC A,B,因此先将b要先移入寄存器r0中
ADDC A,R0
MOV 32H,A
SJMP MAIN_OUT
MAINL:
MOV R0,B
SUBB A,R0
MOV 32H,A
MAIN_OUT:
SJMP MAIN_OUT ;死循环或加入后继程序。
END ;不能有两个END ,编译器编译到END就会结束编译。