当前位置:文档之家› 汇编语言程序设计

汇编语言程序设计

3.4 汇编语言程序设计
伪指令简介 程序设计举例
• 汇编语言是在机器语言的基础上发展起来的一种程序 设计语言,由助记符、关键字和伪指令组成,由于这 种语言的指令系统都是有特定意义的符号组成,所以, 有时也称为符号语言。
• 采用汇编语言编写的源程序不能直接在机器上运 行,必须经过“汇编程序”翻译成机器语言程序(即目 标代码)后才能运行。这个翻译的过程称为“汇编”。
ORG 0000H REG EQU R7 HT1 EQU 20H DISP EQU 2000H MOV R1,#HT1 ;容送入A中 LCALL DIS ;调用首地址为2000H的子程序 END
4.DATA伪指令:数据地址赋值伪指令, 它用来给左边的“字符名”赋值。
例:试编程把内部RAM中20H~22H单元 的内容左移4位,移出内容送R2
R2 20H 21H
21H CY
22H
22H
MOV R7,#4 LP2: MOV R6,#3 MOV R0,#22H CLR C LP1: MOV A,@R0 RLC A MOV @R0, A DEC R0 DJNZ R6, LP1
例:试编写压缩BCD码减法运算程序。
ORG 3000H SUBCD: MOV R3,#00H SETB C SUBCDl: MOV A, #00H ADDC A, #99H SUBB A,@R0 ADD A,@R1 DA A MOV @R0,A INC R0 INC R1 INC R3 DJNZ R2,SUBCDl JC SUBCD2 SETB F0H SUBCD2: RET END
HASC:
TAB:
ORG 2200H DEC SP DEC SP POP ACC ANL A,#0FH MOVC A,@A+DPTR PUSH ACC INC SP INC SP RET DB ‘01234567’ DB ‘89ABCDEF’ END
• HASC: MOV R0,SP DEC R0 • DEC R0 MOV A,@R0 ANL A,#0FH • MOVC A,@A十DPTR • MOV @R0,A • RET • END
子程序设计
• 调用子程序时,要了解子程序的“入口信息” 和“出口信息”,即进入子程序前应给哪些变 量赋值,子程序返回时结果存在何处,以便主 程序应用这些结果。这就是所谓的参数传递。 一般称传入子程序的参数为入口参数,由子程 序返回的参数为出口参数。 • 参数传递一般可采用以下方法:
–传递的数据(参数)通过工作寄存器R0~R7或者 累加器来传送。 –传递地址。 –通过堆栈传递参数 。
MAIN: MOV DPTR,#0F501H MOV R7, #14 LCALL ISUB3
• • • • • • • • • •
1000H 1002H 1003H 1004H 1005H 1006H 1007H 1009H 100AH 1018H
ISUB3: MOV R1,#20 ISB30: MOV A, R1 MOVC A, @A+PC MOVX @DPTR, A INC DPTR INC R1 DJNZ R7, ISB30 RET DB: 1,9,8,9,1,2,3,0,0,0,0,0,0,0 DB:1,9,9,0,0,2,0,8,3,0,0,0,0,0
例:将8位无符号二进制数转换成三 位压缩BCD码。
ORG 1000H MOV B,#100 DIV AB MOV 20H, A MOV A, #10 XCH A, B DIV AB SWAP A ORL A, B MOV 21H,A SJMP $ END
例:试编程统计从片内RAM的20H单元起所存的 16个单元中“0”位的个数。 ORG 1000H MOV R0,#20H MOV R7,#16 MOV R2,#00H TOG: MOV R6,#08H CLR C MOV A,@R0 TOG1:RLC A JC TOG2 INC R2 TOG2: DJNZ R6,TOG1 INC R0 DJNZ R7,TOG STOP:SJMP STOP
格式:字符名 DATA 数据或表达式 • INDAT DATA 8000H
• DATA伪指令与EQU伪指令的区别:DATA定义
的字符名称作为标号登记在符号表中,故可先 使用后定义;而EQU定义的字符名必须“先定义 后使用”,其原因是EQU不定义在符号表中。所 以,DATA伪指令可以放在源程序的开头或结尾, 也可以放在程序的其他位置,比EQU伪指令要灵 活。
例:设计一个软件延时子程序,延时时间为 10ms。设晶振频率为6MHz。
ORG 1000H 机器周期数 MOV R6,#0AH ; 1T DL2:MOV R7,#XUTH ; 1T DL1:NOP ; 1T NOP ; 1T DJNZ R7,DL1 ; 2T DJNZ R6,DL2 ; 2T RET ; 2T (1+1+2)*2*XUT=1000(µs)
设被减数低字节 地址存在R1中, 减数低字节地址 存放在R0中, R2中存字节数; 差的低字节地址 存在R0,差的 字节数存在R3。
例:编写多字节二进制数转换为 BCD数的程序
10110=1*24+0*23+1*22+1*21+0*20 =(((1*2+0)*2+1)*2+1)*2+0 B=B*2+bi 初值:B=0, i=i-1 关键是如何实现:BCD数乘2加下一位 入口参数:(R0)=二进制数低位地址, ( (R2)=二进制字节数; 出口参数:(R1)=BCD数个位地址。
5.位地址符号伪指令 BIT
字符名 BIT 位地址 功能含义是:将右边的位地址赋给左边的“字符 名称”。 例如: A1 BIT 30H A2 BIT P1.7
6.定义字节伪指令 DB伪指令
标号:DB 字节常数或字符(项或项表) • 伪指令的含义是把右边“项或项表”中的数据依 次存入以左边标号地址起始的程序存储器中。
ORG 2000H CLR A MOV 30H, R2 MOV 31H, R1 MOV 32H, R0 INC R2 BB0:MOV @R1, A INC R1 DJNZ R2, BB0 MOV A, BYTE MOV B, #08H MUL AB MOV R3, A BB3:MOV R2, 30H MOV R0, 32H CLR C
ORG 8000H TABLE: DB 78H,100,0011010lB,'A','9‘ 7.定义字伪指令 DW 标号: DW 字常数或字表 ORG 1000H TB: DW 6754H, 7AH,12 8.定义存储空间伪指令 DS 标号: DS 表达式 DS伪指令的含义是指示汇编程序从它的标号地址 (或实际物理地址)起留出一定量的内存空间。 ORG 8000H SPP: DS 10 DB 30H,56H
3.4.2 MCS-51汇编语言程序设计举例
• • • • • 简单程序设计(顺序执行程序) 循环程序设计 分支程序设计 查表程序设计 子程序设计
程序的简单和复杂只是相对而言,这里所 说的简单是一种顺序执行的程序,只有一个 入口和一个出口。
• PT:MOV DPTR,#TMAB • MOV A,R2 • CJNE A,#8,$+3 • JC ERR • CJNE A,#16, $+3 • JNC ERR • CLR C • SUBB A,#8 • MOV A,#3 • MUL AB • JMP @A+DPTR • TMAB: LJMP PCM8 • LJMP PCM9……..
BB1:MOV A, @R0 RLC A MOV @R0, A INC R0 DJNZ R2, BB1 MOV R2, 30H INC R2 MOV R1, 31H BB2:MOV A, @R1 ADDC A, @R1 DA A MOV @R1, A INC R1 DJNZ R2, BB2 DJNZ R3, BB3 RET
2. 汇编结束伪指令 END
[标号]:END 经常用在汇编语言源程序的末尾,用来指 示源程序结束汇编的位置。即表明程序的 结束 .
3.赋值伪指令 EQU
格式:字符名 EQU 数据或汇编符号 用于给左边的“字符名”赋值。用 EQU定义的字符必须先定义后使用, 这些被定义的字符名称,在程序中就 可以作为一个数据,也可以作为一个 地址,所以,被赋的值可以是8位的数 据或地址,也可以是16位的数据或地 址。
• 设变量X存放于R2,函数值Y存放在R3.试 按照下式的要求给Y赋值:
X 1 Y 0 1
X 20 20 X 10 X 10
ORG 0500H • MOV A, R2 ;自变量→(A) • CJNE A,#10,L1 ;(A)与10比较 • L1: JC L2 ;若X<10,则转L2 • ADD A, #01H • MOV R3, A ; 设X>20,Y=1 SJMP L5 • CJNE A,#21,L3 • L3: JNC L4 ;X>20,则转L4 • L5: MOV R3,#0 ; 20≥X≥10 , Y=0 • SJMP L4 • L2: MOV R3,#0FFH • L4: SJMP $ • END
MOV A, R2 RLC A MOV R2, A DJNZ R7,LP2 RET
例:设内部RAM的20H、21H两个单元中存放两个无符 号数,试比较它们的大小,并将较大者存入20H单元中, 较小的数存放在21H单元中。
0RG 1000H CLR C MOV A,20H SUBB A,21H JNC MAX ;若(20H)大,则转移 MOV A,20H XCH A,21H MOV 20H,A MAX:SJMP MAX END
• 完成由汇编语言到机器代码的翻译有两种方法:

人工汇编和机器汇编
操作数; 注释
• 汇编语句格式---标号: 操作码
相关主题