打印
[通用8051核FLASH系列]

jnz和djnz_【HC89S003F4开发板】 10汇编指令

[复制链接]
1463|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
qn7a12|  楼主 | 2022-11-26 19:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 芯圣电子官方QQ 于 2023-7-20 10:32 编辑

HC89S003F4开发板汇编指令

一、数据传递类指令

MOV、MOVC、MOVX

1、MOV,用于片内数据存储器中的数据传递指令中。

2、MOVC是与ROM之间的数据传送,而MOVX是与外部RAM数据传送;

3、MOV就是移动的意思,C就是Code,代码的意思,X就是eXternal,外部的意思 MOVC就是读代码存储器,MOVX就是读写外部存储器,即外部RAM ;

4、MOVC是读取ROM中的数据,只能读不能写(一般来说主要是用来读取常量或常量表) MOVX是读写外部扩展的RAM和扩展的IO口,可以读也可以写。

MOVX A,@RI

MOVX @RI,A

MOVX A,@DPTR

MOVX @DPTR, A

MOVC A,@A+DPTR

PUSH、POP

进出栈,栈是FILO(first in last out),先进后出

也就是把寄存器里的数据临时保存一下,相当与一个仓库。

使用特权

评论回复
沙发
qn7a12|  楼主 | 2022-11-26 19:19 | 只看该作者
需要注意,使用命令时,确认栈的位置,保证不溢出、不覆盖变量。

XCH、XCHD

XCH 交换双方的全部 8 位数。

XCHD 交换双方的低 4 位数。

使用特权

评论回复
板凳
qn7a12|  楼主 | 2022-11-26 19:20 | 只看该作者
二、算术运算类指令

INC、DEC、MUL、DIV

inc a 相当于 add a,1

dec a 相当于 sub a,1

优点 速度比sub或add指令快,占用空间小

这条指令执行结果影响AF、OF、PF、SF、ZF标志位,但不影响CF进位标志位。

mul 累加器ACC*寄存器b,保存在ACC

DIV 累加器ACC/寄存器b,保存在ACC

在c库里还有16位乘除的方法

EXTRNCODE (?C?IMUL) ;公式R4R5*R6R7,保存在R6R7,调库16字节

EXTRNCODE (?C?UIDIV) ;无符号,公式R4R5/R6R7,商保存在R6R7,余数在R4R5

EXTRNCODE (?C?SIDIV) ;有符号,公式R4R5/R6R7,商保存在R6R7,余数在R4R5

LCALL?C?IMUL ;跳转3字节

ADD、ADDC、SUBB

ADD A, R0 相当于A=A+R0

ADDC A, R0 相当于A=A+R0+Cy

SUBB A, R0 相当于A=A-R0-Cy,如果A小于R0,则Cy置位

使用特权

评论回复
地板
qn7a12|  楼主 | 2022-11-26 19:21 | 只看该作者
三、逻辑运算类指令

ANL、ORL、XRL

与、或、异或

RL、RLC、RR、RRC

RL左移,RR右移,C带进/借位

SWAP

高四位和低四位交换

使用特权

评论回复
5
qn7a12|  楼主 | 2022-11-26 19:21 | 只看该作者
四、控制转移类指令

SJMP、AJMP、LJMP

无条件转移

SJMP -126—+129范围内转移

AJMP 2k范围内转移

LJMP 64K范围内转移

RET、RETI

RETI 是中断返回指令

RET 是子程序返回指令

ACALL、LCALL

转移到子程序,子程序执行后配合RET、RETI返回

CJNE、DJNZ、JNZ、JZ

CJNE 比较两值,不相等转移

DJNZ 减 1,不为 0 则转移

JNZ Jump if Not Zero 累加器为 1 则转移

JZ Jump if Zero 累加器为 0 则转移

使用特权

评论回复
6
qn7a12|  楼主 | 2022-11-26 19:22 | 只看该作者
五、布尔指令

JC、JNC、JB、JNB、JBC

JC Jump if Cy (有进位、即Cy=1,则跳转)

JNC Jump if Not Cy (有进位、即Cy=0,则跳转)

JBC Jump if Bit and Clear

JB Jump if Bit (为1则跳转)

JNB Jump if Not Bit (为0于则跳转)

使用特权

评论回复
7
tpgf| | 2022-12-7 16:10 | 只看该作者
这些汇编指令都是通用的  在任何型号上都可以用吧

使用特权

评论回复
8
heimaojingzhang| | 2022-12-7 16:30 | 只看该作者
对于我来说 汇编语言的难点在于 我跳转的时候的地址怎么确定呢

使用特权

评论回复
9
keaibukelian| | 2022-12-7 16:51 | 只看该作者
首先需要非常了解各种类型的数据占用的资源

使用特权

评论回复
10
paotangsan| | 2022-12-8 09:04 | 只看该作者
使用汇编语言如果数据类型不匹配 会报错吗

使用特权

评论回复
11
renzheshengui| | 2022-12-8 09:36 | 只看该作者
做累加的时候 只能自己小心点判定是否会溢出是吧

使用特权

评论回复
12
wakayi| | 2022-12-8 10:51 | 只看该作者
DJNZ是单片机汇编的一条指令,是循环转移指令。eg: DJNZ R6, Loop 意思每转移到标号Loop一次R6就减1;直到R6=0时执行下一条指令。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

28

主题

402

帖子

0

粉丝