好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

汇编语言程序设计4-1汇编语言基本概念.ppt

25页
  • 卖家[上传人]:壹****1
  • 文档编号:584189772
  • 上传时间:2024-08-30
  • 文档格式:PPT
  • 文档大小:301KB
  • / 25 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 第四章第四章 汇编语言程序设计汇编语言程序设计4-1 4-1 汇编语言基本概念汇编语言基本概念4-2 4-2 汇编语言程序设计汇编语言程序设计 4-1 4-1 汇编程序基本概念汇编程序基本概念4-1-1 4-1-1 程序设计语言程序设计语言 用于编制计算机程序的语言称为用于编制计算机程序的语言称为程序设计语言程序设计语言按照语言的结构及其功能可以分为三种:机器语言、汇编照语言的结构及其功能可以分为三种:机器语言、汇编语言、高级语言语言、高级语言一、机器语言一、机器语言二、汇编语言二、汇编语言用汇编语言编写的、完成特定功能的指令序列用汇编语言编写的、完成特定功能的指令序列特点有:特点有: 用二进制代码用二进制代码0和和1表示指令和数据的最原始的程序表示指令和数据的最原始的程序设计语言其直接取决于计算机的结构,响应速度最快,设计语言其直接取决于计算机的结构,响应速度最快,但程序繁琐、难认、难记但程序繁琐、难认、难记1)汇编语言指令与机器语言指令相对应,有效地利用存储空间汇编语言指令与机器语言指令相对应,有效地利用存储空间2)指令直接访问)指令直接访问CPU的寄存器、存储单元和的寄存器、存储单元和I/O端口,可以充分端口,可以充分发挥发挥CPU的功能,满足实时控制的要求。

      的功能,满足实时控制的要求3)是面向机器的语言,使用者必须对机器的硬件结构、指令系统)是面向机器的语言,使用者必须对机器的硬件结构、指令系统都要熟悉汇编语言程序的通用性差,程序移植起来不方便都要熟悉汇编语言程序的通用性差,程序移植起来不方便 汇编汇编三、高级语言三、高级语言 高级语言是以接近于人的自然语言,面向过程而独高级语言是以接近于人的自然语言,面向过程而独立于机器的通用语言必须经编译程序或解释程序进行立于机器的通用语言必须经编译程序或解释程序进行翻译生成目标程序,机器才能执行翻译生成目标程序,机器才能执行 特点:特点:简单、易学、通用性好,便于移植但是,简单、易学、通用性好,便于移植但是,其目标程序占存储单元多,执行时间长;在其目标程序占存储单元多,执行时间长;在MCS-51系系列单片机开发应用中,单片机的列单片机开发应用中,单片机的C语言语言C51正得到越来正得到越来越广泛的应用越广泛的应用 汇编语言程序到机器语言程序的转换过程称为汇编语言程序到机器语言程序的转换过程称为汇编汇编1.手工汇编手工汇编:人工查指令表汇编用于设计短小程序:人工查指令表汇编。

      用于设计短小程序或调试程序的场合或调试程序的场合2.机器汇编机器汇编:用汇编程序进行汇编用汇编程序进行汇编 4-1-2 4-1-2 汇编语言的语句结构汇编语言的语句结构二、汇编语言的语句格式二、汇编语言的语句格式汇编语言一般由四部分组成格式如下:汇编语言一般由四部分组成格式如下: 标号:标号: 操作码操作码 操作数操作数 ;; 注释注释 START:: MOV A,, 30H ;;A←((30H)) 各各部部分分之之间间须须用用分分隔隔符符,,即即在在标标号号之之后后要要加加冒冒号号“::”;;在在操操作作码码与与操操作作数数之之间间用用空空格格间间隔隔;;在在操操作作数数内内部部用用逗逗号号“,,”将将源源操操作作数和目的操作数隔开;注释段用分号(;)隔开数和目的操作数隔开;注释段用分号(;)隔开 一一. 汇编语言指令类型汇编语言指令类型1.1.机器指令机器指令:: 指令系统中的全部指令,每条指令有对应的机器代码指令系统中的全部指令,每条指令有对应的机器代码2 2. 伪指令伪指令:: 汇编控制指令,仅提供汇编信息,没有指令代码。

      汇编控制指令,仅提供汇编信息,没有指令代码 4-1-3 4-1-3 伪指令伪指令 常用伪指令及其功能:常用伪指令及其功能:1. 1. ORGORG——起始地址指令:指明程序和数据块起始地址起始地址指令:指明程序和数据块起始地址指令地址指令地址 机器码机器码源程序源程序ORGORG 2000H 2000H 2000H 78 30 2000H 78 30 MAIN MAIN::MOV R0MOV R0,,#30H#30H 2002H E6 2002H E6MOV AMOV A,,@R0@R0 … …ORG 3000HORG 3000H 3000H 23 3000H 23DB 23HDB 23H,,100100,,‘A’ ‘A’ 3001H 64 3001H 64 3002H 3002H4141 2 2. . DB DB ——定定 义义 字字 节节 型型 常常 数数 指指 令令 例:例: DB 12HDB 12H,,100100,,‘A’‘A’ 4.4. EQU EQU ——赋值。

      为标号或标识符赋值为标号或标识符赋值 X1 X1 EQU 2000HEQU 2000H X2 EQU 0FHX2 EQU 0FH ……MAIN:MAIN:MOV DPTRMOV DPTR,,#X1#X1 ADD AADD A,,#X2#X2 5.5. BITBIT — —位定义 例:例:FLAG BIT 30H FLAG BIT 30H 3. 3. DW DW ——定定义义字字型型常常数数指指令令例:例: DW 1234HDW 1234H,,5678H5678H 6.6. ENDEND — —结束汇编指令结束汇编指令 4-2 4-2 汇编语言程序设计汇编语言程序设计一一. .分析问题,建立数学模型分析问题,建立数学模型 开始开始1 YN?4-2-1 4-2-1 4-2-1 4-2-1 汇编语言程序设计步骤汇编语言程序设计步骤汇编语言程序设计步骤汇编语言程序设计步骤 常用程序结构常用程序结构 顺序程序、分支程序、循环程序、子程序顺序程序、分支程序、循环程序、子程序4-2-2 4-2-2 顺序程序顺序程序 顺序程序又称简单程序,程序走向只有一条路径。

      顺序程序又称简单程序,程序走向只有一条路径例例1 1::双双字字节节求求补补程程序序( (设设数数据据在在R4R5R4R5中中) )::MOVMOV A A,,R5R5;;取低字节取低字节CPLCPL A AADDADD A A,,#01H#01H;;低字节变补低字节变补MOVMOV R5 R5,,A AMOVMOV A A,,R4R4;;取高字节取高字节CPLCPL A AADDC AADDC A,,#00H#00H;;高字节变补高字节变补MOVMOV R4 R4,,A A 例例2 2::将将30H单元内的两位单元内的两位BCD码拆开并转换成码拆开并转换成ASCII码,存入码,存入RAM两个单元中两个单元中ORG 2000HMOV A ,,30H ;;取值取值ANL A,,#0FH ;;取低四位取低四位ADDA,,#30H, ;;转换成转换成ASCII码码MOV 32H ,,A ;;保存结果保存结果MOV A ,,30H ;;取值取值SWAP A ;;高高4位与低四位互换位与低四位互换ANLA,,#0FH ;;取低四位(原高取低四位(原高4位)位)ADD A,,#30H, ;; 转换成转换成ASCII码码MOV 31H ,,A ;;保存结果保存结果 SJMP $ END 结束取数据低4位转换成ASCII码存ASCII码取数据高4位转换成ASCII码存ASCII码开始 4-2-34-2-3 分支程序分支程序由条件转移指令构成程序判断框部分,形成程序分支结构。

      由条件转移指令构成程序判断框部分,形成程序分支结构单重分支程序单重分支程序一个判断决策框,程序有两条出路一个判断决策框,程序有两条出路两种分支结构:两种分支结构:条件满足?N影响条件Y处理段条件满足?N影响条件Y处理1处理2例例1 1:: 求求R2R2中补码绝对值,正数中补码绝对值,正数 不变,负数变补不变,负数变补 ORG 1000H ORG 1000H MOV A MOV A,,R2R2 JNB ACC.7 JNB ACC.7,,NEXTNEXT;;为正数为正数?? CPL A CPL A ;;负数变补负数变补 INC AINC A MOV R2 MOV R2,,A ANEXTNEXT::SJMP NEXT SJMP NEXT ;;结束结束 多重分支程序多重分支程序一.多次使用条件转移指令,形成两个以上判断框一.多次使用条件转移指令,形成两个以上判断框例例2 2:: 求符号函数求符号函数Y=SGN(X)Y=SGN(X) +1 +1 当当 X>0X>0SGN(X)= 0 SGN(X)= 0 当当 X=0X=0 -1 -1 当当 X<0X<0X=0?Y取XNY= 0Y= + 1开始Y=-1X<0?NY保存Y结束ORG 0100HSYMB:: MOV A,,40H ;;取取X JZ STOR ;;X=0,,Y=X JB ACC7,,MINUS;;X<<0 MOV A,,# 1 ;;X>>0,,Y=+1 SJMP STORMINUS::MOV A,,#0FFH;;X<<0,,Y= -1STOR:: MOV 41H,,A ;;保存保存Y RET 二.按分支号转移二.按分支号转移如:分支号如:分支号=0,程序转移到,程序转移到ADDR0处;当分支号处;当分支号=1,,程序转移到程序转移到ADDR1处;处;… 。

      1)用地址表法用地址表法例例3::设分支号已存入设分支号已存入AMTJS::MOV DPTR,,#TAB ;;取表首地址取表首地址 CLR C ;;分支号分支号×2 RLC A MOV R2,,A MOVC A,@,@A+DPTR;;取分支地址低位取分支地址低位 PUSH ACC ;;入栈保存入栈保存 MOV A,,R2 INC A MOVC A,@,@A+DPTR;;取分支地址高位取分支地址高位 PUSH ACC ;;入栈保存入栈保存 RET ;;分支地址分支地址→PC,,转移转移TAB:: DW ADDR0 ;;分支地址表分支地址表 DW ADDR1… ADDR0::… ;;程序段程序段0 …A = ?0处理一处理二处理…1n (2)转移表法转移表法用分支转移指令用分支转移指令 JMP @A+DPTRJMP @A+DPTR例例4:: 根据根据R0的值转向的值转向6个分支程序个分支程序 R0<10,,转向转向SUB0;; R0<20,,转向转向SUB1;; … R0<60,,转向转向SUB5;;K=?转SUB0转SUB1转SUB5K=0 K=1 K=5开始 ORG2000H MOV DPTR,,#TAB;;转移指令表首地址转移指令表首地址 MOV A, R0 ;;取数取数 MOV B, #10 DIV AB ;;A除除10,商在,商在A中中 CLR C RLC A ;;A←2A JMP @A+DPTR ;;PC ← A+DPTRTAB: AJMP SUB0 ;;转移指令表转移指令表 AJMP SUB1 AJMP SUB2 … AJMP SUB5 4-2-44-2-4 循环程序循环程序包含多次重复执行的程序段,循环结构使程序紧凑。

      包含多次重复执行的程序段,循环结构使程序紧凑循环程序的构成循环程序的构成循环控制 ?循环工作循环结束循环初始化YN一.初始化部分一.初始化部分循环准备工作如:清结果单元、循环准备工作如:清结果单元、设指针、设循环控制变量初值等设指针、设循环控制变量初值等二.循环体二.循环体需多次重复处理的程序段需多次重复处理的程序段1.1.修改指针和循环控制变量修改指针和循环控制变量2.2.检测循环条件:满足循环条件,继续循环,否则退出循环检测循环条件:满足循环条件,继续循环,否则退出循环 处理和保存循环结果处理和保存循环结果循环程序按结构形式,分为循环程序按结构形式,分为单重循环单重循环与与多重循环多重循环 单重循环单重循环简单循环结构:循环体中不套循环简单循环结构:循环体中不套循环例例1 1::求求n n个单字节数据的累加,设数据串已在个单字节数据的累加,设数据串已在4343H H起始单元,起始单元,数据串长度在数据串长度在4242H H单元,累加和不超过单元,累加和不超过2 2个字节SUMSUM:: MOVMOVR0R0,,#42H#42H;;设指针设指针MOVMOVA A,,@R0@R0MOVMOVR2R2,,A A ;;循环计数器循环计数器←←n nCLRCLRA A ;;结果单元清结果单元清0 0MOVMOVR3R3,,A AADD1ADD1::INCINCR0R0 ;;修改指针修改指针ADDADDA A,,@R0 @R0 ;;累加累加JNC NEXTJNC NEXT ;;处理进位处理进位INCINCR3R3 ;;有进位,高字节加有进位,高字节加1 1NEXT:NEXT: DJNZ DJNZ R2,ADD1 R2,ADD1 ;;循环控制:数据是否加完循环控制:数据是否加完??MOVMOV40H40H,,A A ;;循环结束,保存结果循环结束,保存结果MOVMOV41H41H,,R3R3RETRET 循环控制方法:计数控制、特征标志控制。

      循环控制方法:计数控制、特征标志控制一一. .计数控制:计数控制:设循环计数器,控制循环次数正计数和倒计数两种方式设循环计数器,控制循环次数正计数和倒计数两种方式例例2 2::为为一一串串7 7位位ASCIIASCII码码数数据据的的D D7 7位位加加上上奇奇校校验验,,设设数数据据存存放在片外放在片外RAMRAM的的21012101H H起始单元,数据长度在起始单元,数据长度在21002100H H单元MOV DPTRMOV DPTR,,#2100H#2100HMOVX AMOVX A,,@DPTR@DPTRMOV R2MOV R2,,A ANEXTNEXT::INC DPTRINC DPTRMOVX AMOVX A,,@DPTR@DPTRORL AORL A,,#80H#80HJNB PJNB P,,PASSPASSMOVX @DPTRMOVX @DPTR,,A APASSPASS::DJNZ R2DJNZ R2,,NEXTNEXTDONEDONE::SJMP DONESJMP DONE 二二. .特征控制:特征控制:设定循环结束标志实现循环控制设定循环结束标志实现循环控制。

      例例3 3::找正数表最小值正数表存在片外找正数表最小值正数表存在片外RAMRAM中以中以LISTLIST为为起始单元,用起始单元,用-1-1作为结束标志作为结束标志STARTSTART::MOVMOVDPTRDPTR,,#LIST#LIST ;;数表首地址数表首地址 MOVMOVB B,,#127#127 ;;预置最小值预置最小值NEXTNEXT:: MOVX A MOVX A,,@DPTR@DPTR ;;取数取数 INCINCDPTRDPTR ;;修改指针修改指针 CJNE ACJNE A,,#-1#-1,,NEXT1NEXT1;;是否为数表结尾?是否为数表结尾? SJMP DONESJMP DONE ;;循环结束循环结束NEXT1NEXT1::CJNE ACJNE A,,B B,,NEXT2NEXT2 ;;比较比较NEXT2NEXT2::JNCJNCNEXTNEXT MOV MOVB B,,A A ;;保存较小值保存较小值 SJMP NEXTSJMP NEXTDONEDONE:: SJMP DONE SJMP DONE习题:习题:统计一班考试为统计一班考试为100100分和不及格人数,成绩在分和不及格人数,成绩在4141H H起始单元。

      起始单元 多重循环多重循环循环体中套循环结构以双重循环使用较多循环体中套循环结构以双重循环使用较多例例4 4::将内存一串单字节无符号数升序排序将内存一串单字节无符号数升序排序步骤:步骤:每次取相邻单元的两个数比较,决定是否需要交换数据位置每次取相邻单元的两个数比较,决定是否需要交换数据位置第一次循环,比较第一次循环,比较N-1N-1次,取到数据表中最大值次,取到数据表中最大值第二次循环,比较第二次循环,比较N-2N-2次,取到次大值次,取到次大值 … …第第N-1N-1次循环:比较一次,排序结束次循环:比较一次,排序结束内循环控制内循环控制 ?循环工作循环工作循环结束循环结束外循环控制外循环控制 ?内循环初始化内循环初始化开始开始外循环初始化外循环初始化 SORTSORT:: MOV MOV A A,,#N-1#N-1;;N N个数据排序个数据排序 MOVMOV R4 R4,,A A;;外循外循环次数环次数LOOP1LOOP1:: MOV MOV A A,,R4R4 MOV MOV R3 R3,,A A;;内循内循环次数环次数 MOVMOV R0 R0,,#TAB#TAB;;设数据指针设数据指针LOOP2LOOP2:: MOV MOV A A,,@R0@R0;;取二数取二数 MOVMOV B B,,A A INC INC R0 R0 MOV MOV A A,,@R0@R0 CJNE A CJNE A,,B B,,L1L1;;比较比较L1L1:: JNC JNC UNEX UNEX;;A≥BA≥B,,不交换不交换 DECDEC R0 R0;;否则交换数据否则交换数据 XCHXCH A A ,,@R0@R0 INC INC R0 R0 MOV MOV @R0 @R0,,A AUNEXUNEX:: DJNZ R3 DJNZ R3,,LOOP2LOOP2;;内循环结束?内循环结束? DJNZ R4DJNZ R4,,LOOP1LOOP1;;外循环结束?外循环结束? RETRETR3←R3—1=0 ?B ←((R0)) A ← ( R0 + 1 )循环结束循环结束外循环次数外循环次数→R4R4←R4—1=0 ?内循环次数内循环次数→R3表首表首TAB→R0开始开始A ≥ BA ≥ B??( (R0)←→(R0+1)R0)←→(R0+1)R0 ← R0+1R0 ← R0+1Y YN N 软件延时程序软件延时程序用循环程序将指令重复多次执行,实现软件延时。

      用循环程序将指令重复多次执行,实现软件延时试计算延时程序的执行时间试计算延时程序的执行时间源程序源程序指令周期指令周期( (M) M) 指令执行次数指令执行次数习题:习题:DELAYDELAY::MOV R6MOV R6,,#100#1001 1D1D1:: MOV R7 MOV R7,,#10#101 1D2D2:: NOP NOP1 1 DJNZ R7DJNZ R7,,D2D22 2 DJNZ R6 DJNZ R6,,D1D12 2 RET RET2 2计算延时程序的执行时间计算延时程序的执行时间( (设时钟设时钟f=6MHz,M=1μs)f=6MHz,M=1μs)DELAYDELAY::MOV R6MOV R6,,#64H#64H1 1I1I1:: MOV R7 MOV R7,,#0FFH#0FFH1 1I2I2:: DJNZ R7 DJNZ R7,,I2I22 2 DJNZ R6 DJNZ R6,,I1I12 2 RET RET2 2延时时间计算:(设时钟延时时间计算:(设时钟f=12MHzf=12MHz))t=(1×1+1×100+2×100×255+2×100+2×1)×M=51.3 mst=(1×1+1×100+2×100×255+2×100+2×1)×M=51.3 ms1 1100100100100×255×2551001001 1 4-2-5 4-2-5 子程序子程序子程序:子程序:能完成某项特定功能的独立程序段,可被反复调用。

      能完成某项特定功能的独立程序段,可被反复调用调用子程序:调用子程序:就是暂时中断主程序的执行,而转到子程序的入就是暂时中断主程序的执行,而转到子程序的入口地址去执行子程序子程序执行完毕,自动返回主程序,主口地址去执行子程序子程序执行完毕,自动返回主程序,主程序再继续往下执行程序再继续往下执行子程序设计子程序设计一.子程序入口用标号作为子程序名一.子程序入口用标号作为子程序名二.调用子程序之前设置好堆栈二.调用子程序之前设置好堆栈三三..用用返返回回指指令令RETRET结结束束子子程程序序,,并并保保 证堆栈栈顶为调用程序的返回地址证堆栈栈顶为调用程序的返回地址四四. .子程序嵌套须考虑堆栈容量子程序嵌套须考虑堆栈容量五五. .提供足够的调用信息提供足够的调用信息: :如如::子子程程序序名名、、子子程程序序功功能能、、入入口口参参数数和和出出口口参参数数、、子子程程序序占占用用的的硬硬件件资资源、子程序中调用的其他子程序名源、子程序中调用的其他子程序名 子程序的类型子程序的类型按子程序与主程序之间传递参数的方式分类按子程序与主程序之间传递参数的方式分类入口参数:入口参数:调用子程序之前,需要传给子程序的参数。

      调用子程序之前,需要传给子程序的参数出口参数:出口参数:子程序送回调用程序的结果参数子程序送回调用程序的结果参数选用不同的参数传递方式选用不同的参数传递方式 设计子程序应满足通用性的要求,不针对具体数据编程设计子程序应满足通用性的要求,不针对具体数据编程如:如:1.1.子程序功能为求单字节数的立方:子程序功能为求单字节数的立方: A¬AA¬A3 3,,入口参数和出口参数为入口参数和出口参数为A A n n次方:次方:(41(41H)(42H)¬(40H)H)(42H)¬(40H)A A,,入口参入口参数为数为(40(40H)H)和和A A,,出口参数为出口参数为(42(42H)(41H)H)(41H) 例例1 1::将将R4R5R6R4R5R6中三个字节数据对半分解,变成中三个字节数据对半分解,变成6 6个字节,个字节, 存入显示缓冲区存入显示缓冲区( (DISMEM0DISMEM0~~DISMEM5)DISMEM5)1 1)子程序)子程序UFOR1UFOR1的功能:将的功能:将A A累加器中累加器中单字节数据,对半分解成两个字节,单字节数据,对半分解成两个字节,存入存入R0R0所指向的相邻两个单元所指向的相邻两个单元UFOR1UFOR1::MOV @R0MOV @R0,,#0#0 XCHD A XCHD A,,@R0@R0 ;;保存低保存低半字节半字节 INC R0INC R0 ;;修改指针修改指针 MOV @R0MOV @R0,,#0#0 SWAP A SWAP A XCHD A XCHD A,,@R0@R0 ;;保存高保存高半字节半字节 RETRET2 2)调用子程序)调用子程序UFOR1UFOR1之前,将待分解之前,将待分解的内容送的内容送A A,,存放地址送存放地址送R0R0。

      例例2 2::查表求出数据的查表求出数据的ASCIIASCII码,再以字符形式输出码,再以字符形式输出1 1)子程序)子程序HEXASCHEXASC功能:取出堆栈中数据,查表将低半功能:取出堆栈中数据,查表将低半字节转换成字节转换成ASCIIASCII码送累加器码送累加器A A2 2)分别将待转换数据入栈,然后调用子程序)分别将待转换数据入栈,然后调用子程序HEXASCHEXASC MOV SPMOV SP,,#30H#30H PUSH 40H PUSH 40H ;;入口参数入栈入口参数入栈 LCALL HEXASCLCALL HEXASC POP POP A A……HEXASCHEXASC::DECDEC SP SP ;;跳过返回地址跳过返回地址 DECDEC SP SP POP POP A A ;;取入口参数取入口参数…… ;查表求;查表求ASCIIASCII码码 PUSH APUSH A ;;保存出口参数保存出口参数 INCINC SP SP ;;指向返回地址指向返回地址 INCINC SP SP RET RET DB DB ‘0’ ‘0’,,‘1’‘1’,,… … ;;ASCIIASCII码表码表 4-2-6 位操作程序例例1::编写一程序,实现下图所示的逻辑运算电路。

      其中分别是单编写一程序,实现下图所示的逻辑运算电路其中分别是单片机端口线上的信息,片机端口线上的信息,RS0、、RS1是是PSW寄存器中的两个标志寄存器中的两个标志位,位,30H、、31H是两个位地址,运算结果由输出是两个位地址,运算结果由输出ORG 0000HANLC,,P1.1 CPL C MOV20H , C ;;暂存数据暂存数据MOV C , 30H ORL C , /31HANL C , RS1ANL C , 20HANL C , RS0MOV P1.0 ,C ;;输出结果输出结果SJMP $• &P3.1≥1&&P1.130H31HRS1RS0P1.0 。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.