欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    计算机原理及应用.ppt

    • 资源ID:73980237       资源大小:369.50KB        全文页数:29页
    • 资源格式: PPT        下载积分:11.9金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要11.9金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    计算机原理及应用.ppt

    3.4 汇编语言程序设计一、汇编语言的特点与语句格式汇编语言的特点与语句格式 编程语言:机器语言、汇编语言、高级语言汇编语言、高级语言 1、汇编语言、汇编语言特点:汇编语言程序代码生成效率高,运行速度快;汇编语言程序的开发难度较大;汇编语言控制的实时性好;汇编语言的可移植性较差;2、汇编语言的语句格式:标号:操作码 操作数;注释 二、汇编语言程序设计的特点二、汇编语言程序设计的特点1、要求程序员要数据、程序空间的分配与使用作出具体的安排;2、要求开发人员具有较好的硬件知识;3、汇编语言程序设计的技巧较高 1.建立数学模型;2.确定算法;3.绘制流程图;4.确定数据结构;5.编写源程序;6.调试程序。三、汇编语言程序设计步骤:三、汇编语言程序设计步骤:四、评价标准:四、评价标准:1.程序执行时间;2.内存占用量;3.逻辑性与可读性4.可扩展性5.可靠性。五、汇编语言开发过程五、汇编语言开发过程3、连接程序u如果汇编语言产生浮动代码(由A51汇编产生的OBJ文件)u则由连接程序形成执行代码。1、汇编语言源程序u由编辑软件建立,是ASCII文件u符合汇编语言规范u扩展名为ASM或A514、调试程序u一般在开发系统下调试。u开发系统:TMSD清华大学计算机工厂。周立功单片机()、Keil软件包。u调试:代码调试,符号调试。2、汇编程序u将汇编程序翻译成机器码u形成HEX文件5、固化u由将目标程序转化成HEX格式或二进制映像文件u由编程器固化,嵌入到目标板中五、汇编语言开发过程五、汇编语言开发过程2、语句格式的规定u指令语句(4个字段)标号标号:助记符助记符 操作数操作数;注释;注释u伪指令语句(4个字段)名字名字 定义符定义符 参数参数 ;注释;注释1、语句的三种类型u指令语句:指令语句:汇编时,一条指令产生一个目标代码;u伪指令语句:伪指令语句:服务于汇编语言,汇编时不对应目标代码;u宏指令语句:宏指令语句:用来代替源程序中重复使用的程序段汇编时,产生相应的目标码。六、汇编语言伪指令六、汇编语言伪指令1、程序段起始说明:ORG标号:ORG 16位地址 例:ORG 1000H START:MOV A,#12H指定程序的起始地址(1000H)如果地址用标号:ORG BEGINPROG :则程序起始于浮动地址2、汇编结束:END标号:END位于程序最后,表示汇编结束子程序中可不使用标号3、字节数据定义伪指令DB(Define Byte)和DW例:TAB DB 0,4,8,16,32 数据存入TAB为起始地址的连 续字节字节存储单元中如DB改成DW,则按字存放数据4、等值伪指令EQU(Equale):例:DDR EQU 1020H(不可改)5、保留存储区说明伪指令例:STA DS 10H从STA开始保留10H个单元备用6、位地址符号定义伪指令BIT QIDONG BIT P1.0 FLAG BIT 20H 3.5.1 3.5.1 汇编语言程序的基本结构形式汇编语言程序的基本结构形式常采用以下几种基本结构:常采用以下几种基本结构:顺序结构、分支结构和循环结构,再加上广泛使用的子程序和中断顺序结构、分支结构和循环结构,再加上广泛使用的子程序和中断服务子程序。服务子程序。1 1顺序结构顺序结构 2 2分支结构分支结构 程序中含有转移指令,程序中含有转移指令,无条件分支,有条件分支无条件分支,有条件分支。有条件分支又分为:有条件分支又分为:单分支单分支结构和结构和多分支多分支结构。结构。3 3循环结构循环结构 4 4子程序子程序 5 5中断服务子程序中断服务子程序3.5 汇编语言实用程序设计 3.5.1 3.5.1 顺序程序设计顺序程序设计(一)数据传送程序设计u例:在代码段中,以CSTR单元开始连续存放一个以NULL(ASCII码0)为结束标志的字符串,将其传送到以STR开始的内部RAM中,试编程。u说明:1、伪指令DB定义字符串,最后一个字节为标志NULL。2、由DPTR寻址源串,用MOVC指令取代码段中的数据。3、R0为目的串指针,寻址内部RAM。&思考题:如何将代码段中的字思考题:如何将代码段中的字符串传递到外部符串传递到外部RAM中中?u程序:uSTR EQU 30HuMCSTR:MOV R0,#STRu MOV DPTR,#CSTRuMCSTR1:CLR Au MOVC A,A+DPTRu JZ MCSTR2u MOV R0,A;内部RAMu INC R0 u INC DPTR u SJMP MCSTR1uMCSTR2:RETu CSTR:DB HELLO,0顺序程序设计顺序程序设计例例:单字节压缩单字节压缩BCD码转二进制码子程序码转二进制码子程序:设两个设两个BCD码码d1d0表示的两位十进制数压缩存储在表示的两位十进制数压缩存储在R2中,转换结果存于中,转换结果存于R2。算法:二进制码算法:二进制码=d1*10+d0 BCD2B:ORG4000HMOVA,R2ANLA,#0F0HSWAP AMOVB,#0AHMULABMOVR3,AMOVA,R2ANLA,#0FHADDA,R3MOVR2,ARET 特点是程序中含有转移指令,转移指令有分为特点是程序中含有转移指令,转移指令有分为无条件转移无条件转移和和有有条件转移条件转移,因此分支程序也可分为无条件分支转移程序和有条,因此分支程序也可分为无条件分支转移程序和有条件分支转移程序。有条件分支转移程序按结构类型来分,又分件分支转移程序。有条件分支转移程序按结构类型来分,又分为为单分支转移单分支转移结构和结构和多分支转移多分支转移结构。结构。3.5.2 3.5.2 分支结构分支结构29u单分支指令:JZ、JB、JC、SJMP寻址范围(rel):-128127Bu多分支指令:JMP A+DPTR(256个)DPTR转移程序首地址转移程序首地址CJNE A,direct,rel(共4条)A、单分支转移结构单分支转移结构仅有两个出口,两者选一。仅有两个出口,两者选一。例例 求单字节有符号数的二进求单字节有符号数的二进制补码。制补码。参考程序:参考程序:CMPT:JNB Acc.7,RETURN;(;(A)0,不需转换,不需转换MOV C,Acc.7;符号位保存;符号位保存CPL A;(;(A)求反,加)求反,加1ADD A,#1;MOV Acc.7,C;符号位存;符号位存A的最高位的最高位RETURN:RET此外,单分支选择结构还有如图此外,单分支选择结构还有如图4-44-4、图、图4-54-5等所示的几种形式:等所示的几种形式:程序的判别部分有两个以上的出口流向,常见的有两种类型。例:在累加器A中的存放一个07的数据,由该数据控制程序转向转向8个子程序中的一个。Y程序清单:YSTART:ANL A,#07H;屏蔽高5位Y MOV B,#3 ;LJMP为3字节Y MUL ABY MOV DPTR,#BRNHY JMP A+DPTRYBRNH:LJMP PROC1Y LJMP PROC2Y LJMP PROC3Y LJMP PROC4Y LJMP PROC5Y LJMP PROC6Y LJMP PROC7Y LJMP PROC8说明:uPROC1PROC8是8个子程序名。(三)多分支程序设计多分支程序设计例题:多分支程序设计例题:有符号数X存于内部RAM的DATA单元,Y存于FUNC单元,按以下要求编程实现给Y赋值。绘出程序框图。程序清单:ORG4000HMOVA,DATA;取出X送AJZ COMP;若X=0则转移到COMPJNBACC.7,POSI;若X0则转移到POSIMOVA,#0FFH;若X0时A=1COM:MOV FUNC,A;存函数Y值HERE:SJMPHERH;结束 循环程序设计循环程序设计特点是程序中含有可以反复执行的程序段,该程序段通常称为特点是程序中含有可以反复执行的程序段,该程序段通常称为循环体。例如求循环体。例如求100个数的累加和,则没有必要连续安排个数的累加和,则没有必要连续安排100条条加法指令,可以只用一条加法指令并使其循环执行加法指令,可以只用一条加法指令并使其循环执行100次。次。(1)可大大缩短程序长度()可大大缩短程序长度(2)使程序所占的内存单元数量少)使程序所占的内存单元数量少(3)使程序结构紧凑和可读性变好。)使程序结构紧凑和可读性变好。一、循环程序的结构一、循环程序的结构(四部分)四部分)1循环初始化循环初始化循环初始化程序段用于完成循环前的的准备工作。例如,循环循环初始化程序段用于完成循环前的的准备工作。例如,循环控制计数初值的设置、地址指针的起始地址的设置、为变量预控制计数初值的设置、地址指针的起始地址的设置、为变量预置初值等。置初值等。2循环处理循环处理循环程序结构的核心部分,完成实际的处理工作,是需反复循循环程序结构的核心部分,完成实际的处理工作,是需反复循环执行的部分,故又称循环体。这部分程序的内容,取决于实环执行的部分,故又称循环体。这部分程序的内容,取决于实际处理问题的本身。际处理问题的本身。一、循环程序的结构一、循环程序的结构(四部分)四部分)3循环控制循环控制在重复执行循环体的过程中在重复执行循环体的过程中,不断修改循环控制变量,直到符合不断修改循环控制变量,直到符合结束条件结束条件,就结束循环程序的执行。循环结束控制方法分为循环就结束循环程序的执行。循环结束控制方法分为循环计数控制法和条件控制法计数控制法和条件控制法4循环结束循环结束这部分是对循环程序执行的结果进行分析、处理和存放。这部分是对循环程序执行的结果进行分析、处理和存放。二、循环结构的控制二、循环结构的控制 图图4-8是计数循环控制结构是计数循环控制结构(until 型型)图图4-9是条件控制结构是条件控制结构(do while 型型)特点:u循环体至少执行一次;u初始化,设定计数初值等;u循环次数,由计数器决定;u计数器,减1计数,回0结束。MCS-51的指令系统提供了功能极强的循环控制指令:DJNZ Rn,rel;DJNZ direct,rel;1计数循环结构计数循环结构(until 型型)例:软件延时子程序例:软件延时子程序DELAY:MOV R2,#data ;指令周期数指令周期数=1DELAY1:DJNZ R2,DELAY1;指令周期数指令周期数=2RET延时时间延时时间=1(第一条指令周期)(第一条指令周期)+(R2)2(周期数)(周期数)延时范围:延时范围:3513个机器周期,由个机器周期,由(R2)决定决定影响影响CPU工作效率工作效率注意:软件延时程序,不允许有中断,否则将严重影响定时的准确注意:软件延时程序,不允许有中断,否则将严重影响定时的准确性。性。计数循环结构程序设计:计数循环结构程序设计:嵌套循环:嵌套循环:2重以上的循环,内外层分明,且不能交叉重以上的循环,内外层分明,且不能交叉例例2、定时程序如下:、定时程序如下:MOV R5,#TIME1 LOOP2:MOV R4,#TIME2 LOOP1:NOP NOP DJNZ R4,LOOP1 DJNZ R5,LOOP2 RET 该定时程序的执行时间为:该定时程序的执行时间为:T=(1+1+2)*TIME2+1+2)*TIME1+1)*T0 其中其中 T0为单片机的机器周期为单片机的机器周期 嵌套循环:嵌套循环:2重以上的循环,内外层分明,且不能交叉重以上的循环,内外层分明,且不能交叉例例1、50ms延时程序延时程序(设系统为设系统为12M的晶振的晶振)DELAY:MOV R7,#200 DELAY_1:MOV R6,#123 NOP DELAY_2:DJNZ R6,DELAY_2 DJNZ R7,DELAY_1 RET 计算:【(123*2+1+1)+2】*200=250*200us+1例例 设有一串字符,依次存放在内部RAM从30H单元开始的连续单元中,该字符串以0AH为结束标志,编写测试字符串长度的程序。(同前)2条件控制结构条件控制结构(do while 型型)特点:当第一次条件不成立时,循环体一次也不执行3.5.4 3.5.4 子程序的设计子程序的设计一、子程序设计原则和应注意的问题一、子程序设计原则和应注意的问题 一种能完成某一特定任务的程序段。其资源要为所有调用程序共享。因此,一种能完成某一特定任务的程序段。其资源要为所有调用程序共享。因此,子程序在结构上具有独立性和通用性,在编写子程序时应注意以下问题:子程序在结构上具有独立性和通用性,在编写子程序时应注意以下问题:1子程序的首条指令的地址称为子程序入口地址。该指令前必须有标号。子程序的首条指令的地址称为子程序入口地址。该指令前必须有标号。2主程序调用子程序,主程序调用子程序,两条子程序调用指令:两条子程序调用指令:(1)绝对调用指令:)绝对调用指令:ACALL addr11(2)长调用指令:)长调用指令:LCALL addr163注意设置堆栈指针和现场保护注意设置堆栈指针和现场保护4最后一条指令必须是最后一条指令必须是RET指令指令5子程序可以嵌套,即子程序可以调用子程序子程序可以嵌套,即子程序可以调用子程序6在子程序调用时,还要注意参数传递的问题在子程序调用时,还要注意参数传递的问题 二、二、子程序的基本结构子程序的基本结构 MAINMAIN:;MAINMAIN为主程序或调用程序标号为主程序或调用程序标号 LCALL SUB LCALL SUB;调用子程序;调用子程序SUBSUB SUB:PUSH PSW;现场保护;现场保护PUSH ACC;子程序处理程序段子程序处理程序段POP ACC;现场恢复;现场恢复POP PSW;RET;最后一条指令必须为;最后一条指令必须为RETP87 例例7 将将HEX单元存放的两个十六进制数分别转换为单元存放的两个十六进制数分别转换为ASCII码(自己码(自己阅读)阅读)3.6 程序设计举例 3.6.1 码制转换程序设计u在单片机应用程序的设计中,经常涉及到各种码制的转换问题。在单片在单片机应用程序的设计中,经常涉及到各种码制的转换问题。在单片机系统内部进行数据计算和存储时,经常采用二进制码,具有运算方便、机系统内部进行数据计算和存储时,经常采用二进制码,具有运算方便、存储量小的特点。在输入存储量小的特点。在输入/输出中,按照人的习惯均采用代表十进制数输出中,按照人的习惯均采用代表十进制数的的BCDBCD码(用码(用4 4位二进制数表示的十进制数)表示。此外,打印机要打印位二进制数表示的十进制数)表示。此外,打印机要打印某数字字符,则需要将该数字的二进制码转换为该字符的某数字字符,则需要将该数字的二进制码转换为该字符的ASCIIASCII码,才码,才能送到打印机去打印。能送到打印机去打印。二进制码到二进制码到BCD码之间的转换码之间的转换 BCD码有两种形式:一种是码有两种形式:一种是1个字节放个字节放1位位BCD码码,它适用于,它适用于显示或输出,一种是显示或输出,一种是压缩的压缩的BCD码码,即,即1个字节放两位个字节放两位BCD码,码,可以节省存储单元。可以节省存储单元。二(十六)进制码与二(十六)进制码与ASCII码之间的转换(教材例题)码之间的转换(教材例题)累加器A0HASCII码入口出口Y程序段:YHASC:ANL A,#0FHY ADD A,#90HY DA A ;(A)9时起作用Y ADDC A,#40HY DA A ;(A)=9时起作用Y RET 1、十六进制转换成ASCII码输入:(A)中存放一位十六进制;出口:(A)返回ASCII值2、ASCII码转换成十六进制数输入:(A)中存放ASCII码输出:(A)中返回十六进制Y程序:YATOH:CLR CY SUBB A,#30H Y CJNE A,#10,ATOH1YATOH1:JC ATOH2 ;(A)9YATOH2:RET 3.6.1 码制转换程序设计十六进制数 ASCII BCD差值 09 30H39H 30H AF(大写)41H46H 31HASCII码 十六进制数 差值09(039H)09 30HAF(41H46H)AF 37HBCD1 BCD0BCD3 BCD2 BCDU BINB例:在内部RAM中,BCDU单元开始存放4位压缩BCD码(低位在前),将其化成二进制数存于BINB开始的单元中(低位在前),试编程。MOV A,BINB;将前一次结果10MOV B,#10MUL ABPUSH B;B位高8位的积MOV BINB,A;存低字节积MOV A,BINB+1MOV B,#10MUL ABPOP B ;取高8位积ADD A,BMOV BINB+1,A;送到高位字节POP ACC;取BCD3ADD A,BINBMOV BINB,A;存低位字节CLR AADDC A,BINB+1;加低字节进位MOV BINB+1,A;存到高二进制RET3、BCD码转换成二进制数BCDU EQU 30HBINB EQU 32HDTOB:CLR A MOV BINB,A MOV BINB+1,A MOV A,BCDU+1 SWAP A;取BCD3 LCALL MLADD;分支 MOV A,BCDU+1;取BCD2 LCALL MLADD MOV A,BCDU;SWAP A;取BCD1 LCALL MLADD MOV A,BCDU;取BCD0 LCALL MLADD RETMLADD:ANL A,#0FH PUSH ACCBCD1 BCD0BCD3 BCD2BCDUBINBYBTOD:CLR AY MOV R3,AY MOV R4,AY MOV R5,AY MOV R2,#16YBTOD1:MOV A,BINBY ADD A,BINBY MOV BINB,AY MOV A,BINB+1Y ADDC A,BINB+1Y MOV BINB+1,A Y MOV A,R3Y ADDC A,R3Y DA AY MOV R3,AY MOV A,R4Y ADDC A,R4Y DA AY MOV R4,AY MOV A,R5Y ADDC A,R5Y DA AY MOV R5,AY DJNZ R2,BTOD1;R2非零循环非零循环Y RET284、将二进制转换成压缩BCD码例:在内部例:在内部RAM的的BINB开始的开始的单元中存放一个单元中存放一个16位二进制无符位二进制无符号数,将其化成压缩号数,将其化成压缩BCD码,存码,存于于R5R3中,试编程。中,试编程。3.6.2 查表程序设计查表程序可以实现数据补偿、修正、计算、转换等各种功能,具有程序查表程序可以实现数据补偿、修正、计算、转换等各种功能,具有程序简单、执行速度快等优点。简单、执行速度快等优点。查表就是根据自变量查表就是根据自变量x,在表格中寻找在表格中寻找y,使使y=f(x)。执行查表指令时,发出读程序存储器选通脉冲执行查表指令时,发出读程序存储器选通脉冲/PSEN。两条查表指令:两条查表指令:MOVC A,A+DPTR MOVC A,A+PC例例1 子程序的功能为:根据累加器子程序的功能为:根据累加器A中的数中的数x(09之间)查之间)查x的平方表的平方表y,根据,根据x的值查出相应的平方的值查出相应的平方y。x和和y均为单字节数。均为单字节数。地地 址址 子程序子程序 Y3Y2Y1Y0 ADD A,#01H Y3Y2Y1Y0+2 MOVC A,A+PC Y3Y2Y1Y0+3 RET Y3Y2Y1Y0+4 DB 00H,01H,04H,09H,10H DB 19H,24H,31H,40H,51H第第1条指令条指令 ADD A,#01H 的作用是加上偏移量,可以根据的作用是加上偏移量,可以根据A的内容查出的内容查出X对应的平方。对应的平方。例例2 2 在一个以在一个以MCS-51MCS-51为核心的温度控制器中,温度传感器输出的电压与温为核心的温度控制器中,温度传感器输出的电压与温度为非线性关系,传感器输出的电压已由度为非线性关系,传感器输出的电压已由A/DA/D转换为转换为1010位二进制数。根据位二进制数。根据测得的不同温度下的电压值数据构成一个表,表中放温度值测得的不同温度下的电压值数据构成一个表,表中放温度值y y,x x为电压为电压值数据。设测得的电压值值数据。设测得的电压值x x放入放入R4R3R4R3中,根据电压值中,根据电压值x x,查找对应的温度,查找对应的温度值值y y,仍放入,仍放入R4R3R4R3中。本例的中。本例的x x和和y y均为双字节无符号数。程序如下:均为双字节无符号数。程序如下:(P96 P96 例例7 7)LTB2LTB2:MOV DPTR,#TAB2MOV DPTR,#TAB2 MOV A,R3 MOV A,R3 CLR C CLR C RLC A RLC A MOV R3,A MOV R3,A XCH A,R4 XCH A,R4 RLC A RLC A XCH R4,A XCH R4,A ADD ADDA,DPL A,DPL;(;(R4R3R4R3)+(DPTRDPTR)(DPTRDPTR)MOV DPL,AMOV DPL,A MOV A,DPH MOV A,DPH ADDC A,R4 ADDC A,R4 MOV DPH,A MOV DPH,A CLR A CLR A MOVC A,A+DPTR MOVC A,A+DPTR ;查第一字节;查第一字节 MOV R4,A MOV R4,A ;第一字节存入;第一字节存入R2R2中中 CLR ACLR A INC DPTR INC DPTR MOVC A,A+DPTR MOVC A,A+DPTR ;查第二字节;查第二字节 MOV R3,A MOV R3,A ;第二字节存入;第二字节存入R3R3中中 RETRET TAB2:DW TAB2:DW ;温度值表;温度值表例例3 3 设设有有一一个个巡巡回回检检测测报报警警装装置置,需需对对1616路路输输入入进进行行检检测测,每每路路有有一一最最大大允允许许值值,为为双双字字节节数数。运运行行时时,需需根根据据测测量量的的路路数数,找找出出每每路路的的最最大大允允许许值值。看看输输入入值值是是否否大大于于最最大大允允许许值值,如如大大于于就就报报警警。根根据据上上述述要要求求,编一个查表程序。编一个查表程序。取取路路数数为为x(0 x15),yx(0 x15),y为为最最大大允允许许值值,放放在在表表格格中中。设设进进入入查查表表程程序序前前,路路数数x x已已放放于于R2R2中中,查查表表后后最最大大值值y y放放于于R3R4R3R4中中。本本例例中中的的x x为为单单字字节节数数,y y为双字节数。查表程序如下:为双字节数。查表程序如下:TB3:TB3:MOV A,R2MOV A,R2 ADD A,R2 ADD A,R2 ;(R2)*2(A)(R2)*2(A)MOV R3,A MOV R3,A ;保存指针;保存指针 ADD A,#6 ADD A,#6 ;加偏移量;加偏移量MOVC A,A+PC MOVC A,A+PC ;查第一字节;查第一字节XCH A,R3XCH A,R3 ADD A,#3ADD A,#3 MOVC A,A+PC MOVC A,A+PC;查第二字节;查第二字节 MOV R4,AMOV R4,ARETRET TAB3:TAB3:DW 1520DW 1520,37213721,4264542645,7580 7580 ;最大值表;最大值表 DW 3483DW 3483,3265732657,883883,99439943 DW 10000DW 10000,4051140511,67586758,89318931 DW 4468DW 4468,58715871,1328413284,2780827808顺序检索和对分检索顺序检索和对分检索一、顺序检索一、顺序检索 从第从第1 1项开始逐项顺序查找,判断所取数据是否与关键字相等。项开始逐项顺序查找,判断所取数据是否与关键字相等。例例 从从5050个字节的无序表中查找一个关键字个字节的无序表中查找一个关键字”H”H。ORG 4000HORG 4000HMOV 30HMOV 30H,#H#H;关键字;关键字HH送送30H30H单元单元MOV R1MOV R1,#50#50 ;查找次数送;查找次数送R1R1MOV AMOV A,#14#14 ;修正值送;修正值送A A MOV DPTRMOV DPTR,#TAB4#TAB4 ;表首地址送;表首地址送DPTRDPTRLOOPLOOP:PUSH ACCPUSH ACCMOVC AMOVC A,A+PC A+PC;查表结果送;查表结果送A ACJNE ACJNE A,40H40H,LOOP1LOOP1;(40H40H)不等于关键字则转)不等于关键字则转LOOP1LOOP1MOV R2MOV R2,DPHDPH;已查到关键字,把该字的地址送已查到关键字,把该字的地址送R2R2,R3R3MOV R3MOV R3,DPL DPL ;DONEDONE:RETRETLOOP1LOOP1:POP ACCPOP ACC ;修正值弹出;修正值弹出 INC AINC A ;A+1AA+1AINC DPTRINC DPTR ;修改数据指针;修改数据指针DPTRDPTRDJNZ R1DJNZ R1,LOOP LOOP;R10R10,未查完,继续查找,未查完,继续查找 3.6.3 关键字查找程序设计关键字查找程序设计 MOV R2MOV R2,#00H#00H;R1=0R1=0,清,清“0”R2 0”R2 和和R3R3 MOV R3 MOV R3,#00H#00H;表中;表中5050个数已查完个数已查完 AJMPAJMPDONEDONE;从子程序返回;从子程序返回TAB4TAB4:DB DB,;5050个无序数据表个无序数据表二、对分检索二、对分检索(折半查找折半查找)前提:前提:检索的数据表已经排好序,如何进行数据的排序,将在本节稍后介检索的数据表已经排好序,如何进行数据的排序,将在本节稍后介绍。绍。方法:方法:取数据表中间位置的数与关键字进行比较,如相等,则查找到;如取数据表中间位置的数与关键字进行比较,如相等,则查找到;如果所取的数大于关键字,则下次对分检索的范围是从数据区起点到本次果所取的数大于关键字,则下次对分检索的范围是从数据区起点到本次取数。如果取数小于关键字,则下次对分检索的范围是从本次取数数据取数。如果取数小于关键字,则下次对分检索的范围是从本次取数数据区起点到数据区终点。依此类推,逐渐缩小检索范围,减少次数,大大区起点到数据区终点。依此类推,逐渐缩小检索范围,减少次数,大大提高了查找速度。提高了查找速度。在指定的数据区中找出最大值(或最小值)。在指定的数据区中找出最大值(或最小值)。例例 片内RAM中存放一批数据,查找出最大值并存放于首地址中。设R0中存首地址,R2中存放字节数,程序框图如图所示。3.6.4 3.6.4 数据极值查找程序设计数据极值查找程序设计程序如下:程序如下:MOV R2,n;n为要比较的数据字节数为要比较的数据字节数 MOV A,R0;存首地址指针;存首地址指针 MOV R1,A DEC R2;MOV A,R1 LOOP:MOV R3,A DEC R1 CLR C SUBB A,R1;两个数比较;两个数比较 JNC LOOP1;C=0,A中的数大,跳中的数大,跳LOOP1 MOV A,R1;C=1,则大数送,则大数送A SJMP LOOP2LOOP1:MOV A,R3 LOOP2:DJNZ R2,LOOP;是否比较结束?;是否比较结束?MOV R0,A;存最大数;存最大数RET 升序排,降序排升序排,降序排:仅介绍无符号数据升序排。:仅介绍无符号数据升序排。冒泡法:冒泡法:相邻数互换的排序方法,类似水中气泡上浮。从前向后进行相邻两个相邻数互换的排序方法,类似水中气泡上浮。从前向后进行相邻两个数的比较,次序与要求的顺序不符时,就将两个数互换;顺序符合要求不数的比较,次序与要求的顺序不符时,就将两个数互换;顺序符合要求不互换。有互换。有7 7个原始数据的排列顺序为:个原始数据的排列顺序为:6 6、4 4、1 1、2 2、5 5、7 7、3 3。第一次冒泡的过程是:第一次冒泡的过程是:6 6、4 4、1 1、2 2、5 5、7 7、3 3 ;原始数据的排列;原始数据的排列4 4、6 6、1 1、2 2、5 5、7 7、3 3 ;逆序,互换;逆序,互换4 4、1 1、6 6、2 2、5 5、7 7、3 3 ;逆序,互换;逆序,互换 4 4、1 1、2 2、6 6、5 5、7 7、3 3 ;逆序,互换;逆序,互换4 4、1 1、2 2、5 5、6 6、7 7、3 3 ;逆序,互换;逆序,互换4 4、1 1、2 2、5 5、6 6、7 7、3 3;正序,不互换;正序,不互换4 4、1 1、2 2、5 5、6 6、3 3、7 7 ;逆序,互换,第一次冒泡结束;逆序,互换,第一次冒泡结束如此进行,各次冒泡的结果如下:如此进行,各次冒泡的结果如下:第第1 1次冒泡结果:次冒泡结果:4 4、1 1、2 2、5 5、6 6、3 3、7 7第第2 2次冒泡结果:次冒泡结果:1 1、2 2、4 4、5 5、3 3、6 6、7 7第第3 3次冒泡结果:次冒泡结果:1 1、2 2、4 4、3 3、5 5、6 6、7 7第第4 4次冒泡结果:次冒泡结果:1 1、2 2、3 3、4 4、5 5、6 6、7 7;已完成排序;已完成排序第第5 5次冒泡结果:次冒泡结果:1 1、2 2、3 3、4 4、5 5、6 6、7 7第第6 6次冒泡结果:次冒泡结果:1 1、2 2、3 3、4 4、5 5、6 6、7 7 3.6.5 3.6.5 数据排序程序设计数据排序程序设计对于对于n个数,理论上应进行(个数,理论上应进行(n-1)次冒泡,有时不到()次冒泡,有时不到(n-1)次就已完成排序)次就已完成排序。例例 一批单字节无符号数,以一批单字节无符号数,以R0R0为首地址指针,为首地址指针,R2R2中为字节数,将这批数进行升序排列。程序中为字节数,将这批数进行升序排列。程序框图如图所示。框图如图所示。SORTSORT:MOV AMOV A,R0 R0;MOV R1MOV R1,A AMOV AMOV A,R2R2;字;字节节数送入数送入R5R5MOV R5MOV R5,A ACLR F0CLR F0;互;互换标换标志位志位F0F0清零清零DEC R5DEC R5;MOV AMOV A,R1R1;判定排序是否已完成:判定排序是否已完成:看各次冒泡中是否有互换发看各次冒泡中是否有互换发生,如果有数据互换,则排序还没完成。生,如果有数据互换,则排序还没完成。实现方法:实现方法:常使用设置互换标志的方法,该标志的常使用设置互换标志的方法,该标志的状态表示在一次冒泡中是否有互换进行。状态表示在一次冒泡中是否有互换进行。LOOP:LOOP:MOV R3MOV R3,A A;INC R1INC R1;CLR CCLR C;MOV AMOV A,R1R1;比较大小;比较大小SUBB ASUBB A,R3R3;JNC LOOP1JNC LOOP1;SETB F0SETB F0;互换标志位;互换标志位F0F0置置1 1MOV AMOV A,R3R3;XCH AXCH A,R1R1;两个数互换;两个数互换DEC R1DEC R1;XCH AXCH A,R1R1;INC R1 INC R1 LOOP1LOOP1:MOV AMOV A,R1 R1 DJNZ R5DJNZ R5,LOOP LOOP JB F0JB F0,SORT SORT RETRET 本 章 小 结u汇编语言常见指令符号汇编语言常见指令符号u各种操作指令介绍(数据传送、算术运算、逻各种操作指令介绍(数据传送、算术运算、逻辑运算、控制转移、位运算)辑运算、控制转移、位运算)u汇编语言程序设计开发过程汇编语言程序设计开发过程u指令的种类与格式(指令、伪指令、宏指令)指令的种类与格式(指令、伪指令、宏指令)u程序举例(分支、循环、条件控制、重循环、程序举例(分支、循环、条件控制、重循环、子程序调用等)子程序调用等)

    注意事项

    本文(计算机原理及应用.ppt)为本站会员(wuy****n92)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开