‘壹’ 51单片机汇编语言中的 $ 代表啥意思
代表当前的指令所在的地址
举个例子来说,在0050H处定义了几个字节数据
0050H:01H,02H,03H,04H
那么下一条指令的地址应该为0054H,若下一条语句为
COUNT EQU $-0050H,则COUNT就等于4(0054H-0050H),但是一般 编程的时候是不知道数据定义在哪里的,所以你并不知道$的具体值是多少,因为0050H是用标号来表示的,比如说用了TABLE,那么你的语句 COUNT EQU $-TABLE一样可以得到数据块的长度4.
‘贰’ 单片机汇编语言中 CY AC OV 分别是什么意思
你说的
CY
AC
OV
是PSW(程序状态字寄存器)中的标志位。
CY:进位标志位;
当CY=1时,表示操作结果最高位(位7)有进位或借位。
CY=0时,表示操作结果最高位(位7)没有进位或借位。
AC:半进位标志位;
该位表示当进行加法或减法运算时,低半字节向高半字节是否有进位或借位;
当AC=1时,表示低半字节向高半字节有进位或借位;
AC=0时,表示低半字节向高半字节没有进位或借位;
OV:溢出标志位,
该位表示在进行有符号数的加减法时是否发生溢出;
当0V=1时,表示有符号数运算结果发生了溢出,
OV=0时,表示有符号数运算结果没有溢出。
PS:
http://ke..com/view/5048524.htm
可以参考!
希望以上的回答对你有帮助!谢谢!
‘叁’ 单片机汇编语言里 DB
单片机汇编语言中的DB是以字节为单位定义一个数据段,一般用于查表程序中,举例说明:
DISPLAY:
MOV DPTR,#TAB
MOV A,R2
MOVC A,@A+DPTR
MOV P0,A
RET
TAB: ; 共阴极数码管显示代码表
DB 3FH,06H,5BH,4FH,66H ;01234
DB 6DH,7DH,07H,7FH,6fh ;56789
‘肆’ 单片机MCS-51汇编语言中的ACC.7,OV,ACC是什么意思
ACC就是A,是8位累加器,要具体对A上的每一位操作的时候,就要用ACC.*。
ACC.7就是ACC的第七位,比如说A的值是11011010,那么ACC.7就等于1(第七位就是左数第二位)。
OV是psw上的溢出标志位,开始为0,如果之前的运算结果溢出,OV就会变成1
‘伍’ 单片机汇编语言指令中,条件转移指令JBC与JC的区别是什么
一、作用不同:
JBC指令判断该位为1则转移,同时将该位置0。
JC指令判断有借位则转移,也就是说两数相减为负转移。
二、含义不同:
JBC指令相当与JB和CLR (位) 二条指命的组合,它可在转移的同时清除被判位;
JC指令只能对CY进位位进行判断为高后转移,并不能清除它,二条指令都当被测位为高进时进行相对转移。
三、位置不同:
JC是判断C进位标志是否为1,为1则跳转到指定位置。
JBC是判断可位寻址区域内指定位是否为1,为1则跳转到指定位置,并同时清除该位(置0)。
(5)单片机汇编语言中的扩展阅读:
直接使用汇编指令编写单片机程序,对硬件的控制更加直接,可以直接操作物理地址,寄存器,端口等;其它更高级的语言(如:C语言)对硬件的控制是依赖于类库来实现的。并且,对于一些对程序大小和运行速度有非常严苛要求的项目而言,都必须使用汇编指令。C语言只是为了方便编写,与机器打交道的其实都是2进制得代码,汇编语言就是这些代码好记忆的名称和规则,只是比C语言难理解些。
‘陆’ 单片机汇编语言中比较指令
刚好也有这么个困惑,已经解决了,拿出来分享下
比较转移指令
CJNZ
CJNE
A,#data,rel
CJNE
A,direct,rel
CJNE
Rn,#data,rel
CJNE
@Ri,#data,rel
第一条指令的功能是将A中的值和立即数data比较,如果两者相等,就次序执行(执行本
指令的下一条指令),如果不相等,就转移,同样地,我们能将rel理解成标号,即:CJNEA,
#data,标号。这样利用这条指令,我们就能判断两数是否相等,这在很多场合是非常有用的。
但有时还想得知两数比较之后哪个大,哪个小,本条指令也具有这样的功能,如果两数不相等,则CPU还会反映出哪个数大,哪个数小,这是用CY(进位位)来实现的。如果前面的
数(A中的)大,则CY=0,不然CY=1,因此在程序转移后再次利用CY就可判断出A中的数
比data大还是小了。
例:
MOV
A,R0
CJNE
A,#10H,L1
MOV
R1,#0FFH
AJMP
L3
L1:
JC
L2
MOV
R1,#0AAH
AJMP
L3
L2:
MOV
R1,#0FFH
L3:
SJMP
L3
JC是判CY是0,还是1进行转移,如果CY=1,则转移到JC后面的标号处
执行,如果CY=0则次序执行(执行它的下面一条指令)。
分析一下上面的程序,如果(A)=10H,则次序执行,即R1=0。如果(A)不等于10H,则转
到L1处继续执行,在L1处,再次进行判断,如果(A)>10H,则CY=1,将次序执行,即执
行MOV
R1,#0AAH指令,而如果(A)<10H,则将转移到L2处指行,即执行MOV
R1,#0FFH
指令。因此最终结果是:本程序执行前,如果(R0)=10H,则(R1)=00H,如果(R0)>10H,
则(R1)=0AAH,如果(R0)<10H,则(R1)=0FFH。
弄懂了这条指令,其它的几条就类似了,第二条是把A当中的值和直接地址中的值比较,第
三条则是将直接地址中的值和立即数比较,第四条是将间址寻址得到的数和立即数比较,这
里就不详谈了,下面给出几个对应的例程。
CJNE
A,10H
;把A中的值和10H中的值比较(注意和上题的区别)
CJNE
10H,#35H
;把10H中的值和35H中的值比较
CJNE
@R0,#35H
;把R0中的值作为地址,从此地址中取数并和35H比较
‘柒’ 单片机中汇编语言RLC是什么意思
RLC 是带进位的循环左移,RLC A即将A的内容左移一位,将进位位C中的值移到累加器A的最低位,A的最高位移到C里。
譬如说:设A=01000001,C=1;
则如果执行RL ,则A=10000010,C=1(A所有位左移一位,最低位补零,C不参加移位操作,保持原值不变),如果执行RLC后,则A=10000011,C=0(A的最高位移到C,C原值移到A最低位)。
C=1,A=55H,RLC A后则为:C=0 A=ABH,即:1 01010101变为:0 10101011
(7)单片机汇编语言中的扩展阅读:
汇编语言ROL和RCL的区别方法:
AL=10100000时,ROL AL,1就把最高位的 1 移到最后,使AL变成 0100 0001,同时移出的1送CF;ROL AL,CL(CL=2),相当于2次 ROL AL,1,所以AL变成 1000 0010,最后移出的0送CF。
RCL AL,1则把AL的最高位1送给CF,使CF=1,AL其它位相应左移,成为 0100 000X,最后空下的X位被CF原来的值补齐;同样,ROL AL,CL(CL=2),相当于2次 RCL AL,1,最后AL变成 1000 00X1,AL原第二位的0到了CF,CF原来的值补AL中的x。
‘捌’ 在单片机汇编中(CPL)是什么意思
CPL 是取反指令,比如 CPL A,将累加器的值取反后再返回A。
‘玖’ 51单片机中汇编语言中的swap什么意思
51单片机汇编语言中的swap是半字节交换指令。
SWAP A 这条指令,将累加器A的高、低4位数据交换,也就是低4位数据进入高4位,高4位数据进入低4位。例如:
MOV A#00001111B
SWAP A
执行SWAP A后,A中的内容变为11110000B。