1 / 18

第四章 汇编语言程序设计 一 . 汇编语言的结构: LOOP : ADD A , 30H ;( A ) + ( 30H )送 A

第四章 汇编语言程序设计 一 . 汇编语言的结构: LOOP : ADD A , 30H ;( A ) + ( 30H )送 A 标号 操作码 操作数 注释 二. 常用伪指令: 伪指令是供汇编程序用的,不产生目标代码,不使 CPU 产生一定动作。 1 . ORG nnH 起点指令 规定该指令后的程序或数据块的起始地址,例 ORG 8100H. 2 . DB 定义字节 例: ORG 2100H

clark
Download Presentation

第四章 汇编语言程序设计 一 . 汇编语言的结构: LOOP : ADD A , 30H ;( A ) + ( 30H )送 A

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第四章 汇编语言程序设计 一.汇编语言的结构: LOOP:ADD A, 30H ;(A)+(30H)送 A 标号 操作码 操作数 注释 二. 常用伪指令: 伪指令是供汇编程序用的,不产生目标代码,不使CPU产生一定动作。 1.ORG nnH起点指令 规定该指令后的程序或数据块的起始地址,例 ORG 8100H

  2. 2.DB定义字节 例: ORG 2100H FIRST:DB 01,02,03,15,78 其中ORG指定以下数据块从2100H开始存放(FIRST), DB指定2100H开始的单元存放01,02,03,15,78 3.DW定义十六位数据 例 ORG 8000H DW 7603H,7589H 则: (8000H)=76H (8001H)=03H (8002H)=75H (8003H)=89H

  3. 4.DS定义若干空单元 例: ORG 5000H DS 07H MOV A,#7AH ADD A, #22H ……….. 从5000H开使予留七个空单元以备后用,MOV A,#7AH指令从5007H开始存放。 5.EQU等值,取代的意思。一般用于为标号赋值。 例: AA EQU BB 则该指令后所有AA与BB等价。 LOOP: EQU 8300H LOOP标号的地址为8300H 6. END汇编语言程序结束标志。

  4. 三.程序设计的一般步骤: 1.弄请问题的性质,目的,已知数据,运算精度,速度,找出相应的数学模型或逻辑模型与之对应。 2.确定算法:把实际问题化成计算机求解的步骤和方法。 3.画流程图:将程序的流程用一系列图形和符号的形式表示出来,称程序框图。 流程图画法常用符号: ①椭圆框 用于表示程序的开始和结束。 开 始

  5. ②矩形框 工作框,用于说明一段程序的功能。 框内简明扼要地说明该程序段功能。 ③菱形框 判断框(逻辑框) 用于进行判断,规定程序转向。 ④圆形框 结合子,两处程序连接符号。 4.编写源程序并汇编。 5.上机调试并修改。 移入高四位 为0? A = B?

  6. 四.程序设计举例 1.直接程序(顺序程序) 例1 数据拼装 要求将20H单元低5位送入30H单元低5位 21H单元低3位送入30H单元高3位 MOV 30H,20H ; 取20H单元的数 ANL 30H,#00011111B ;切取低5位 MOV A, 21H ; 取21H单元的数 SWAP A ; 低4位移入高4位 CLR C RLC A ;原21H低3位移入高3位 ANL A,#11100000B ;切取高3位 ORL 30H ,A ;拼凑字节

  7. 例2 将7CH中的`两位BCD码拆开,高位送R6,低位送R5 MOV R1 ,#7CH 7CH MOV A,#0 XCHD A,@R1 R6 R5 MOV R5 ,A MOV A, 7CH SWAP A MOV R6, A 5 6 0 5 0 6

  8. 例3 查表程序:例如用热敏电阻温度计测量0~80°C的温度,热敏电阻的输出与温度的对应关系为: t°C 0 10 20 30 40 50 60 70 80 输出mv 0 1 2 3 4 5 6 7 8 将测温得到的输出mv级信号通过A/D转换成为数字量接入计算机,计算机采样存入片内RAM 20H单元,然后査表得到所测温度值存入21H单元,查表程序如下:

  9. ORG 8000H TEM: PUSH DPH PUSH DPL MOV DPTR , #TABEL MOV A, 20H ;测温所得输出mv级信号的数 字量送入A MOVC A, @ A+DPTR MOV 21H, A ;查表所得对应温度值送入21H单元 POP DPL POP DPH RET

  10. TABEL: EQU 8100H TABEL: DB 0 ;0mv DB 10 ;1mv DB 20 ;2mv DB 30 ;3mv DB 40 ;4mv DB 50 ;5mv DB 60 ;6mv DB 70 ;7mv DB 80 ;8mv

  11. 2.分支程序 例1 从30H和31H两个无符号数中找出较小者送入32H单元。 CLR C MOV R0 ,#30H    ; (R0)指向1数 MOV A, @R0     ; 取1数送A INC R0 ; (R0)指向2数 SUBB A, @R0 ; 1数减2数 JNC STORE ; C=0,则1数≥2数C=1则2数大 DEC R0 ; 修改(R0),使其指向较小数 STORE: MOV 32H ,@R0 ;存较小数 SJMP $

  12. 例2 从30H-3FH中找出非零字节送往40H单元开始排放,所送非 零字节个数存入R3 MOV R0, #30H ;(R0)指向源数据单元 MOV R1, #40H ;(R1)指向非零字节存储区首址 MOV R2 , #10H ; R2计数16个单元 MOV R3 , #0 ; R3非零字节个数计数单元清零 SF: MOV A , @R0 JZ SFZ ;为零跳下 MOV @R1, A ;送非零字节 INC R3 ;非零字节个数计数 INC R1 ;修改非零字节存储区指针 SFZ: INC R0 ;修改源数据区指针 DJNZ R2, SF ;查完了吗? END

  13. 3.循环程序: 例1 对数据区的30H单元开始清零64个单元 MOV R0, #30H MOV R7, #64 MOV A, #0 LOOP: MOV @R0, A INC R0 DJNZ R7 ,LOOP

  14. 例2 计算一串8位二进制无符号数之和,假定数串长度50个,排放在30H单元开始的RAM中,并假定累加和不大于8位二进制数。 MOV R0, #30H MOV R1, #50 MOV A, #0 LOOP: ADD A, @R0 INC R0 DJNZ R1, LOOP STOP: MOV 65H, A

  15. 例3 软件延时——多重循环 ※时序的概念 一条指令可分解成若干微操作,而这些微操作所对应的脉冲信号在时间上有严格的先后次序,这种次序就是计算机的时序。 计算机时序的基本概念: ①振荡周期:为单片机提供定时信号的振荡源周期。P3页图是常用 的振荡电路,它用外接晶振作为定时单元, 晶振频率f在1.2MHZ~12MHZ之间。 1振荡周期=1/f ②状态周期: 1状态周期=2×振荡周期 常又把一个状态周期分为两个状态, 称P1状态,P2状态。

  16. ③机器周期: 1机器周期=12×振荡周期=12/f 可用机器周期把一条指令划分成若干阶段,每个机器周期完成 某些规定动作 ④指令周期:指完成一条指令所需的全部时间。各条指令不等。 以6MHZ晶振为例: 1振荡周期=1/6M=1/6μs 1状态周期=2×振荡周期=1/3μs 1机器周期=12/f= 2μs 1指令周期=2~8μs 执行每条指令需要的机器周期数可在指令表中查到。 延时程序就是计算机重复执行一些指令,累积的时间就是软件延时的时间。

  17. 例: 每条指令执行 执行 总机器 机器周期数T 次数 周期数 D15MS:MOV R5, #N 1 1 1 DD1: MOV R7, #M 1 N N DD2: NOP 1 MN MN NOP 1 MN MN NOP 1 MN MN DJNZ R7,DD2 2 MN 2MN DJNZ R5,DD1 2 N 2N RET 2 1 2 执行该程序所需总机器周期数为: 5MN+3N+3

  18. 忽略3机器周期,令该延时程序延时时间等于15ms,忽略3机器周期,令该延时程序延时时间等于15ms, 以6MHZ为例,T=2μs 则:(5MN+3N)×2×10-6=15×10-3 取 M=100 则:当N=14 ,延时时间为14.084ms 当 N=15 , 延时时间为15.09ms

More Related