《[信息与通信]第4章 MCS-51汇编语言程序设计.ppt》由会员分享,可在线阅读,更多相关《[信息与通信]第4章 MCS-51汇编语言程序设计.ppt(53页珍藏版)》请在三一文库上搜索。
1、08:46,1,张兴忠 制作,第4章 MCS-51汇编语言 程序设计,单片机原理与接口技术,太原理工大学,电子工业出版社,08:46,2,1. 了解汇编语言编程的基础知识; 2. 了解汇编语言程序设计的基本步骤和方法; 3. 了解汇编语言目标程序效率高、占存储空间少、运行速度快、实时性强等特点; 4. 掌握MCS-51汇编语言的顺序、分支、循环、查表及子程序的结构; 5. 掌握算术运算、数制转换、数字滤波以及标度变换等实用汇编程序的编程方法。,本章教学要求,第4章 MCS-51汇编语言程序设计,08:46,3,4.1 程序设计概述 4.1.1 程序设计的步骤 4.1.2 程序设计的方法 4.1
2、.3 汇编语言的规范 4.1.4 汇编语言程序编辑和汇编 4.2 结构化程序设计方法 4.2.1 顺序结构程序 4.2.2 分支结构程序,本章目录,4.2.3 循环结构程序 4.2.4 查表程序 4.2.5 子程序 4.3 汇编语言程序设计实例 习题与思考题,第4章 MCS-51汇编语言程序设计,08:46,4,4.1 程序设计概述,本章介绍使用MCS-51指令系统编写汇编程序的方法。与高级语言相比,汇编语言具有实时性好、代码效率高、执行速度快以及节约内存空间等优点,同时还可以充分利用机器的硬件结构与功能来操作硬件端口。 本章介绍汇编语言程序编写的一般知识、程序设计的基本步骤和格式,以及各种类
3、型的程序设计,包括顺序程序、分支程序、循环程序、查表程序和子程序等。,08:46,5,4.1.1 程序设计的步骤,MCS-51单片机提供111条指令,它们以指令助记符的形式出现,指令助记符的集合称为汇编语言。 由汇编语言编写的程序称为汇编语言源程序。 汇编语言源程序必须翻译成机器代码组成的目标程序,机器才能执行。用汇编语言编制程序的过程,称为汇编语言程序设计。 使用汇编语言设计一个程序大致可分为以下几个步骤:,08:46,6,1) 分析题意,明确要求。 2) 确定算法。 3) 画程序流程图,用图解来描述和说明解题步骤。 4) 分配内存单元,确定程序与数据区的存放地址。 5) 编写源程序。 6)
4、 程序优化。 7) 上机调试、修改和最后确定源程序。,4.1.1 程序设计的步骤,08:46,7,4.1.2 程序设计的方法,1模块化程序设计 2尽量采用循环及子程序结构 3自上而下的程序设计,08:46,8,4.1.3 汇编语言的规范,汇编语言源程序由汇编指令和伪指令两者构成。用汇编语言编写的源程序通常需经过微机汇编程序编译(汇编)成机器码后才能被单片机执行。 为了对源程序汇编,在源程序中必须使用一些“伪指令”。伪指令是便于程序阅读和编写的指令,它即不控制机器的操作也不能被汇编成机器代码,只是为汇编程序所识别的常用符号,并指导汇编如何进行,故称为伪指令。,08:46,9,标号: 助记符 操作
5、数1 ,操作数2 ,操作数3 ;注释 标号:标号是指令地址的标识符号。 有了标号,程序中的其它语句才能访问该语句。有关标号的规定如下。 1) 标号由18个ASCII字符组成。第一个字符必须是字母,其余字符可以是字母、数字或其它特定字符; 2) 标号不能使用该汇编语言已经定义了的符号。如指令助记符、伪指令以及寄存器符号名称等; 3) 标号后边必须跟以冒号。,1汇编指令格式,4.1.3 汇编语言的规范,-标号,08:46,10,操作数:操作数用于给指令的操作提供数据或地址。在一条汇编语句中操作数可能是空白的,也可能包括两项或三项。各操作数间用逗号分隔。操作数字段的内容可能包括工作寄存器、特殊功能寄
6、存器、标号、常数和表达式。 注释:对程序加以说明,是不可执行部分。注释字段必须以分号“;”开头,长度不限,当一行书写不下时,可以换行接着书写,但换行时应注意在开头使用分号“;”。,4.1.3 汇编语言的规范,-操作数,08:46,11,MCS-51系列单片机的常用伪指令有:ORG、 END、EQU、DB、DW、DS和BIT等。,2伪指令,4.1.3 汇编语言的规范,-伪指令ORG,格式: 标号: ORG 16位地址 功能:规定程序块或数据块存放的起始地址。 如:ORG 8000H ;规定下面的第一条指令从地址8000H单元开始存放,即标号START的值为8000H START: MOV A,
7、#30H ,(1) 汇编起始伪指令ORG,08:46,12,格式:标号: END 表达式 功能:结束汇编。汇编程序遇到END伪指令后即结束汇编。处于END之后的程序,汇 编程序不予处理。,(2)汇编结束伪指令END,4.1.3 汇编语言的规范,-伪指令END,如: ORG 2000H START: MOV A, #00H END START ;表示标号START开始的程序段结束。,08:46,13,格式:字符名称 EQU 操作数 功能:将操作数赋予规定的字符名称。,(3)等值伪指令EQU,4.1.3 汇编语言的规范,-伪指令EQU,如: AB EQU 16H DELY EQU 1234H MO
8、V A, AB LCALL DELY,08:46,14,格式:标号: DB 8位二进制数表 功能:DB指令是在程序存储器(ROM)中,从指定的地址单元开始,定义若干个8位内存单元的内容。用来在程序存储器的某一部分存入一组8位二进制数,或者是将一个数据表格存入程序存储器。这个伪指令在汇编以后,将影响程序存储器的内容。,(4)定义字节伪指令DB,4.1.3 汇编语言的规范,-伪指令DB,08:46,15,以上伪指令经汇编以后,将从 1010H开始的若干 内存单元 赋值:,(1010H)=20H (1011H)=43H (1012H)=25H (1013H)=FFH,其中43H是字符C的ASCII码
9、,FFH是数值-1的补码,十进制 数32也换算为16进制数20H。,4.1.3 汇编语言的规范,-伪指令DB应用,如:ORG 1010H TAB: DB 32, C, 25H, -1,08:46,16,标号: DW 16位二进制数表 功能:DW指令是在程序存储器(ROM)中,从指定的地址单元开始,定义若干个16位数据。一个16位数要占两个存储单元,其中高8位存入低地址单元,低8位存入高地址单元。 例如: ORG 1100H TAB : DW 1234H, 0ABH 10 以上伪指令经汇编以后,将对从1100H开始的若干内存单元赋值:,(5)定义字伪指令DW,4.1.3 汇编语言的规范,-伪指令
10、DW,08:46,17,(1100H)=12H (1101H)=34H (1102H)=00H (1103H)=ABH (1104H)=00H (1105H)=0AH,其数据存储格式如右表所示。 DB、DW伪指令都只对程序存储器(ROM)起作用,不能对数据存储器(RAM)的内容进行赋值或进行初始化工作。,例如:ORG 1100H TAB :DW 1234H, 0ABH 10,4.1.3 汇编语言的规范,-伪指令应用,08:46,18,标号: DS 表达式 功能:从指定(标号)地址开始(无标号时从顺序地址开始),保留指定数目(表达式的值)的字节单元作为备用存储区,供程序运行使用(用于程序存储器)
11、。这些单元的初值均为0。 例如: ORG 2000H TAB: DS 05H 经汇编后,从地址2000H开始预留5个存储单元。,(6)定义存储区伪指令DS,4.1.3 汇编语言的规范,-伪指令DS,08:46,19,字符名称 BIT 位地址 功能:将位地址赋给字符名称。 例如: S BIT P1.0 经汇编后,S符号的值是P1.0的地址90H。,(7)位定义伪指令BIT,4.1.3 汇编语言的规范,-伪指令BIT,08:46,20,4.1.4 汇编语言程序编辑和汇编,1汇编语言源程序编辑,-编写规范,DATA0 EQU 30H 将30H赋予字符名称DATA0 ORG 4000H ;规定下面程序
12、从4000H单元开始存放 MOV R0, #DATA0 ;30HR0 MOV R1, DATA0 ;(30H)R1 CJNE R1, #00H, NEXT ;R1000H,则转NEXT HERE: SJMP HERE NEXT: CLR A ;0A LOOP: INC R0 ;(R0)+1R0 ADD A, R0 ;(A)+(R0)A DJNZ R1, LOOP ;(R1)-1R1,R1 0,则转LOOP SJMP HERE END ;汇编到此结束,08:46,21,源程序 地址 目标码 DATA0 EQU 30H ORG 4000H MOV R0, #DATA0 ;4000 7830 MOV
13、 R1, DATA0 ;4002 A930 CJNE R1, #00H, NEXT ;4004 B90002 HERE: SJMP HERE ;4007 80FE NEXT: CLR A ;4009 E4 LOOP: INC R0 ;400A 08 ADD A, R0 ;400B 26 DJNZ R1, LOOP ;400C D9FC SJMP HERE ;400E 80F7 END,2汇编语言源程序的汇编,4.1.4 汇编语言程序编辑和汇编,-源程序汇编,08:46,22,4.2 结构化程序设计方法,在汇编语言程序设计中,普遍采用结构化程序设计方法。采用这种设计方法的主要依据是任何复杂的程序
14、都可由顺序结构、分支结构及循环结构程序等构成。 每种结构只有一个入口和出口,整个程序也只有一个入口和出口。 结构程序设计的特点是程序的结构清晰、易于读写和验证、可靠性高。下面主要介绍结构化程序设计的基本程序设计方法。,-程序结构,08:46,23,4.2.1 顺序结构程序,例4-1 将片内RAM的20H单元中的压缩BCD码拆成两个ACSII码存入21H、22H单元。低4位存在21H单元,高4位存在22H单元。,-顺序结构实例,ORG 2000H MOV A, 20H MOV B, #10H ;除以10H DIV AB ORL B, #30H ;低4位BCD码转换为ASCII码 MOV 21H,
15、 B ORL A, #30H ;高4位BCD码转换为ASCII码 MOV 22H, A END,08:46,24,例4-2 设有16位二进制数存放在内部RAM的50H及51H单元中,要求将其算术左移一位(即原数各位均向左移1位,最低位移入0)后仍存放在原单元。试编制相应的程序。,4.2.1 顺序结构程序,-顺序结构实例,ORG 4000H BIHROL: CLR C ;Cy清零 MOV A, 51H ;低8位向左环移1位 RLC A MOV 51H, A MOV A, 50H ;高8位向左环移1位 RLC A MOV 50H, A END,08:46,25,4.2.2 分支程序,分支程序可根据
16、要求无条件或有条件地改变程序执行流向。编写分支程序主要在于正确使用转移指令。分支程序有:单分支结构、双分支结构、多分支结构(散转)。,编写程序,根据x的值求y的值,并放回原单元中。,-分支结构,例4-3 设变量x以补码形式存放在片内RAM的30H单元中,变量y与x的关系是:,08:46,26,4.2.2 分支程序,-分支结构实例,ORG 1000H START: MOV A, 30H JZ NEXT ;x=0,转移 ANL A, #80H ;保留符号位 JZ ED ;x 0 ,转移 MOV A, #05H ;x 0,不转移 ADD A, 30H MOV 30H, A SJMP ED NEXT:
17、 MOV 30H, #20H ED: SJMP $,程序如下,08:46,27,例4-4 128种分支转移程序。根据入口条件转移到128个目的地址。 入口:(R3)转移目的地址的序号00H7FH。 出口:转移到相应于程序入口。,4.2.2 分支程序,-分支结构实例,JMP-128: MOV A, R3 RL A MOV DPTR, #JMPTAB JMP A+DPTR JMPTAB: AJMP ROUT00 ;128个子程序首址 AJMP ROUT01 AJMP ROUT7F,08:46,28,4.2.3 循环程序,典型循环程序包含四部分:初始化部分、循环处理部分、循环控制部分和循环修改部分。
18、下面分别介绍这四个组成部分。 1) 初始化部分:设置循环开始的初始值,为循环做准备。 2) 循环处理部分:循环程序中重复执行的内容。 3) 循环控制部分:判断是否结束循环。 4) 循环修改部分:修改循环参数,为执行下一次循环做准备。,-循环结构,08:46,29,-循环结构,4.2.3 循环程序,先执行后判断,先判断后执行,08:46,30,例4-5 设有一带符号的数组存放在内部RAM以20H为首址的连续单元中,其长度为90,要求找出其中的最大值,并将其存放到内部RAM的1FH单元中,试编写相应的程序。 分析:开始时将第一单元内容送A,接着从第二位起依次将其内容x与A比较,如xA,那么将x送A
19、;如果Ax,那么A值不变,直到最后一个单元内容与A比较、操作完毕,则A中就是该数组中的最大数,这里需要解决如何判别两个带符号数A和x的大小。通常可以采用如下的方法:首先判断A和x是否同号,若是同号则进行A-X操作,如差0,那么AX;如果差X(或A);如为负,则A(或x)x(或A)。程序如下:,-循环结构实例,4.2.3 循环程序,08:46,31,-循环结构实例,4.2.3 循环程序,ORG 1000H SCMPPMA:MOV R0, #20H ;置取数指针R0初值 MOV B, #59H ;置循环计数器B初值 MOV A, R0 ;第一个数送A SCLOOP:INC R0 ;修改指针 MOV
20、 R1, A ;暂存 XRL A, R0 ;两数符号相同? JB ACC.7, RESLAT ;若相异,则转RESLAT MOV A, R1 ;若相同,则恢复A中原来值 CLR C ;C清零 SUBB A, R0 ;两数相减,以判断两者的大小 JNB ACC.7, SMEXT1 ;若A中值为大,则转SMEXT1 CXAHER:MOV A, R0 ;若A中值为小,则将大数送入A SJMP SMEXT2 RESLAT: XRL A, R0 ;恢复A中原值 JNB ACC.7, SMEXT2 ;若A中值为正,侧转SMEXT2 SJMP CXAHER ;若A中值为负,则转CXAHER SMEXT1:
21、MOV R1,A ;恢复A中原值 SMEXT2: DJNZ B, SCLOOP MOV 1FH, A ;最大者送1FH单元 END,08:46,32,例4-6 将内部RAM中起始地址为data的数据串传送到外部RAM中起始地址为buf的存储区域内,直到发现“$”字符停止传送。 本例结束条件为找到“$”停止传送。程序如下:,4.2.3 循环程序,ORG 8000H MOV R0, #DATA ;置源数据区首地址 MOV DPTR, #BUF ;置目的数据区首地址 LOOP0: MOV A, R0 ;取数据 CJNE A, #24H, LOOP1 ;判断是否为$字符 SJMP LOOP2 ;是$,
22、转结束 LOOP1: MOVX DPTR, A ;不是$,执行传送 INC R0 ;修改源地址 INC DPTR ;修改目的地址 SJMP LOOP0 ;传送下一个数据 LOOP2: END,-循环结构实例,08:46,33,例4-7 设8031单片机使用12MHz晶振(机器周期T为ls),试设计延迟100ms的延时程序。,4.2.3 循环程序,ORG 4000H DEYPRG: MOV R5, #100 ;置外循环计数器R5初值为100 LOOP1: MOV R6, #200 ;置2层循环计数器R6初值为200 LOOP2: MOV R7, #248 ;置3层循环计数器R7初值为248 LO
23、OP3: DJNZ R7, LOOP3 ;3层循环计数结束否? DJNZ R6, LOOP2 ;2层循环计数结束否? DJNZ R5, LOOP1 ;外循环计数结束否? RET,08:46,34,在上例程序中采用了多重循环程序,即在一个循环体中又包含了其他的循环程序,这种方法是实现延时程序的常用方法。使用多重循环时,必须注意以下几点。 (1) 循环嵌套,必须层次分明,不允许产生内外层循环交叉; (2) 外循环可以一层层向内循环进入,结束时由里往外一层层退出; (3) 内循环可以直接转入外循环,实现一个循环由多个条件控制的循环结构方式。,4.2.3 循环程序,08:46,35,4.2.4 查表程
24、序,查表程序是一种常用的程序,它广泛使用于LED显示器控制、打印以及数据补偿、计算、转换等功能程序中,具有程序简单、执行速度快等优点。查表,就是根据变量x在表格中查找y,使y=f (x)。 例4-8 试编写程序,将16进制数转换成ASCII码。 分析:16进制09的ASCII码为3039H,AF的ASCII码为41H46H,ASCII码表的首地址为ASCTAB。 入口:HEX单元的低四位存放16进制数。 出口:转换后的ASCII码送回HEX单元。,-查表程序,08:46,36,在这个程序中,查表指令MOVC A, A+PC到表格首地址有两条指令,占用3个地址空间,故变址调整为加3。,-查表程序
25、,4.2.4 查表程序,ORG 0200H HEX EQU 33H HEXASC:MOV A, HEX ANL A, #0FH ADD A, #03H ;变址调整 MOVC A, A+PC MOV HEX, A RET ASCTAB: DB 30H, 31H, 32H, 33H DB 34H, 35H, 36H, 37H DB 38H, 39H, 41H, 42H DB 43H, 44H, 45H, 46H END,08:46,37,例4-9 设有一个巡回检测报警装置,需对16路输入进行检测,每路有一个最大允许值,它为双字节。检测时需根据测量的路数,找出该路的最大允许值。再判断输入值是否大于最
26、大允许值,如大于则报警。这里只考虑查找最大值。 分析:设x为路数,放在R2中。y为最大允许值,放在表格中。查表后,最大值放在R3、R4中。,4.2.4 查表程序,-查表程序,08:46,38,ORG 4000H PM1: MOV A, R2 ;其值范围为00H0FH(如04) ADD A, R2 ;A(R2)2,因最大允许值占两个字节(如08) MOV R3, A ;R3(R2)2(如08) ADD A, #06H ;加偏移量,(如400CH-4006H=#06H) MOVC A, A+PC ;查第1字节(如地址=400CH+8=4015H) XCH A, R3 ;存第1字节(如33),准备取
27、第2字节 ADD A, #03H ;加偏移量(如400CH-400AH+01H=#03H) MOVC A, A+PC ;查第2字节(如400AH+0BH=4016H) MOV R4, A ;存第2字节(如88) RET TABI: DW 2520, 3721, 4264, 7560 ;最大值表 DW 3388, 3265, 7883, 9943 DW 1050, 4051, 6785, 8931 DW 5468, 5871, 3284, 6688,4.2.4 查表程序,-查表程序,08:46,39,4.2.5 子程序,同一个程序中,往往有许多地方都需要执行同样的一项任务,这时可以对这项任务进行
28、独立的编写,形成一个子程序。在原来的主程序中需要执行该任务时,调用该子程序,执行完后又返回主程序,继续以后的操作,这就是所谓的子程序结构。在程序设计过程中,适当地使用子程序具有以下优点: 1) 不必重复编写同样的程序,提高了编码的效率。 2) 缩短了源程序和目标程序的长度,节省了程序存储器的空间。 3) 使程序模块化、通用化,便于阅读、交流和共享。 4) 便于分块调试。,-子程序,08:46,40,在子程序调用过程中须解决以下两个方面的问题: 1) 保护现场和恢复现场。 2) 调用程序与被调用程序之间的参数传递。 保护现场和恢复现场 方法就是在进入子程序时,将需要保护的数据推入堆栈,而空出这些
29、数据所占用的工作单元,供子程序中使用。在返回调用程序之前,再将推入堆栈的数据弹出到原有的工作单元,恢复其原来的状态,使调用程序可以继续往下执行。,4.2.5 子程序,-参数传递,08:46,41,参数传递 子程序调用时,要特别注意主程序与子程序之间的信息交换问题。在调用一个子程序时,主程序应先把有关参数(子程序入口条件)放到某些约定的位置,子程序在运行时,可以从约定的位置得到有关参数。同样子程序结束前,也应把处理结果(出口条件)送到约定位置。返回后,主程序便可从这些位置得到需要的结果,这就是参数传递。,4.2.5 子程序,-参数传递,08:46,42,参数传递大致可分为以下几种方法: 1) 传
30、递数据。将数据通过工作寄存器R0R7和累加器来传送。即主程序和子程序在交接处,通过上述寄存器和累加器存储同一参数。 2) 传送地址。数据存放在数据存储器中,参数传递时只通过R0、R1或DPTR传递数据所存放的地址。 3) 通过堆栈传递参数。在调用之前,先把要传送的参数压入堆栈,进入子程序之后,再将压入堆栈的参数弹出到工作寄存器或者其他内存单元。,4.2.5 子程序,-参数传递,08:46,43,例4-10 试编写程序,计算,分析:a1、a2、.、a10存放在内部RAM的20H开始的存储区域内,计算所得结果存放在R3、R2中。要求:平方运算编写成子程序SORT,主程序通过调用SORT并求和完成运
31、算。参数的传递用累加器。,4.2.5 子程序,-子程序应用,08:46,44,ORG 8000H MAIN: MOV R0, #20H ;置数据指针 MOV R7, #10 ;置计数初值 MOV R3, #0 ;结果单元清零 MOV R2, #0 LOOP: MOV A, R0 ;取数 ACALL SORT ;调用求平方子程序 ADD A, R2 ;累加平方和 MOV R2, A ADDC A, #0 ;加进位Cy INC R0 ;修改指针 DJNZ R7, LOOP ;未完,继续 SJMP EN SORT: MOV DPTR, #TAB ;进入子程序查平方表 MOVC A, A+DPTR R
32、ET ;返主程序 TAB: DB 0, 1, 4, 9, 16 DB 25, 36, 49, 64, 81 EN: NOP END,4.2.5 子程序,-子程序应用,08:46,45,4.3 汇编语言程序设计实例,例4-13 多字节无符号数加法运算程序。 编程说明:多字节运算一般是按照从低字节到高字节的顺序依次进行的。 入口: R0被加数低位地址指针; R1加数低位地址指针; R2字节数。 出口: R0和数高位地址指针。,4.3.1 算术运算程序,-算术运算程序,08:46,46,说明:要考虑低字节向高字节的进位情况,最低两字节相加,无低位的进位,因此,在进入循环之前应先对进位标志清0。最高位
33、两字节相加若有进位,则和数将比加数和被加数多出一个字节。此程序执行后,被加数被覆盖。,4.3 汇编语言程序设计实例,-算术运算程序,ADDBIN: CLR C LOOP1: MOV A, R0 ;取被加数 ADDC A, R1 ;两数相加,带进位 MOV R0, A INC R0 INC R1 DJNZ R2, LOOP1 ;未加完转LOOP1 JNC LOOP2 ;无进位转LOOP2 MOV R0, #01H RET LOOP2: DEC R0 RET,08:46,47,例4-14 实现下列两位16进制数乘法运算程序。 (R7R6)16(R5R4)16(R3R2R1R0)16 编程说明:MC
34、S-51乘法指令只能完成两个8位无符号数相乘,因此16位无符号数求积必须将它们分解成8位数相乘来实现。其方法有“先乘后加”和“边乘边加”两种。现以“边乘边加”为例设计。程序如下:,4.3 汇编语言程序设计实例,-算术运算程序,08:46,48,汇编语言程序设计实例,-算术运算程序,08:46,49,例4-15 双字节无符号数除法运算程序。 编程说明:本程序采用移位除法的方法,实现双字节无符号数相除,并考虑四舍五入。 入口: R5(高)、R4(低),被除数; R3(高)、R2(低),非零除数。 出口: R5(高)、R4(低),商; R7(高)、R6(低),余数。 程序清单如下:,4.3 汇编语言
35、程序设计实例,-算术运算程序,08:46,50,-算术运算程序,汇编语言程序设计实例,08:46,51,4.3 汇编语言程序设计实例,-算术运算程序,汇编语言程序设计实例,08:46,52,习题与思考题,1. 常用的程序结构有哪几种?特点如何? . 子程序调用时,参数的传递方法有哪几种? . 编写程序,将片内30H39H单元中的内容送到以2000H为首的外部存储器。 . MCS-51系列单片机汇编语言进行程序设计的步骤如何? . 编写程序,采用算术平均值滤波法求采样平均值,设8次采样值依次放在20H27H的连续单元中,结果保留在A中。 6. 编写程序,将存放在内部RAM起始地址为20H和30H的两个3字节无符号相减,结结果存放在内部RAM单元70H、71H、72H中(低位对应低字节)。,第4章 MCS-51汇编语言程序设计,08:46,53,7. 编写程序,实现两个双字节无符号数的乘法运算,乘数存放在R2和R3中(R2存放高字节,R3存放低字节,以下类同),被乘数存放在R6和R7中,积存放在R4、R5、R6和R7中。 8. 假设在R0指向的片内RAM区,存有20个16进制数的ASCII字串。将ASCII码转换为16进制数,然后两两合成一个字节,从低地址单元到高地址单元依次组合。 9. 结合例25和图4-5编写线性标度变换程序。,习题与思考题,第4章 MCS-51汇编语言程序设计,
链接地址:https://www.31doc.com/p-2001078.html