第四章 汇编语言程序设计

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

4.DATA----数据地址赋值 标号名称 DATA 表达式
表达式----数、地址,
不可是汇编符号 AA DATA R4
5.DB、DW、DS----定义字节、字、空间 [标号:] DB 字节常数 [标号:] DW 字常数 [标号:] DS 表达式(预留空间数)
例1
ORG 2000H HETA: DB 50H,85H,10,15 汇编以后有:(2000H)=50H (2001H)=85H (2002H)=0AH (2003H)=0FH
P1.0----U P1.1----V
P1.2----W
P1.3----X P1.4----Y P1.5----Z P1.7----L
;暂存中间结果
七、 运算程序设计
例17
十进制转换为二进制整数程序
设单字节BCD码a3、 a2、 a1、 a0依次存放 于内部RAM中的50H(高位)~53H(低位)单元。转 换成的二进制整数存放于R3(高位)R4(低位)中
TAB:DB 30H,31H,32H,33H,34H,35H,36H,37H DB 38H,39H,41H,42H,43H,44H,45H,46H
方法二:
ORG 2000H 2000H MOV A, R0 2001H ANL A, #0FH 2003H ADD A, #03H 2005H MOVC A, @A+PC 2006H MOV R0, A 2007H SJMP $ 2009H :DB 30H,31H,32H,33H,
[1+(1001+2)*10]*TM=10031*1μs=10.031ms
四、子程序设计
例10 将单字节无符号二进制数 (在累加器A中),转换成非压缩 型BCD码。 分析:单字节无符号数最大为255, 因此最多可以转换成3位BCD码。 入口条件:单字节无符号二进制数 在累加器A中,R0 中为起始结果地 址。 出口条件:R0中为起始结果地址, 即个位BCD码的地址,R0中内容加 1得高位BCD码的地址…。 HEXBCD:INC R0 INC R0 PUSH B MOV B,#100 DIV AB MOV @R0,A DEC R0 MOV A,#10 XCH A,B DIV AB MOV @R0,A DEC R0 MOV @R0,B POP B RET
例4 已知20H单元有一个二进制数,请编程把它转换为三位BCD 数送入FIRST单元的低四位,十位和个位BCD数在SECOND单元 中(十位在高位)。 FIRST DATA 30H SECOND DATA 31H ORG 0200H MOV A, 20H MOV B, #64H DIV AB MOV FIRST, A MOV A,B MOV B, #0AH DIV AB SWAP A ORL A, B MOV SECOND, A SJMP $ END
例2 分析下列程序。 ORG 2000H DS 08H DB 30H,8AH,10,’B’ DW 54H,1F80H (2000H)=_____H 不定 (2008H)=_____H 30H
(200AH)=_____H 0AH
00H (200CH)=_____H
(200BH)=_____H 42H
五、查表程序设计
例15 将一个16进制数码0~F(R0的低4位)转换成ASCII码,存放到原单元。
ORG MOV MOV ANL
2000H DPTR,#TAB ;表格首地址→DPTR A,R0 A,#0FH ;保留低四位
MOVC
MOV SJMP
A,@A+DPTR ;查表求ASCII码
R0 , A $
二、分支程序设计 例5 以知VAR单元内有一个自变 量X,请按如下条件编程求Y,并将 它存入FUNC单元的程序段。 1 Y= 0 当X>0 当X=0
-1
当X<0
ORG 0010H VRA DATA 30H FUNC DATA 31H MOV A, VAR JZ DONE JNB ACC.7, POSI MOV A, #0FFH SJMP DONE POSI: MOV A, #01H DONE: MOV FUNC,A SJMP $ END
例13 用程序实现c=a2+b2, 设a 、b、 c存在内部 RAM 的DA、 DB 、 DC单元
Leabharlann Baidu
ORG 2000H DA EQU 30H DB EQU 31H DC EQU 32H MOV A, DA ACALL SUB MOV R0, A MOV A, DB ACALL SUB ADD A, R0 MOV DC, A SJMP $ SUB: MOV DPTR, #TAB MOVC A, @A+DPTR RET TAB:DB 0,1,4,9,16,25,36,49,64,81, END
度存放在NUM单元,试编写程序求它们最小值,并存入MIN单元。 ORG 2000H NEXT: JC LOOP BLOCK EQU 31H MOV A, B MIN EQU 30H LOOP: DJNZ NUM, LOOP1 NUM EQU 2FH MOV MIN, A START: DEC NUM END MOV R0, #BLOCK MOV A, @R0 LOOP1: INC R0 MOV B, @R0 B CJNE A, B, NEXT BLOCK A
第四章
汇编语言程序设计
基本要求:能熟练编写各类一般难度的程序
第一节 汇编语言的构成 一、汇编语言格式 [标号:] 操作码 [操作数] [;注释] LOOP:MOV A,30H ;A (30H)
1.标号
2.操作码
可有可无;字母打头;字母、数字、下划线组成; 不超过8位;不与操作码相同。
必不可少;不可更改。
例5* 将例5的方程改为如下形式,设X,Y为无符号 数,分别存放在地址X1和Y1中,试编写求值 程序。 1 当X>20 Y= 0 20>=X>=10 -1 当X<10 ORG 2000H X1 EQU 20H Y1 EQU 21H MOV A, X1 CJNE A, #10, NEXT1 NEXT1: JC LOOP1 CJNE A, #21, NEXT2 NEXT2:JNC LOOP2 MOV Y1, #00H SJMP HALT LOOP1:MOV Y1, #0FFH SJMP HALT LOOP2:MOV Y1, #01H HALT: SJMP $ END
3.操作数 可有可无;可一可二;可以是数或地址;可二进制、 十进制、十六进制或ASCII码。
4.注释
可有可无;可各种文字或符号。
第二节 伪指令 1.ORG----汇编起始 [标号:] ORG addr16 如: ORG 2000H
START:MOV A,#20H
2.END----结束汇编 [标号:] END 3.EQU----赋值 标号名称 EQU AA EQU R1 数或汇编符号 K1 EQU 40H
IDTB: MOV R0,#50H MOV R2,#3 MOV R3,#0 MOV A,@R0 MOV R4,A LOOP: MOV A,R4 MOV B,#10 MUL AB MOV R4,A ;R4*10低8位 MOV A,B XCH A,R3 ;暂存R4*10高8位 MOV B,#10 MUL AB ;R3*10为一个字节 ADD A,R3 ;R3*10+R4*10高8位 MOV R3,A INC R0 MOV A,R4 ADD A,@R0 MOV R4,A MOV A,R3 ADDC A,#0 MOV R3,A DJNZ R2 , LOOP RET
ORG U EQU V EQU W EQU X EQU Y EQU Z EQU L EQU MOV C,W CPL C ORL C,V CPL C ANL C,U MOV 07H,C MOV C,W ANL C,Y ORL C,Z CPL C ANL C,X ORL C,07H MOV L,C SJMP $ 2000H P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.7
例6
将内部RAM30H开始的10个无符号字节数相加结果存入 30H单元,设和不超过8位。 MOV R7,#09H MOV R0,#31H MOV A,@R0 LOOP:INC R0 ADD A, @R0 DJNZ R7, LOOP MOV 30H, A SJMP $
三、循环程序设计
例7 设从内部RAM的BLOCK单元开始存放一组无符号数,数据长
例9 假设一台8051单片机的时钟频率为12MHz,要求设
计一个软件延时程序,延时时间为10MS。 ORG 2000H MOV R6,#0AH 1 LOOP2: MOV R7,#200 1 LOOP1: NOP 1 NOP 1 NOP 1 DJNZ R7,LOOP1 2 1+(1+1+1+2)*200 DJNZ R6, LOOP2 2 END =1001TM
例14 求两个无符号数据块的最小值,设数据块的首地址分别为 50H 、 60H ,且第一个数据均为数据块的长度。试编程求两 个数据块中的最小值,结果存入MIN单元。 SMIN:MOV A, @R0 ORG 2000H MOV R7, A MIN EQU 30H DEC R7 MOV R0, #50H INC R0 ACALL SMIN MOV MIN, A MOV A, @R0 MOV R0, #60H LOOP1:INC R0 ACALL SMIN MOV B, @R0 CJNE A, MIN, NEXT CJNE A, B, NEXT1 NEXT:JNC HALT NEXT1:JC LOOP MOV MIN, A MOV A, B HALT:SJMP $ LOOP:DJNZ R7, LOOP1 RET
34H,35H,36H,37H, . 38H,39H,41H,42H, 43H,44H,45H,46H,
调整值(03H)=表首址-(MOVC所在地址+1)
六、位操作程序设计 例16 编程 求逻辑函数L的值,L U (V W ) X WY Z 。 式中L、U、V、W、X、Y、Z均为位变量; 逻辑变量从P1口的P1.0~P1.5输入,从P1.7输出,即有下列对应关系:
例8 设内部RAM中从地址BLOCK开始存放一组无符号数,只有最后 一个数为0,其余均不为0,试编程判断AAH个数,存入NUM单元 ORG 2000H BLOCK EQU 31H NUM EQU 30H MOV R0,#BLOCK MOV NUM, #00H LOOP: CJNE @R0, #00H, LOOP1 SJMP HALT LOOP1: CJNE @R0, #0AAH, LOOP2 INC NUM LOOP2: INC R0 SJMP LOOP HALT: SJMP $ END
例11 利用上述子程序将8031单片机内部RAM的30H单元单字节无符号二进 制数,转换成非压缩型BCD码,放在42H、41H、40H单元中。 相关程序段如下: MOV A,30H MOV R0,40H LCALL HEXBCD :
例12
利用子程序技术编程,将20H—2AH,30H—3EH,40H—4FH三个子域清零.
(200DH)=_____H 54H
6.BIT----位地址符号
标号名称 BIT 位地址
如: D BIT 20.7
第三节 简单程序设计
一、顺序结构
例3 将20H单元中8位无符 号数转换成3位BCD码, 并分别放到FIRST(百 位)、SECO(十位)和 个位THIR中。
FIRST EQU 30H SECO EQU 31H THIR EQU 32H MOV A,20H MOV B,#64H DIV AB MOV FIRST,A MOV A,B MOV B,# 0AH DIV AB MOV SECO,A MOV THIR,B SJMP $ END SJMP $ 即为 LL:SJMP LL
MOV SP, #70H MOV R0, #20H MOV R2, #0BH ACALL ZERO MOV R0, #30H MOV R2, #0FH ACALL ZERO MOV R0, #40H MOV R2, #10H ACALL ZERO SJMP $ ZERO: MOV @R0, #00H INC R0 DJNZ R2, ZERO RET
相关文档
最新文档