汇编入门(三)
ORG 0000H ;伪指令,定义下面的指令所在地址,此句为主程序的开始地址
LJMP MAIN ;无条件转移到MAIN
MAIN: ;主程序
MOV A,#01010101B
MOV 20H,A
//因为是存一位,所以要存到cy中;对A的特殊功能寄存器直接寻址和累加器某一位的寻址要用ACC
//一位一位操作即可,cy作为中间储存
MOV C,ACC.2
MOV 20H.1,C
MOV C,ACC.1
MOV 20H.2,C
MOV C,ACC.6
MOV 20H.3,C
MOV C,ACC.5
MOV 20H.4,C
MOV C,ACC.3
MOV 20H.5,C
MOV C,ACC.4
MOV 20H.6,C
SJMP $ ;转到该指令的开头开始执行
END ;程序结束
2.计算字符串中,某个字符的数量
ORG 0000H ;伪指令,定义下面的指令所在地址,此句为主程序开始地址
LJMP MAIN ;无条件转移到MAIN
MAIN:
MOV DPTR,#s
MOV B,#m
MOV R0,#0
L1:
CLR A
MOVC A,@A+DPTR ;将A中的值,加上DPTR里的值,访问程序段中这个地址的值,取出来送给A。
INC DPTR ;自加1,准备读取下一个字符
JZ L2 ;这是条件跳转语句,意思是,当累加器A中的值为0时,即到达字符串末尾,跳转到LEND语句行执行程序
CJNE A,B,L1 ;判断A和B是否相等,相等则顺序执行,不相等则执行L1
INC R0
SJMP L1 ;SJMP:无条件相对转移
L2:
RET ;从子程序返回
s: DB'HELLLLO' ;DB定义数据表
m EQU 'L' ;EQU给一个表达式或一个字符串起名
END ;程序结束
3.计算1+2+3+…+100
ORG 0000H ;伪指令,定义下面的指令所在地址,此句为主程序开始地址
LJMP MAIN ;无条件转移到MAIN
MAIN:
MOV DPTR,#0
MOV R0,#100
L0:
MOV A,DPL ;计算低八位
ADD A,R0
MOV DPL,A
MOV A,#0 ;计算高八位
ADDC A,DPH
MOV DPH,A
DJNZ R0,L0
SJMP $ ;转到该指令的开头开始执行
END ;程序结束