资源预览内容
第1页 / 共19页
第2页 / 共19页
第3页 / 共19页
第4页 / 共19页
第5页 / 共19页
第6页 / 共19页
第7页 / 共19页
第8页 / 共19页
第9页 / 共19页
第10页 / 共19页
亲,该文档总共19页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第第4 4章章 89C5189C51汇编语言程序设计汇编语言程序设计汇编语言是面向机器硬件的语言,汇编语言是面向机器硬件的语言,要求程序设计者对要求程序设计者对89C5189C51单片单片机具有很好的机具有很好的“软、硬结合软、硬结合”的功底。的功底。 汇编语言程序设计概述汇编语言程序设计概述 机器语言、汇编语言和高级语言机器语言、汇编语言和高级语言 1.1.机器语言机器语言 用二进制用二进制(“0”(“0”、“1”)1”)代码表示的指令、数字,用机器语言代码表示的指令、数字,用机器语言编写的程序编写的程序机器语言目标程序,机器语言目标程序,不易懂,难记忆,易不易懂,难记忆,易出错出错。2 2汇编语言汇编语言 采用英文的采用英文的指令助记符指令助记符表示指令称为表示指令称为符号语言符号语言或或汇编语言汇编语言将汇编语言程序转换成为二进制代码表示的机器语言程序的程将汇编语言程序转换成为二进制代码表示的机器语言程序的程序称为序称为汇编程序汇编程序经汇编程序经汇编程序“汇编汇编”得到的机器语言程序称为得到的机器语言程序称为机器语言目标程机器语言目标程序序,原来的程序称为,原来的程序称为汇编语言源程序汇编语言源程序。汇编语言特点:汇编语言特点:(1)(1)面向机器的语言,程序设计员须对硬件有相当深入的了解。面向机器的语言,程序设计员须对硬件有相当深入的了解。(2)(2)助记符指令和机器指令一一对应,用汇编语言编写的助记符指令和机器指令一一对应,用汇编语言编写的程序程序(比高级语言编写的程序)(比高级语言编写的程序)效率高效率高,占,占存储空间小存储空间小,运行,运行速速度快度快,能编写出最优化的程序。,能编写出最优化的程序。(3)(3)能能直接管理和控制硬件设备直接管理和控制硬件设备(功能部件),它能处理中断,(功能部件),它能处理中断,也能直接访问存储器及也能直接访问存储器及I/OI/O接口电路。接口电路。 汇编语言和机器语言都脱离不开具体机器的硬件,均是汇编语言和机器语言都脱离不开具体机器的硬件,均是面向面向“机器机器”的语言,缺乏通用性。的语言,缺乏通用性。3 3高级语言高级语言不受具体机器的限制不受具体机器的限制, ,接近于人的自然语言及学科语言,接近于人的自然语言及学科语言,常用的常用的如如BASICBASIC、FORTRANFORTRAN以及以及C C语言等。语言等。可视化、面向对象可视化、面向对象高级语言高级语言优点优点:通用性强,直观、易懂、易学,可读性好。:通用性强,直观、易懂、易学,可读性好。计算机不能直接识别和执行高级语言,需要将其计算机不能直接识别和执行高级语言,需要将其 “ “翻译翻译”成机成机器语言才能识别和执行,进行器语言才能识别和执行,进行“翻译翻译”的专用程序称为的专用程序称为编译编译程序程序。 可用可用C C语言(语言(C51C51)来进行)来进行AT89C51AT89C51的应用程序设计。对于程序的的应用程序设计。对于程序的空间空间和和时间时间要求很高的场合,汇编语言仍是必不可缺的。要求很高的场合,汇编语言仍是必不可缺的。C C语言和汇编语言混合编程语言和汇编语言混合编程 在很多需要在很多需要直接控制硬件直接控制硬件的场合,则更是非用汇编语言不可的场合,则更是非用汇编语言不可 使用使用汇编语言编程汇编语言编程,是单片机程序设计的,是单片机程序设计的基本功之一基本功之一汇编汇编汇编语言汇编语言源程序源程序机器语言机器语言目标程序目标程序汇编程序汇编程序(汇编软件汇编软件)人工人工人工汇编人工汇编机器汇编机器汇编编译编译/ /解释解释高级语言高级语言 源程序源程序机器语言机器语言目标程序目标程序编译程序编译程序/解释程序解释程序(软件软件)(编译型(编译型/ /解释型)解释型)4.1.2 4.1.2 汇编语言语句的种类和格式汇编语言语句的种类和格式两种基本类型:两种基本类型:指令语句指令语句和和伪指令语句伪指令语句(1 1)指令语句)指令语句 (CPUCPU指令、可执行指令、真指令)指令、可执行指令、真指令)已在第已在第3 3章介绍章介绍每一条指令语句在汇编时都产生一个指令代码:机器指令代码每一条指令语句在汇编时都产生一个指令代码:机器指令代码(2 2)伪指令语句)伪指令语句 (命令语句)(命令语句)是为汇编工作服务的。在汇编时除了定义的数据之外是为汇编工作服务的。在汇编时除了定义的数据之外没有机器没有机器指令代码与之对应。指令代码与之对应。 【例例4-14-1】AT89C51AT89C51的汇编语言的的汇编语言的四分段格式四分段格式如下:如下:标号字段标号字段 操作码字段操作码字段 操作数字段操作数字段 注释字段注释字段 STARTSTART:MOV MOV A A,#00H#00H ;0A0A MOV MOV R1R1,#10#10 ;10R110R1 MOV MOV R2R2,#00000011B#00000011B ;3R23R2 LOOP LOOP:ADD ADD A A,R2R2 ;(;(A A)+ +(R2R2)A A DJNZ DJNZ R1R1,LOOPLOOP;R1R1内容减内容减1 1不为零,则循环不为零,则循环 NOPNOP HERE HERE:SJMP SJMP HEREHERE程序功能:程序功能:R2R2内容自加内容自加1010次:次:R210AR210A十进制十进制二进制二进制十六进制十六进制4.1.3 4.1.3 伪指令伪指令伪指令也称为汇编程序控制命令,是向汇编程序发出的指示信伪指令也称为汇编程序控制命令,是向汇编程序发出的指示信息,告诉它息,告诉它如何完成汇编工作如何完成汇编工作。伪指令没有相应的机器指令伪指令没有相应的机器指令代码产生代码产生常用的伪指令:常用的伪指令: (ORiGinORiGin)汇编起始地址命令汇编起始地址命令 指定后续程序的起始地址。指定后续程序的起始地址。可可多次多次使用使用ORGORG指令指令,但是,但是,地址必须由小到大排列,地址不能交叉、重叠。地址必须由小到大排列,地址不能交叉、重叠。 ORGORG 2000H2000H2000 2000 74 0074 00 STARTSTART:MOV A,#00HMOV A,#00H 2. END2. END(END of assembly)(END of assembly)汇编终止命令汇编终止命令汇编语言源程序的结束标志,用于终止源程序的汇编工作。在汇编语言源程序的结束标志,用于终止源程序的汇编工作。在整个源程序中只能有一条整个源程序中只能有一条ENDEND命令,且命令,且位于整个程序的最后位于整个程序的最后。3 3DBDB(Define ByteDefine Byte)定义字节命令定义字节命令例:例: ORG 2000HORG 2000H20002000 30 40 18 43 4230 40 18 43 42 DBDB 30H30H,40H40H,2424,“C”C”,“B”B”DBDB功功能能是是从从当当前前地地址址开开始始定定义义(存存储储)若若干干个个单单字字节节数数据据, 十进制数自然转换成十进制数自然转换成1616进制数,字母按进制数,字母按ASCIIASCII码存储。码存储。4 4DWDW(Define Define WordWord)定定义义数数据据字字命命令令 定定义义1616位位的的数数据据字字。例如:例如: ORG 2000HORG 2000H2000 2000 12 4612 46 00 7B00 7B 00 0A00 0A DWDW 1246H1246H,7BH7BH,1010 DBDB功功能能是是从从当当前前地地址址开开始始定定义义(存存储储)若若干干个个双双字字节节数数据据,高字节在低地址单元高字节在低地址单元5 5EQUEQU(EQUateEQUate)赋值命令赋值命令用于用于给标号赋值给标号赋值。赋值以后,其标号值在整个程序有效。赋值以后,其标号值在整个程序有效。例如:例如: TEST TEST EQUEQU 2000H2000H表示标号表示标号TEST=2000HTEST=2000H,在汇编时,凡是遇到标号,在汇编时,凡是遇到标号TESTTEST时,均以时,均以2000H2000H来代替。来代替。【例例4-34-3】设计一子程序,功能为:根据设计一子程序,功能为:根据30H30H单元单元中的数中的数x x(0 09 9之之间)查平方表,求出间)查平方表,求出x x相应的平方相应的平方y y存存50H50H单元单元。x x和和y y均为单字均为单字节数。节数。用用DPTRDPTR作基址的方法:作基址的方法:地址地址 机器码机器码 汇编语言源程序汇编语言源程序 ORG 0300HORG 0300H 0300 E5 300300 E5 30 PFSUB:MOV A ,30H PFSUB:MOV A ,30H ;取自变量;取自变量x x0302 90 03 09 MOV DPTR ,#0309H 0302 90 03 09 MOV DPTR ,#0309H ;或;或 MOV DPTR,#TABMOV DPTR,#TAB 0305 93 MOVC A , 0305 93 MOVC A , A + DPTRA + DPTR ;查表得相应函数值;查表得相应函数值0306 F5 50 MOV 50H ,A 0306 F5 50 MOV 50H ,A ;存结果;存结果y y0308 22 RET0308 22 RET0309 0309 00 01 04 09 1000 01 04 09 10 TAB: TAB:DBDB 00H,01H,04H,09H,10H00H,01H,04H,09H,10H; ;平方表平方表0 1 4 9 160 1 4 9 16 030E 030E 19 24 31 40 5119 24 31 40 51 DBDB 19H,24H,31H,40H,51H19H,24H,31H,40H,51H; ;25 36 49 64 8125 36 49 64 81(x + 0309H)【引用前例引用前例】 汇编语言源程序的汇编汇编语言源程序的汇编汇编语言源程序汇编语言源程序 “ “翻译翻译”成机器代码(指令代码)的过程称为成机器代码(指令代码)的过程称为“汇编汇编”。汇编可分为。汇编可分为手工汇编手工汇编和和机器汇编机器汇编两类两类: : 手工汇编手工汇编人工查表翻译指令人工查表翻译指令。但遇到的相对转移指令的偏移量的计算,。但遇到的相对转移指令的偏移量的计算,要根据转移的目标地址计算偏移量,不但麻烦,且容易出错。要根据转移的目标地址计算偏移量,不但麻烦,且容易出错。4.2.2 4.2.2 机器汇编机器汇编用编辑软件进行源程序的用编辑软件进行源程序的编辑编辑。编辑完成后,生成一个。编辑完成后,生成一个ASCIIASCII码码文件,文件,扩展名为扩展名为“.ASM”.ASM”。然后在微计算机上。然后在微计算机上运行汇编程序运行汇编程序,把汇编语言源程序翻译成机器代码。把汇编语言源程序翻译成机器代码。交叉汇编交叉汇编-汇编后的机器代码是在另一台汇编后的机器代码是在另一台( (种种) )计算机(这里是计算机(这里是单片机)上运行。单片机)上运行。 反汇编反汇编分析分析已有的可执行目标已有的可执行目标程序,要将二进制的机器代程序,要将二进制的机器代码语言程序码语言程序反向反向翻译成翻译成汇编语言源程序,汇编语言源程序,以便分析、修改以便分析、修改。4.3 AT89C514.3 AT89C51单片机汇编语言程序设计举例单片机汇编语言程序设计举例4.3.6 4.3.6 分支转移程序设计分支转移程序设计 1 1单分支转移结构单分支转移结构: : 仅有两个出口仅有两个出口, ,两者选一两者选一 图图4-44-4图图4-54-5属循环结构!属循环结构!3 3图图4-34-3程序段程序段1 1条件满足?条件满足?【例例B4-1B4-1】请编程序使请编程序使48H48H、49H49H单元所存储的二个数中较单元所存储的二个数中较大大者者在前。在前。 ORG 0000HORG 0000H BIG BIG:MOV A ,48H MOV A ,48H ; ;取甲取甲CLR CCLR C; ;清清CyCySUBB A ,49HSUBB A ,49H ; ;减去乙数减去乙数JNC LP1JNC LP1; ;无借位则甲无借位则甲乙乙, ,转转LP1LP1MOV A ,48H MOV A ,48H ; ;乙数大:两数交换乙数大:两数交换MOV 48,49HMOV 48,49HMOV 49H,AMOV 49H,ALP1:SJMP $LP1:SJMP $ ; ;自循环自循环【练习练习】请编程序使请编程序使48H48H、49H49H单元所存储的二个数中较单元所存储的二个数中较小小者送者送28H28H单元。单元。请编程序请编程序判断若判断若34H34H、35H35H单元所存储的二个数单元所存储的二个数相等相等则置则置F0F0位为位为0 0,否则置,否则置1 1。 CJNE A,49H,LPCJNE A,49H,LP SJMP LP1 SJMP LP1 ; ;相等相等LP:JNC LP1 LP:JNC LP1 ; ;甲乙甲乙2多分支转移结构:多分支转移结构: 程序的判别部分有两个以上的出口。程序的判别部分有两个以上的出口。 例例4-104-10 求符号函数的值求符号函数的值。 X X存放在存放在40H40H单元,单元,Y Y存放在存放在41H41H单元。单元。SIGNFUC:MOV A,40HSIGNFUC:MOV A,40H CJNE A,#00H,NZEAR CJNE A,#00H,NZEAR AJMP NEGT AJMP NEGT ;为;为0 0则转则转NZEAR:JB , POSI NZEAR:JB , POSI ;为负则转;为负则转 MOV A,#01H MOV A,#01H ;为正;为正: :赋赋+1+1原码原码 AJMP AJMP SAVESAVE POSI:MOV A,#81H POSI:MOV A,#81H ;赋;赋-1-1的原码的原码 SJMP SAVESJMP SAVE NEGT: NEGT:MOVMOV A,#00HA,#00H ;赋;赋0 0的原码的原码 SAVESAVE:MOV 41H, A :MOV 41H, A ;存结果;存结果 SJMP $SJMP $ END END图图4-64-6NZEARNZEARNEGTNEGTPOSIPOSIAYAYA AA A( A)( A)XAXAS SS SY= 1当当X00当当X=0-1当当X0 若补码:若补码:-1-1是是FFHFFH教材题意为用教材题意为用原码原码表示带符号数表示带符号数X X、Y YSAVESAVE图图4-74-7在实际的应用中,经常遇到的在实际的应用中,经常遇到的图图4-74-7结构形式的分支转移程序结构形式的分支转移程序的设计的设计, ,需根据某一单元的内容是需根据某一单元的内容是0 0,1 1,n n,来分别转,来分别转向处理程序向处理程序0 0,处理程序,处理程序1 1,处理程序处理程序n n。 类似于开关语句类似于开关语句A=1A=1A=nA=n4.3.7 4.3.7 循环程序设计循环程序设计图图4-84-8是是计数循环计数循环控制结构,控制结构,图图4-94-9是是条件控制条件控制结构。结构。 图图4-84-8图图4-94-9循环计数循环计数公共公共结果处理结果处理循环循环循环准备:循环准备: 初始地址指针初始地址指针 循环计数初值循环计数初值 单元变量初值单元变量初值为下一次为下一次循环做准备循环做准备例例4-124-12( (改改) ) 如果如果xixi均为单字节数,并按均为单字节数,并按i i顺序存放在顺序存放在5151单片机内部单片机内部RAMRAM从从50H50H开始的单元中,开始的单元中,数据个数数据个数n n放在放在R2R2中,求中,求这批数据这批数据的的和(双字节)放在和(双字节)放在R3R3、R4R4中,程序如下中,程序如下: :(求数组和程序)(求数组和程序) ORG 0000H ORG 0000HADD1: MOVADD1: MOVR2R2,#,#0AH0AH ; ;加法次数加法次数n n 送送R2R2, ,n n为具体的数据个数为具体的数据个数, ,如如1010 MOV R3,#0 MOV R3,#0 ; ;部分和高字节单元清部分和高字节单元清0 0 MOV R4,#0 MOV R4,#0 ; ;部分和低字节单元清部分和低字节单元清0 0MOV R0,#50HMOV R0,#50H;R0;R0指向第一个数指向第一个数LOOP: MOV A,R4 LOOP: MOV A,R4 ; ;取部分和低字节原有的值取部分和低字节原有的值 ADD A,R0 ADD A,R0 ; ;加上当前数低字节加上当前数低字节( (本例原始数据只有低字节本例原始数据只有低字节) ) MOV R4,A MOV R4,A ; ;回存新的部分和低字节结果回存新的部分和低字节结果 MOV A,R3 MOV A,R3 ; ;取部分和高字节原有的值取部分和高字节原有的值ADDC A, #00H ADDC A, #00H ; ;加上当前数高字节加上当前数高字节(00H)(00H)及低字节的进位及低字节的进位 MOV R3,A MOV R3,A ; ;回存新的部分和高字节结果回存新的部分和高字节结果INC R0INC R0 ;R0;R0指向下一个数指向下一个数DJNZ DJNZ R2R2,LOOP ,LOOP ; ;未加完,转回继续进行下一个数的累加未加完,转回继续进行下一个数的累加SJMP $SJMP $ENDEND作业三作业三 : P.70 4P.70 4 补充补充1: 请编程序使请编程序使40H、41H单元所存储的二个数单元所存储的二个数中的大数减去小数,差值存中的大数减去小数,差值存58H单元(即求两数差单元(即求两数差的绝对值)。的绝对值)。 补充补充2:有有8个双字节个双字节BCD数存放在片内数存放在片内RAM的的40H开始的单元中,请编程求它们的和(双字节)放在开始的单元中,请编程求它们的和(双字节)放在60H、61H单元中。(设双字节数的高字节存放在单元中。(设双字节数的高字节存放在两字节的高地址单元)两字节的高地址单元) 补充补充3:完成下列程序的人工汇编工作完成下列程序的人工汇编工作: ORG 2036H D2 12 LOOP:LCALL DELY B2 80 SJMP LOOP 7D DELY:MOV R5,#0F5H 00 DELY2:NOP 00 NOP DD DJNZ R5,DELY2 22 RET
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号