一个简单的循环灯实例
下图中的8个发光代表 8 个彩灯,让我们看看是如何实现的
stat: mov a , #01h ; 高电平对应的发光二极管亮
loop: mov p1, a ; 从 p1 口输出到发光二极管
mov r1, #10
del1: mov r2 , #200
del2: mov r3, #126
del3: djnz r3, del3
djnz r2, del2
djnz r1, del1
rl a
ljmp loop ; 左移一位 , 下一个发光二极管亮
end
指令格式
[ 标号 ] : 操作码 [ 目的操作数 ] [ 源操作数 ] ; [ 注释 ]
↓ ↓ ↓ ↓ ↓
loop : movx a , @dptr ; 将外部 ram 单元内容送到 a
标号: 又称为指令地址符号。对标号有如下规定:
一般由 1 ~ 8 个 ascii 字符组成,以字母开头,其余字符可以是字母、数字和其他特定字符。
不能使用助记符、伪指令或者寄存器的符号名称做标号。
与操作码之间用冒号分开,带方括号表示为可选项。
一个标号只能在程序中出现一次,不能重复出现。
操作码是由助记符表示的字符串,它规定了指令要完成的具体操作。
操作数指令操作的对象 . 操作数分为目的操作数(上例累加器 a) 和源操作数(上例中的 @dptr). 目的操作数和源操作数的书写顺序不能颠倒 .
注释对指令功能的说明,以便于阅读,符号“;”后面的内容为注释。
汇编指令及其注释中常用的符号
rn ------选中当前的工作寄存器区中的寄存器r0~r7之一
@ ri------选中当前的工作寄存器组中的寄存器r0或r1,间接寻址前缀符号direct------直接地址,一个内部ram单元地址或sfr地址.
#data ------------8位或16位常数,也称立即数. #为立即数前缀标志符号
addr11------------11位目的地址
addr16------------16位目的地址
rel ---------------8位地址偏移量,值在-128~+127范围内
bit---------------位地址.sfr的位地址(可用符号或名称表示)
/-----------------位操作前缀,表示该位内容求反
(×)------------表示以×为地址单元中内容
((×))--------表示以×为地址单元中内容为地址的单元中的