(微机课07汇编程序1福建工程学院版本)

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第4章89C51汇编语言程序设计汇编语言是面向机器硬件的语言,要求程序设计者对89C51单片机具有很好的“软、硬结合”的功底。4.1汇编语言程序设计概述4.1.1机器语言、汇编语言和高级语言1.机器语言用二进制(“0”、“1”)代码表示指令、数字,用机器指令代码编写的程序——机器语言目标程序。不易懂,难记忆,易出错。机器语言目标程序是唯一能被CPU识别并执行的程序形式P.53地址机器码200074002002790A20047A0320062A2007D9FD200900200A80FE2.汇编语言采用指令助记符(符号指令)表示指令称为符号语言或汇编语言用汇编语言编写的程序称为汇编语言源程序。汇编语言特点:(1)面向机器的语言,程序设计员须对硬件有相当深入的了解。(2)指令助记符和机器指令一一对应,用汇编语言编写的程序(比高级语言)效率高,占存储空间小,运行速度快,能编写出最优化的程序。(3)能直接管理和控制硬件设备(功能部件),它能处理中断,也能直接访问存储器及I/O接口电路。汇编语言和机器语言都脱离不开具体机器的硬件,均是面向“机器”的语言,缺乏通用性。P.53汇编汇编语言源程序机器语言目标程序汇编程序(汇编软件)[机器汇编]人工[人工汇编]3.高级语言不受具体机器的限制,接近于人的自然语言及学科语言,常用的如BASIC、FORTRAN以及C、VB语言等。可视化、面向对象……高级语言优点:通用性强,直观、易懂、易学,可读性好。计算机不能直接识别和执行高级语言,需要将其“翻译”成机器语言才能识别和执行,进行“翻译”的专用程序称为编译程序。可用C语言(C51)来进行AT89C51的应用程序设计。对于程序的空间和时间要求很高的场合,汇编语言仍是必不可缺的。C语言和汇编语言混合编程在很多需要直接控制硬件的场合,则更是非用汇编语言不可,使用汇编语言编程,是单片机程序设计的基本功之一P.53编译/解释高级语言源程序机器语言目标程序编译程序/解释程序(软件)(编译型/解释型)4.1.2汇编语言语句的种类和格式两种基本类型:指令语句和伪指令语句(1)指令语句(CPU指令,可执行指令,真指令)已在第3章介绍每一条指令语句在汇编时都产生一个指令代码:机器指令代码(2)伪指令语句(命令语句,非执行指令,汇编命令)是为汇编工作服务的。在汇编时除了定义的数据之外没有机器指令代码与之对应。P.54【例4-1】AT89C51的汇编语言的四分段格式如下:标号操作码操作数注释字段字段字段字段ORG2000H;起始地址伪指令START:MOVA,#00H;0→AMOVR1,#10;10→R1MOVR2,#00000011B;3→R2LOOP:ADDA,R2;A+R2→ADJNZR1,LOOP;R1减1,非零则循环NOP;空操作HERE:SJMPHERE;自循环END;汇编终止伪指令程序功能:R2内容自加10次:R2×10→AP.54十进制二进制十六进制地址机器码200074002002790A20047A0320062A2007D9FD200900200A80FE↑操作码↑↑操作数4.1.3伪指令伪指令也称为汇编程序控制命令,是向汇编程序发出的指示信息,告诉它如何完成汇编工作。伪指令没有相应的机器指令代码产生常用的伪指令:1.ORG(ORiGin)汇编起始地址命令指定后续程序的起始地址。可多次使用ORG指令,但是,地址必须由小到大排列,地址不能交叉、重叠。ORG2000H20007400START:MOVA,#00H┋2.END(ENDofassembly)汇编终止命令汇编语言源程序的结束标志,用于终止源程序的汇编工作。在整个源程序中只能有一条END命令,且位于整个程序的最后。P.55-563.DB(DefineByte)定义字节命令例:ORG20A0H20A03040184342DB30H,40H,24,“C”,“B”DB功能是从当前地址开始定义(存储)若干个单字节数据,十进制数自然转换成16进制数,字母按ASCII码存储。4.DW(DefineWord)定义数据字命令定义16位的数据字。例:ORG20D0H20D01246007B000ADW1246H,7BH,10DB功能是从当前地址开始定义(存储)若干个双字节数据,高字节在低地址单元5.EQU(EQUate)赋值命令用于给标号赋值。赋值以后,其标号值在整个程序有效。例如:TESTEQU208AH表示标号TEST=208AH,在汇编时,凡是遇到标号TEST时,均以208AH来代替。P.56【例4-3改】设计一个程序,功能为:根据30H单元中的数x(0~9之间)查平方表,求出x相应的平方值y存50H单元。x和y均为单字节数。用DPTR作基址的方法:地址机器码汇编语言源程序ORG0300H0300E530PFSUB:MOVA,30H;取自变量x0302900309MOVDPTR,#TAB;指向平方表首址030593MOVCA,@A+DPTR;查表得相应函数值y0306F550MOV50H,A;存结果y0308020308LS:LJMPLS030B0001040910TAB:DB00H,01H,04H,09H,10H;平方表01491603101924314051DB19H,24H,31H,40H,51H;25364964810315END(x+030BH)【PFDPTR.ASM】【引用前例】0,1,4,9,1625,36,49,64,81可用十进制,效果一样4.2汇编语言源程序的汇编汇编语言源程序“翻译”成机器代码(指令代码)的过程称为“汇编”。汇编可分为手工汇编和机器汇编两类:4.2.1手工汇编人工查表翻译指令。但遇到的相对转移指令的偏移量的计算,要根据转移的目标地址计算偏移量,不但麻烦,且容易出错。4.2.2机器汇编用编辑软件进行源程序的编辑。编辑完成后,生成一个ASCII码文件,扩展名为“.ASM”。然后在微计算机上运行汇编程序,把汇编语言源程序翻译成机器代码。交叉汇编--汇编后的机器代码是在另一台(种)计算机(这里是单片机)上运行。反汇编——分析已有的可执行目标程序,要将二进制的机器代码语言程序反向翻译成汇编语言源程序,以便分析、修改。P.574.3AT89C51单片机汇编语言程序设计举例4.3.6分支转移程序设计1.单分支转移结构:仅有两个出口,两者选一图4-4图4-5P.65属循环结构!图4-3程序段1条件满足?单分支典型结构1单分支典型结构2【例4-B1】请编程序使48H、49H单元所存储的二个数中较小者送20H单元。ORG0000HBIG:MOVA,48H;取甲数CLRC;清CySUBBA,49H;减去乙数JZLP1;相等转LP0:JNCLP2;无借位则甲≥乙,转LP1:MOVA,48H;甲数小:取甲数SJMPLP3;转保存结果LP2:MOVA,49H;乙数小:取乙数LP3:MOV20H,A;存结果SJMP$;自循环END【思考】请编程序使5CH、5DH单元所存储的二个数中较大者在前。请编程序判断若34H、35H单元所存储的二个数相等则置F0位为0,否则置1。MOVA,48HCJNEA,49H,LP0SJMPLP1;相等LP0:JNCLP2;甲≥乙【二分支典型程序例】JZLP1;相等转(本题可略去)2.多分支转移结构:程序的判别部分有两个以上的出口。【例4-10】求符号函数的值。X存放在40H单元,Y存放在41H单元。SIGNFUC:MOVA,40HCJNEA,#00H,NZEARSJMPZEAR;为0则转NZEAR:JBACC.7,POSI;为负则转MOVA,#01H;为正:赋+1原码SJMPNEGTPOSI:MOVA,#81H;为负:赋-1的原码SJMPNEGTZEAR:MOVA,#00H;为零:赋0的原码NEGT:MOV41H,A;存结果SJMP$END图4-6P.66NZEARPOSIY=1当X00当X=0-1当X0若用补码:[-1]补=FFH教材题意为用原码表示带符号数X、YZEARJZZEAR【三分支典型程序例】NEGT负正非零零图4-7在实际的应用中,经常遇到的图4-7结构形式的分支转移程序的设计,需根据某一单元的内容是0,1,……,n,来分别转向处理程序0,处理程序1,……处理程序n。P.65类似于开关语句A=1A=n4.3.7循环程序设计图4-8计数循环控制结构循环计数P.67结果处理循环循环准备:初始地址指针循环计数初值单元变量初值为下一次循环调整有关指针循环控制存储结果数据或其他处理每次循环都执行(后续程序)(未完继续)【例4-12改】有一批单字节无符号数,依次存放在51单片机片内RAM从50H开始的单元中,数据个数n放在4FH单元中,求这批数据的和(双字节)放在R3、R4中,程序如下:ORG0000HADD1:MOVR2,4FH;取数据个数n,作为循环累加次数,送R2MOVR3,#0;部分和高字节单元清0MOVR4,#0;部分和低字节单元清0MOVR0,#50H;R0指向第一个数LOOP:MOVA,R4;取部分和低字节原有的值ADDA,@R0;加上当前数低字节(本例原始数据只有低字节)MOVR4,A;回存部分和低字节结果MOVA,R3;取部分和高字节原有的值ADDCA,#00H;加上当前数高字节(00H)及低字节的进位MOVR3,A;回存部分和高字节结果INCR0;R0指向下一个数DJNZR2,LOOP;未加完,转回继续进行下一个数的累加SJMP$END【求数组和程序】循环准备循环体调整指针循环控制作业三:P.70—4补充4-1:请编程序使40H、41H单元所存储的二个数中的大数减去小数,差值存58H单元(即求两数差的绝对值)。补充4-2:有8个双字节BCD数存放在片内RAM40H开始的单元中,请编程求它们的和(双字节),结果放在60H、61H单元中。(设双字节数的高字节存放在两字节的高地址单元)补充4-3(见下页)补充4-3:完成下列程序的人工汇编工作:ORG2036HD2SUBP:SETBP1.612LOOP:LCALLDELYB2CPL96H80SJMPLOOP7DDELY:MOVR5,#25000DELY2:NOP00NOPDDDJNZR5,DELY222RET

1 / 17
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功