微机原理汇编语言程序设计.ppt_第1页
微机原理汇编语言程序设计.ppt_第2页
微机原理汇编语言程序设计.ppt_第3页
微机原理汇编语言程序设计.ppt_第4页
微机原理汇编语言程序设计.ppt_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

微机原理及应用,MCS-51单片机,第七章 汇编语言程序设计,程序设计语言简介 程序设计的步骤和方法 转移指令和分支程序 循环程序 子程序及其调用 程序设计举例,机器语言 计算机唯一能够识别和执行的语言 汇编语言 “符号语言”,用指令助记符代表机器语言指令 高级语言 面向算法、过程、对象,类似自然语言,可移植性好,须经解释或翻译后才能被执行,程序设计语言简介,汇编,机器语言目标程序,汇编语言源程序,程序设计的步骤和方法,程序设计的步骤 程序设计的方法 常用伪指令 汇编语言格式,程序设计的步骤,分析课题,确定算法和思路 根据算法和思路画出流程图 根据流程图编写程序 上机调试,排除错误,流程图图例,起止框 处理框 判断框 连线,程序设计的方法,结构化设计 模块化设计 开发方法 自底向上开发 先底层开发 自顶向下开发 先顶层开发 混合方法,常用伪指令,定义:仅向汇编程序发出的,并仅由汇编程序在汇编程序中识别和执行的一种汇编控制命令,它本身在目标程序中不产生机器码。 汇编起始伪指令:ORG 汇编结束伪指令:END 定义字节伪指令:DB 定义字伪指令: DW 定义位伪指令: BIT 赋值伪指令: EQU,汇编起始伪指令,格式: ORG 功能:指定汇编源程序编译成机器语言程序 的起始地址 例如: ORG 0000H ljmp 0100H ORG 0100H Start: mov A,#5Ah sjmp $ END,汇编结束伪指令,格式: END 起始地址 功能:停止汇编 示例:ORG 0000H ljmp 0100H ORG 0100H Start: mov A,#5Ah sjmp $ END mov A,#0A5h,定义字节伪指令,格式: DB 功能:把项或项表的数值存入从标号开始的连续单元,其中项或项表可以是一个字节、数或以引号括起来的字符串。 ORG 1000H Dat: DB 11h,22h,A,”BCD” END,定义字伪指令,格式: DW 功能:把项或项表的数值存入从标号开始的连续单元,其中项或项表是一个字(两字节)。 ORG 1000H Dat: DW 1122h,3344h END,定义位伪指令,格式: BIT 功能:定义位变量地址 U BIT 20H.0 V BIT 20H.1 W BIT 20H.2 X BIT 20H.3 Y BIT 20H.4 Z BIT 20H.5 Q BIT 20H.6,赋值伪指令,格式: EQU 功能:定义符号变量值 X EQU 05H Y EQU 06H,汇编语言格式,指令格式: 标号:助记符 参数,参数;注释 伪指令格式: 名字 定义符 参数,参数;注释,参数类型,常数: 01010101B;12D,12;0F1H,59H 67Q;A,a 操作数: A,B,DPTR 表达式 mov A,#(12H-03H),转移指令和分支程序,控制转移类指令 无条件转移指令 条件转移指令 比较转移指令 循环转移指令 分支程序 用cjne实现三分支 用 jmp A+DPTR 实现多分支,无条件转移指令,绝对无条件转移指令 长转移指令 短转移指令 间接转移指令,格式: ajmp addr11; 功能:无条件转向指令中提供的11位地址。 转移范围:2K,PC1511不变 例: ajmp Start,绝对无条件转移指令,a10a9a800001,a7a6 a0,长转移指令,格式: ljmp addr16; (PC) addr16 功能:无条件转向指令中提供的16位地址。 三字节指令,后两个字节为转移的目 标地址.转移范围: 64K 例: ljmp Start,短转移指令,格式: sjmp rel; (PC) (PC)+2, (PC) (PC)+rel 功能:相对转向指令,rel 为一字节补码形式的相对偏移量.转移范围: -128 +127 例: sjmp Loop sjmp $,间接转移指令(散转),格式: jmp A+DPTR; (PC) (A)+(DPTR) 功能:根据A与DPTR的内容转移,转移的 目标地址可变. 例: mov DPTR,JMP_TBL jmp A+DPTR JMP_TBL:ajmp Lable1 ajmp Lable2 . .,条件转移指令,判零转移指令 判位变量转移指令 判位变量并清零转移指令 判布尔累加器C转移指令,判零转移指令,格式: jz rel; rel:8位相对偏移量 功能:(PC)(PC)+2, IF (A)=0 THEN (PC)(PC)+rel ELSE go on 格式: jnz rel; rel:8位相对偏移量 功能:(PC)(PC)+2, IF (A) 0 THEN (PC)(PC)+rel ELSE go on,判位变量转移指令,格式: jb bit,rel; rel:8位相对偏移量 功能:(PC)(PC)+3, IF (bit)=1 THEN (PC)(PC)+rel ELSE go on 格式: jnb bit,rel; rel:8位相对偏移量 功能:(PC)(PC)+3, IF (bit)=0 THEN (PC)(PC)+rel ELSE go on,判位变量并清零转移指令,格式: jbc bit,rel; rel:8位相对偏移量 功能:(PC)(PC)+3, IF (bit)=1 THEN (PC)(PC)+rel and (bit)=0 ELSE go on,判布尔累加器C转移指令,格式: jc rel; rel:8位相对偏移量 功能:(PC)(PC)+2, IF (C)=1 THEN (PC)(PC)+rel ELSE go on 格式: jnc rel; rel:8位相对偏移量 功能:(PC)(PC)+2, IF (C)=0 THEN (PC)(PC)+rel ELSE go on,比较转移指令,格式:cjne (目的字节),(源字节),rel 功能:目的字节与源字节比较,不相等则转移,同时,若目的字节源字节则(C)=0;若目的字节源字节则(C)=1。相等则继续执行。 cjne A,direct,rel; cjne A,#date,rel; cjne Rn,#date,rel; cjne Ri,#date,rel,循环转移指令,格式: djnz Rn,rel; rel:8位相对偏移量 功能:(PC)(PC)+2,(Rn) (Rn)-1 IF (Rn)0 THEN (PC)(PC)+rel ELSE go on 格式: djnz direct,rel; rel:8位相对偏移量 功能:(PC)(PC)+3, IF (direct) 0 THEN (PC)(PC)+rel ELSE go on,用cjne实现三分支,cjne R0,#0,MP1 mov R1,#0 sjmp MP3 MP1:mov A,R0 jnb ACC.7,MP2 mov R1,#0FFh sjmp MP3 MP2:mov R1,#01h MP3:sjmp $,y=,R0x,R1y,用 jmp A+DPTR 实现多分支,KeyB5: mov DPTR,#JMPTBL clr C subb A,#0Ah rl A JMP A+DPTR JMPTBL:ajmp AAA ajmp BBB ajmp CCC ajmp DDD,循环程序,循环程序结构 单循环程序 例1:多字节求和 例2:内部数据区清零 多重循环程序 例3:50ms延时程序,循环程序结构,循环初始化:循环控制变量的初始化、 数据变量的初始化 循环工作部分:循环主体,重复执行的计算 循环控制部分:循环变量的修改、终止控制,例1:多字节求和,ORG 0000H SUM:mov R3,#0 mov R4,#0 mov R0,#50H mov R2,#5 Loop:mov A,R4 add A,R0 mov A,R4 inc R0 clr A addc A,R3,mov R3,A djnz R2,Loop sjmp $ END,例2:内部数据区清零,ORG 0000H Zero:mov R0,#30H mov R7,#10 mov A,#00H Loop:mov R0,A inc R0 djnz R7,Loop sjmp $ END,例3:50ms延时程序,Delay:mov R7,#200 Del1: mov R6,#123 nop Del2: djnz R6,Del2 djnz R7,Del1 sjmp $,;1us ;1us ;1us ;2us ;2us,子程序及其调用,子程序调用与返回指令 子程序设计方法 子程序的调用过程与子程序嵌套 调用过程中的参数传递 通过寄存器传递 通过堆栈传递 通过数据指针(DPTR)传递,子程序调用与返回指令,绝对调用指令 acall addr11;(PC) (PC)+2 ,(SP) (SP)+1 (SP) (PC07) ,(SP) (SP)+1,(SP) (PC815) ,(PC010) addr11 ,(PC1115) 不变 lcall addr16 返回指令 ret; (PC815)(SP),(SP) (SP)-1 (PC07)(SP),(SP) (SP)-1 举例:,子程序调用与返回指令举例,ORG 0000H Start: mov A,#0 acall Sub1 mov A,#0 lcall Sub2 sjmp,Sub1:inc A ret Sub2:dec A ret END,子程序设计方法,格式: ;子程序名 ;子程序功能: ;入口参数: ;出口参数: ;占用资源: 子程序名:. . .,子程序的调用过程与子程序嵌套,主程序要使用子程序时通过call 指令 子程序执行完后通过ret 指令返回 防止自然进入子程序和自然退出子程序 子程序嵌套,通过寄存器传递,方法简单、参数有限 例: ORG 0000H Main:mov R0,#40h mov R7,#10H lcall Zero sjmp $,;子程序名:Zero ;功能:对内部数据区清零 ;入口参数:R0内部数据区 ; R7内部数据区长度 ;出口参数:无 ;占用资源:A,R0,R7 Zero:clr A Loop:mov R0,A inc R0 djnz,R7,Loop ret,通过堆栈传递,ORG 0000H Main:mov 70H,#40h mov 71H,#10H push 70h push 71h lcall Zero sjmp $,;子程序名:Zero ;功能:对内部数据区清零 ;入口参数:70内部数据区地址 ; 71h内部数据区长度 ;出口参数:无 ;占用资源:A,R0,R7,70h,71h Zero:pop DPH pop DPL pop 07h;R7 pop 00h;R0 clr A Loop:mov R0,A inc R0 djnz,R7,Loop push DPL push DPH ret,通过数据指针(DPTR)传递,将待传递参数紧跟在调用指令之后 ORG 0000H Main:nop acall Print DB: ”THIS IS AN EXAMPLE” DB:0AH,0DH,00H Next: nop sjmp $ END,Print:pop DPH pop DPL PPP1:mov A,#00h movc A,A+DPTR inc DPTR jz PPPEnd PPP2:mov P1,A sjmp PPP1 PPPEnd:jmp A+DPTR,程序设计举例,算术运算程序 多字节加法 多字节BCD码减法 逻辑运算程序 数据的拼装 ASCII码二进制 查表程序 以PC为指针 以DPTR为指针 散转程序 转移指令表 地址偏移量表 转向地址表,多字节加法,2F 5B A7 C3 H (43 42 41 40) H + 14 DF 35 B8 H (53 52 51 50) H ORG 0000H Jia: mov R0,#40h mov R1,#50h mov R2,#4 clr C Jia1:mov A,R1 addc A,R0 mov R0,A inc R0,inc R1 djnz R2,Jia1 mov F0,C sjmp $ END,多字节BCD码减法,99 88 77 66 H (43 42 41 40) H - 44 55 66 77 H (53 52 51 50) H ORG 0000H Jia: mov R0,#40h mov R1,#50h mov R2,#4 clr C Jia1:mov A,#9Ah subb A,R1 add A,R0 mov R0,A,inc R0 inc R1 djnz R2,Jia1 mov F0,C sjmp $ END,数据的拼装,x7x6x5x4x3x2x1x0 (20H) y7y6y5y4y3y2y1y0 (21H) y2y0y0x4x3x2x1x0 (30H) ORG 0000H Start: mov 30h,20h anl 30h,#00011111b mov A,21h swap A rl A anl A,#11100000b orl 30h,A sjmp $ END,ASCII码二进制,ORG 0000H AtoH: mov A,#A clr C subb A,#30h cjne A,#0Ah,NEQ sjmp BIG NEQ: jc AEND BIG: subb A,#07h AEND:sjmp $ END,ORG 0000H HtoA: mov A,#0Bh add A,#90h da A addc A,#40h da A sjmp $ END,以PC为指针查表程序,TB1: mov A,R2 add A,R2 mov R3,A add A,#06H movc A,A+PC xch A,R3 add A,#03H movc A,A+PC mov R4,A sjmp $,TAB1:DW 1520,3721,4264 DW7850,3483,32657 DW 883,9943,1000 DW 4051,6785,8931 DW 4468,5871 DW 13284,27808 END,以DPTR为指针查表程序,LTB2: mov DPTR,#TAB2 mov A,R3 clr C rlc A mov R3,A xch A,R2 rlc A xch R2,A add A,DPL mov DPL,A mov A,DPH addc A,R2 mov DPH,A,clr A movc A,A+DPTR mov R2,A clr A inc DPTR movc A,A+DPTR mov R3,A ret TAB2: DW ,使用转移指令表的散转程序,ORG 0000H mov R2,#2 Main:mov DPTR,#TAJ1 mov A,R2 add A,R2 jnc NADD inc DPTR NADD:jmp A+DPTR TBJ1:ajmp PRG0 ajmp PRG1 ajmp PRG2 ajmp PRG3 sjmp $,PRG0:mov A,#0 sjmp Halt P

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论