




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
汇编语言程序设计演示文稿当前1页,总共55页。(优选)汇编语言程序设计当前2页,总共55页。汇编语言特点程序精练,执行速度快,适合于实时控制处理接口技术、中断技术很方便需要熟悉硬件,编程有一定难度高级语言面向对象和问题,接近自然语言,易学易用独立于机器一条语句可对应一段汇编语言程序既然有了高级语言,为什么还要学习汇编语言?当前3页,总共55页。二、汇编语言源程序的格式MCS-51的汇编语句采用典型的四分段格式:标号段操作码段操作数段注释段标号的构成原则是什么?注释段起什么作用? ORG 0030HMAIN: MOV A,#00H ;A←0 MOV R2#0AH ;R2←10 MOV R1,#03H ;R1←3LOOP: ADD A,R1 ;A←A+R1 DJNZR2,LOOP ;未完,转LOOP NOP SJMP $ END当前4页,总共55页。标号构成:大写字母开头后跟字母或数字,最多8个字符。限制条件:禁止用保留字做标号,如MOV、ADD、END等。禁止用寄存器号,如ACC、DPTR等。标号作用:用做符号地址。操作数的表示形式当前5页,总共55页。三、伪指令起始指令:ORG汇编结束:END─指导汇编过程的命令ORG 1000H MOV R0,#50H ;R0←50HMOV@R0,30H ;50H←(30H)SJMP$END当前6页,总共55页。定义字节:DB──定义若干个8位数据例:ORG3000HTABL:DB30H,31H,’2’,’A’汇编后:TABL=3000H
(3000H)=30H, (3001H)=31H, (3002H)=32H, (3003H)=41H,当前7页,总共55页。定义字:DW──定义若干个16位数据汇编后:TAB=3010H
(3010H)=12H
(3011H)=34H
(3012H)=00H
(3013H)=56H
例:
ORG3010HTAB:DW1234H,56H当前8页,总共55页。赋值:EQU──将一个数或符号赋给变量 ORG 1000H AA EQU R1A10 EQU 10HDEL EQU 07E6H MOV R0,A10;R0←(10H) MOVA,AA;A←R1 LCALLDEL ;调用子程序
…… END当前9页,总共55页。位地址赋值:BIT──将位地址赋给字符 ORG 0500H A1 BIT 00H SETB C ;CY←1 MOVA1,C;(20H)0
←1 …… END当前10页,总共55页。四、源程序的汇编第一次汇编:查出机器码,并对应地址列表第二次汇编:计算偏移量什么叫汇编?有几种汇编的方法?1.手工汇编当前11页,总共55页。查书后附录,找出每条指令的机器吗,遇到标号或地址偏移量就先原样照写,按下表所示,对照地址列出来第一次汇编当前12页,总共55页。Rel=目标地址-源地址-3(对3字节指令)第二次汇编
──计算偏移量LOOP=1008H-1003H-3=02HNEXT=1009H-100BH-3=-5,补码为FBH同理可得:$=FEH,HERE=-12,补码为F4H当前13页,总共55页。2.机器汇编利用专用软件(称为汇编程序),由计算机完成汇编工作。经过两次扫描过程:第一次扫描:检查语法错误,确定符号名字;建立使用的全部符号名字表;每一符号名字后跟一对应值(地址或数)。第二次扫描:是在第一次扫描基础上,将符号地址转换成地址(代真);利用操作码表将助记符转换成相应的目标码。
当前14页,总共55页。4.2汇编语言程序的结构一、汇编语言程序设计步骤1.分析题意,明确要求2.建立数学模型并确定算法将控制对象的物理过程归纳为数学模型常见数学模型有:数学表达式数学的推理和判断运行状态的模拟例如:测量距离的数学表达式工件表面形状的数学表达式当前15页,总共55页。3.画程序流程图程序流程图是解题步骤及算法的具体化直观清晰地体现了程序的设计思路4.分配内存单元确定程序与数据区的存放地址熟悉所用单片机指令系统所编程序要正确并具有可读性5.编写程序当前16页,总共55页。6.程序优化缩短程序长度加快运行速度节省存储单元7.上机调试检验源程序的正确性使用开发系统利用仿真软件当前17页,总共55页。二、顺序程序结构
根据ASCII码表,十进制数0~9的ASCII码和它的BCD码之间仅相差30H,本题需要把一个字节的两位BCD数进行拆分,然后分别和30H拼接,即得到相应的ASCII码。程序按顺序执行,无分支,无转移例1:将压缩BCD码转换成ASCII码当前18页,总共55页。源程序XCHD是什么指令?SWAP是什么指令?ORG 0030HMOV R0, #22HMOV @R0 #00HMOV A, 20HXCHD A, @R0ORL 22H, #30HSWAP AORL A, #30HDEC R0MOV @R0, ASJMP $END当前19页,总共55页。三、分支程序结构具有判断和转移功能的程序【例4-4】求符号函数Y的值已知在VAR单元内有一变量X,要求按如下函数关系求Y值,并将结果送到FUNC单元当前20页,总共55页。源程序JNBACC.7,POSI是什么指令? ORG 0030HVAR EQU 30HFUNCEQU 31H MOV A,VAR;A←X JZ DONE ;若X=0,则DONE JNB ACC.7, POSI;若X>0,则POSI MOV A,#0FFH;若X<0,A←-1 SJMP DONE ;转DONEPOSI: MOV A,#01H;A←1DONE: MOV FUNC,A;存结果
SJMP $
END当前21页,总共55页。四、循环程序结构2.先判断后处理1.先处理后判断当前22页,总共55页。例1:已知数块长度L,求累加和已知内部RAM的BLOCK单元开始有一无符号数据块,块长在LEN单元。请编出求数据块中各数累加和、并存入SUM单元的程序当前23页,总共55页。解法一:先处理后判断 ORG 0030HLEN EQU 20HSUM EQU 21HBLOCKEQU 22H CLR A ;A←0 MOV R2,LEN;R2←L MOV R1,#BLOCK;R1←BLOCKNEXT: ADD A,@R1;A←A+(R1) INC R1 ;R1←R1+1 DJNZ R2,NEXT;R2-1≠0转NEXT MOV SUM,A;存结果
SJMP $
END当前24页,总共55页。解法二:先判断后处理程序中INCR2指令有什么用途? ORG 0030HLEN EQU 20HSUM EQU 21HBLOCKEQU 22H CLR A ;A←0 MOV R2,LEN;R2←L MOV R1,#BLOCK;R1←BLOCK INC R2 SJMP CHEKNEXT: ADD A,@R1;A←A+(R1) INC R1 ;R1←R1+1CHEK: DJNZ R2,NEXT;R2-1≠0转NEXT MOV SUM,A;存结果
SJMP $
END当前25页,总共55页。例2:查找最大值算法:逐个比较,大数送指定单元当前26页,总共55页。查找最大值源程序JCNEXT是什么指令?1 ORG 0030HLEN EQU 20HMAX EQU 21HBLOCKEQU 22H MOV MAX,#00H ;A←0 MOV R0,#BLOCK ;R2←LLOOP: MOV A,@R0 ;A←数据
CJNE A,MAX,NEXT1NEXT1: JC NEXT;A<(MAX)则转
MOV MAX,A;MAX←大数NEXT: INC R0 ;R2-1≠0转NEXT DJNZ LEN,LOOP;存结果
SJMP $
END当前27页,总共55页。五、主程序调用子程序结构绝对调用:ACALLaddr11长调用:LCALLaddr16子程序返回:RET当前28页,总共55页。例:将一批压缩BCD码转换成ASCII码
编写程序,把以R0为首地址的压缩BCD码转换为ASCII码,存于以R1为首地址的片内RAM中,已知BCD数的字节数在R2中
BCD码与ASCII码之间是什么关系呢?当前29页,总共55页。
BCD码ASCII码
0 30H 1 31H 2 32H 3 33H 4 34H 5 35H 6 36H 7 37H 8 38H 9 39H(A)+30H[]ASCII将其编成子程序,如下所示
当前30页,总共55页。 ORG 0000HSTART:MOV A, @R0 ACALLGT ;调用转换子程序
MOV @R1,A ;存转换结果
INC R1 MOV A, @R0 ;再取原BCD码字节
SWAPA ;高4位交换到低4位
ACALLGT ;调用转换子程序
MOV @R1,A INC R0 INC R1 DJNZ R2, START;未完继续
HRER:SJMP HERE GT: ANL A, #0FH ;屏蔽高4位
ADD A, #30H ;求相应的ASCII码
RET END
然后再编写主程序,调用下面子程序实现本题要求本例的参数传递方式为传递数据当前31页,总共55页。下次课前请预习4.3-4.4节,并思考下列问题欲将外部RAM起始地址为DATA的数据块(设数据块长度为20)传送到内部RAM起始地址为30H的存储区,应如何编程?已知以外部RAM2000H为起始地址的存储区有20个有符号数,要求把正数和正零取出来存放到内部RAM以20H为起始地址的存储区(负数和负零不作处理),如何编程?当前32页,总共55页。练习题一已知被除数和除数都是8位无符号数,欲将这两数相除,并把商和余数放到指定单元,试说明编程思路已知X和Y都是8位无符号数,要完成如下计算
Z=3X+2Y,并将结果Z(设Z<255)送到指定单元,试说明编程思路当前33页,总共55页。4.3算术运算程序设计运算程序加法程序减法程序乘法程序除法程序当前34页,总共55页。一、加法程序例1:3字节加法程序当前35页,总共55页。多字节无符号数相加的算法间接寻址,循环相加当前36页,总共55页。3字节加法源程序程序中为什么要用CLRC这条指令?
ORG 1000H
MOV R0,
#BLOCK1
;R0←BLOCK1
MOV R1,
#BLOCK2
;R1←BLOCK2
MOV R3,
#03H ;字节数送R3
CLR C
;清进位LOOP:
MOV A, @R0 ;取被加数 ADDC A, @R1 ;加上加数 MOV @R0, A ;存和 INC R0
;修改被加数指针 INC R1
;修改加数指针 DJNZ R3, LOOP ;R3-1≠0转LOOP SJMP $ END当前37页,总共55页。例2:8位有符号数加法运算例:设在BLOCK和BLOCK+1单元中有两个补码形式的有符号数。请编出求两数之和,并把它放在SUM和SUM+1单元(低8位在SUM单元)的程序
算法:两个8位二进制有符号数相加,其和可能会超过8位数,故需要用16位表示,因此要先将这两个加数扩展成16位二进制补码,然后再相加当前38页,总共55页。将8位二进制有符号数扩展成16位的方法对正数,高8位补0对负数,高8位补1当前39页,总共55页。8位有符号数加法运算源程序
ORG
1000H
MOVR0,#BLOCK
;R0←BLOCK1
MOVR1,#SUM
;R1指向和单元MOVR2,#00H;高位先令其为零MOVR3,#00HMOVA,@R0
;取一个加数 JNBACC.7,POS1
;若为正数,则转POS1MOVR2,#0FFH;若为负,R2←全“1”当前40页,总共55页。POS1: INC
R0
;R0指向下一个加数MOV
B,
@R0
;取第二加数到BJNB
B.7,
POS2;若为正数,则转POS2
MOV
R3,
#0FFH;若为负,R3←全“1”POS2:
ADD
A,
B
;低8位相加MOV
@R1,
A
;存低8位和INC
R1
;指向SUM+1MOV
A,
R2ADDC
A,
R3
;完成高8位求和MOV
@R1,
A
;存高8位和
RET END当前41页,总共55页。二、减法程序在BLOCK1和BLOCK2为起始地址的片内RAM中分别有5字节无符号被减数和减数。要求将它们相减,并把差值放入BLOCK1为起始地址的片内RAM中多字节无符号数减法程序的算法:间接寻址,循环相减当前42页,总共55页。5字节无符号数减法子程序 ORG1000HMOVR0,#BLOCK1 ;被减数始址送R0MOVR1,#BLOCK2;减数始址送R1MOVR2,#05H ;字长送R2 CLRC ;Cy清零LOOP:MOVA,@R0 ;被减数送ASUBBA,@R1 ;相减
MOV@R0,A ;存差
INCR0 ;修改被减数指针
INCR1 ;修改减数地址指针
DJNZR2,LOOP ;若未完,则LOOPRETEND当前43页,总共55页。三、乘除法程序例:设R0和R1中有两个补码形式的有符号数,要求编写求两数之积并把积送入R3R2的程序
MCS-51乘法指令是对两个无符号数求积的。若要对两个有符号数求积,可采用对符号位单独处理的办法,步骤如下:单独处理积的符号位将被乘数和乘数的绝对值相乘得积的绝对值求乘积的补码:若积为正,则补码就是原码;若积为负,则对乘积的绝对值求补当前44页,总共55页。8位有符号数乘法程序框图当前45页,总共55页。8位有符号数乘法源程序SBITBIT20H.0SBIT1BIT20H.1SBIT2BIT20H.2MOVA,R0 ;被乘数送ARLCA ;被乘数符号送CyMOVSBIT1,C;送入SBIT1MOVA,R1 ;乘数送ARLCA ;乘数符号送CyMOVSBIT2,C ;送入SBIT2ANLC,/SBIT1;SBIT2∧/SBIT1送CyMOVSBIT,C;送入SBITMOVC,SBIT1;SBIT1送CyANLC,/SBIT2;SBIT1∧/SBIT2送CyORLC,SBIT;积的符号位送CyMOVSBIT,C;送入SBITMOVA,R0 ;处理被乘数
JNBSBIT1,NCH1;若它为正,则转NCH1CPLA ;若它为负,则求补得绝对值
INCA当前46页,总共55页。8位有符号数乘法源程序(续)NCH1:MOVB,A ;被乘数绝对值送BMOVA,R1;处理乘数
JNBSBIT2,NCH2;若它为正,则转NCH2CPLA ;若它为负,则求补得绝对值
ADDA,#01HNCH2:MULAB ;求积的绝对值
JNBSBIT,NCH3;若它为正,则转NCH3CPLA ;若它为负,则低字节求补
ADDA,#01HNCH3:MOVR2,A ;积的低字节存入R2MOVA,B ;积的高字节送AJNBSBIT,NCH4;若它为正,则转NCH4CPLA ;若它为负,则高字节求补
ADDCA,#00HNCH4:MOVR3,A;积的高字节存入R3SJMP$ END跟00H相加有什么意义?当前47页,总共55页。4.4非数值操作程序设计非数值操作程序码制转换程序查表程序检索程序当前48页,总共55页。一、码制转换程序例:单字节二进制数→
BCD码当前49页,总共55页。单字节二进制数→
BCD码算法单字节无符号数最大可能是255,其中所包含的100(64H)的个数即为BCD码的百位数;扣去百位数后的余数中所包含的10(0AH)的个数即为BCD码的十位数;扣去十位数后的余数即为BCD码的个位数转换后的结果放在(30H)(31H)中,如下所示:
百30H个31H十当前50页,总共55页。单字节二进制数→
BCD码源程序
ORG
1000HFIRSTEQU30HSECONDEQU31H
MOV A, 20H ;
A
←被除数
MOV
B, #64H
;
B
←100 DIV AB
;
A/B=A…B
MOV
FIRST, A
;FIRST←百位 MOV A, B
;
A
←余数
MOV
B, #0AH ;
B
←
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024初级社会工作者职业资格笔试考前冲刺必刷题附答案
- 售后服务保证书经典案例3篇
- 工程款项处理委托书
- 建筑施工安全生产合同模板3篇
- 咖啡店周末店长协议3篇
- 分居离婚协议范本3篇
- 学校预防传染病工作方案(5篇)
- 一年级音乐教师工作总结(5篇)
- 厂家指定委托3篇
- 助贷委托服务协议合同模板3篇
- 《中药鉴定技术》课件-五味子的鉴定
- 大数据 AI大模型-智慧统计大数据平台解决方案(2023版)
- 江苏省安全员《B证》考试题库及答案
- 自杀及其预防课件
- 灰姑娘童话故事
- 铅锌矿的冶炼技术进展与设备改进
- 等离子切割机操作手册与安全操作规程
- 印刷合同:纸袋印刷合作
- 快学Scala(中文版第2版)
- 人工智能知识竞赛题库(含答案)
- 乡土中国第二课
评论
0/150
提交评论