第4章汇编语言程序设计及编程实例
单片机学习第四章汇编语言程序设计

ORG START:CLR
MOV SUBB JC MOV XCH MOV NEXT: NOP SJMP END
1000H C A,60H A,61H NEXT A,60H A, 61H 60H,A
$
;0→CY
;做减法比较两数 ;若(60H)小,则转移
;交换两数
整理课件
【例4.6】将R2中的一位十六进制数转换为 ASCII码,结果仍存放于R2中。
MOV R0, #0 SJMP NEXT4 NEXT2:MOV R0,A DEC R0 NEXT4:MOV 31H,R0 SJMP $ END
;取X ;与5比较
;X<5,则转NEXT2 ; ;设10<X,Y=X十1
;与1l比较 ;x>10,则转NEXT4
;5≤X≤10,Y=0
;X<5,Y=X-1 ;存结果
MOV
@R0,A
;保存结果
SJMP $
;原地踏步
END
整理课件
【例4.2】假设两个双字节无符号数,分别存 放在R1R0和R3R2中,高字节在前,低字 节在后。编程使两数相加,用R2R1R0存放 和。 对多字节的加法,存在最高位的进位问题。 如果最高位有进位,则和的字节数要比加 数或被加数的字节数多一个。
经常用于定义一个地址表。Yi为双字节数据, 它可以为十进制或十六进制的数,也可以 为一个表达式。高位数在前,低位数在后。
整理课件
• 例如: ORG 1000H DATA:DW 3241H,1234H,78H 上述程序将对从1000H单元开始的6个单元 赋值,赋值情况如何呢? (1000H)=32H,(1001H)=41H, (1002H)=12H,(1003H)=34H, (1004H)=00H,(1005H)=78H。
第4章汇编语言程序设计PPT教学课件

图 分支程序结构流程图
2020/12/11
《单片机应用技术》教学课件
12Leabharlann 第4章 汇编语言程序设计条件满足? Y
A
4.2.2 分支程序结构
第4章 汇编语言程序设计
目的:1.进一步熟悉指令系统 2.会编写简单的程序 3.上机训练
内容:4.1 汇编语言程序设计概述
4.2 三种程序结构 4.3 程序设计举例
2020/12/11
《单片机应用技术》教学课件
1
第4章 汇编语言程序设计
4.1 汇编语言程序设计概述
所谓程序设计,就是按照给定的任务要求,编写 出完整的计算机程序。要完成同样的任务,使用的方 法或程序并不是唯一的。
汇编后: (1000H)=12H (1001H ) = 34H
(1002H ) = 00H ( 1003H ) = ABH (1004H ) =00H (1005H) =0AH
2020/12/11
《单片机应用技术》教学课件
7
第4章 汇编语言程序设计
• (6)定义存储区伪指令DS
• 功能:从指定地址开始预留一定数量的内 存单元,以备源程序执行过程中使用。预
(4) 编写源程序
(5) 程序优化。
(6)上机调试、修改和最后确定源程序。
2020/12/11
《单片机应用技术》教学课件
10
第4章 汇编语言程序设计
4.2.1 顺序程序设计
顺序结构程序是一种最简单、最基本的程序,按照程序编 写的顺序依次执行。
【例4-1】两个多字节数加法
1.两个三字节无符号相加,其中被加数在内部RAM的 50H、51H和52H单元中;加数在内部RAM的53H、54H和 55H单元中;要求把相加之和存放在50H、51H和52H单元中 进位存放在位寻址区的00H位中。
单片机课件 汇编语言程序设计PPT

4.1 概述
---- 程序头( 即定义变量和等值符号)---SCL BIT P1.2 ;定义SCL位变量 SDA BIT P1.3 ;定义SDA位变量 ByteCon DATA 30H ;定义字节变量
ByteCon ……
ORG nnnn ;CPU复位后,第一指令机器码存 放单元地址,具体值由CPU类型决定。
用到的有关寄存器,如 Acc、PSW等,即保护现场 …… ;中断服务程序实体,具体指令由程序功能决
定 POP Acc POP PSW ;恢复现场
4.1 概述
CLR TI ;清除中断标志(在51系列中,对于电平触 发的外中断INT0和 INT1、串行接收及发送中断 RI、TI 等,不自动清除,需要在中断服务结束前,通过CLR指 令清除。
例4.9 在51系列中,外部中断0的入口地址为 0003H,显然只有0000H、0001H和0002H三个单 元,刚好可以存放一条长跳转指令的机器码。
4.1 概述
----- 主程序 ----ORG yyyy ;其中yyyy就是主程序代码存放区 的首地址,如0100H Main: MOV SP,#5FH ;初始化有关寄存器,如 设置SP、选择工作寄存器组。
际问题处理程序编写能力。
4.1 概述
4.1 概述 程序设计:为了解决某一个问题,将所设计应用
系统(单片机类型)的指令按一定顺序组合在一起。即用 计算机所能接受的语言把解决问题的步骤描述出来。
单片机汇编源程序结构与通用微机汇编源程序结构 略有不同,原因是:
1、一般没有可以直接利用的监控程序,所有程 序均要自己编写。
转移。(程序走向只有一条路径。)
例4.11 将两个半字节数组合成一个字节数。 设内部RAM中40H、41H单元分别存放着8位二进制
微机原理与接口技术汇编语言程序教案

微机原理与接口技术汇编语言程序教案第一章:汇编语言概述1.1 汇编语言的概念让学生了解汇编语言的定义、特点和作用。
让学生掌握汇编语言的基本组成元素,如指令、寄存器、操作数等。
1.2 汇编语言的表示方法让学生了解汇编语言的指令格式和操作数表示方法。
让学生掌握汇编语言的助记符及其含义。
1.3 汇编语言与机器代码的关系让学生了解汇编语言与机器代码的转换过程。
让学生掌握汇编语言指令与机器代码之间的对应关系。
第二章:汇编语言的语法规则2.1 指令语句的语法结构让学生了解指令语句的构成,包括操作码、寄存器、操作数等。
让学生掌握不同类型指令的语法规则,如数据传输指令、算术运算指令等。
2.2 伪指令和宏指令让学生了解伪指令和宏指令的概念及其作用。
让学生掌握伪指令和宏指令的语法规则和使用方法。
2.3 汇编语言的程序结构让学生了解汇编语言程序的组成部分,如数据段、代码段、堆栈段等。
让学生掌握汇编语言程序的格式和编写规范。
第三章:汇编语言的编程技巧3.1 寄存器的使用让学生了解寄存器的作用和分类,如AX、BX、CX、DX等。
让学生掌握寄存器在汇编语言编程中的应用技巧。
3.2 数据传输指令让学生了解数据传输指令的用法,如MOV、PUSH、POP等。
让学生掌握数据传输指令在汇编语言编程中的应用技巧。
3.3 算术运算指令让学生了解算术运算指令的用法,如ADD、SUB、MUL、DIV等。
让学生掌握算术运算指令在汇编语言编程中的应用技巧。
第四章:汇编语言程序设计实例4.1 实例一:计算两个数的和让学生了解程序设计的基本步骤,如编写算法、选择寄存器等。
让学生掌握汇编语言编程的基本技巧,如数据传输、算术运算等。
4.2 实例二:排序算法(冒泡排序)让学生了解排序算法的原理和实现方法。
让学生掌握汇编语言编程中循环结构和条件判断的使用技巧。
4.3 实例三:字符串操作让学生了解字符串的基本操作,如字符串长度计算、字符串复制等。
让学生掌握汇编语言编程中字符串操作的相关指令和技巧。
第四章 汇编语言程序设计

一、算术运算符
包括:+,-,*,/(取商),MOD(取余),SHL,SHR 特点:①运算对象及结果均为整数 ②地址只能加减 例: DA1 DA2 MOV MOV MOV MOV DB 1,2,3,4 DB 20 AX,30*5 汇编时 AL,31MOD5 AL,31/5 AL,DA2-DA1
MOV MOV MOV MOV
如:加法:1001、1D、2B……
特点:计算机能够直接识别,执行速度快;
但不方便记忆和编程
2、汇编语言(Assembly Language) 用助记符来表示指令,如:加法:ADD…… 特点:机器不能识别,需翻译;但仍然面向硬件, 执行速度较快;多用于编制系统程序、实时控制和通 信程序。 3、高级语言(High-level Language) 用数学语言和自然语言编程; 如:加法:+,输出:Printf… 特点:编程方便简单,无需了解机器硬件;但机器 不能识别,需要庞大的翻译系统,速度较慢。
类型 返回值 1 2 4 类型 返回值 -1 [FFH] -2 [FEH] DB DW DD
变量
标号
NEAR FAR
数值返回运算符(续)
LENGTH:
•对于一般变量,返回1; •对于DUP定义的变量,返回单元数(直接返回第一
个DUP前的N值); 说明:DUP为复制操作符,格式:N DUP(表达式); N表示复制次数,表达式为复制内容 例:2 DUP(1,2) 等价于 1,2,1,2
则:COUNT的值为5
COUNT表示:DA1,DA2占的字节总数(长度之和) 七、优先级(P136 表4-3)
4.3 伪指令语句
在汇编时进行处理,主要完成变量定义,段定义,
段分配,指示程序开始和结束等功能。
汇编语言编程实例

汇编语言编程实例一、引言汇编语言是计算机硬件和软件之间的桥梁,它是一种低级语言,可以直接控制计算机硬件。
汇编语言编程可以让程序员更加深入地理解计算机的工作原理,从而实现更高效的程序。
本文将介绍几个汇编语言编程实例,涉及到基本的输入输出、循环、条件判断、数组等知识点。
在这些实例中,我们将使用NASM汇编器进行编译和链接。
二、基本输入输出1. 输出字符串在汇编语言中,我们可以使用系统调用来进行输入输出操作。
在Linux 系统中,输出字符串的系统调用为write。
下面是一个输出字符串的示例程序:```section .datamsg db 'Hello, World!',0xa ;定义一个字符串len equ $-msg ;获取字符串长度section .textglobal _start_start:mov eax, 4 ;write系统调用号为4mov ebx, 1 ;文件描述符为1(标准输出)mov ecx, msg ;要输出的字符串地址mov edx, len ;要输出的字符数int 0x80 ;调用系统调用mov eax, 1 ;exit系统调用号为1xor ebx, ebx ;退出状态码为0int 0x80 ;调用系统调用退出程序```2. 输入数字类似地,在Linux系统中,输入数字的系统调用为read。
下面是一个输入数字的示例程序:```section .datamsg db 'Please enter a number: ',0xa ;提示信息len equ $-msg ;获取字符串长度buf resb 1 ;定义一个字节的缓冲区section .textglobal _start_start:mov eax, 4 ;write系统调用号为4mov ebx, 1 ;文件描述符为1(标准输出)mov ecx, msg ;要输出的字符串地址mov edx, len ;要输出的字符数int 0x80 ;调用系统调用mov eax, 3 ;read系统调用号为3mov ebx, 0 ;文件描述符为0(标准输入)mov ecx, buf ;缓冲区地址mov edx, 1 ;要读取的字节数int 0x80 ;调用系统调用sub al, '0' ;将ASCII码转换成数字值```三、循环和条件判断1. 计算1到100的和下面是一个计算1到100的和的示例程序,其中使用了循环和条件判断:```section .datasum dd 0 ;定义一个双精度浮点型变量sumsection .textglobal _start_start:xor eax, eax ;eax清零,作为计数器和累加器使用loop_start:inc eax ;eax自增1,相当于i++cmp eax, 100+1 ;比较i是否大于100,注意要加1je loop_end ;如果i等于101,跳转到loop_endadd dword [sum], eax ;将i加到sum中jmp loop_start ;跳转到loop_startloop_end:mov eax, dword [sum] ;将sum赋值给eax,作为返回值mov ebx, 1 ;exit系统调用号为1int 0x80 ;调用系统调用退出程序```2. 判断一个数是否为素数下面是一个判断一个数是否为素数的示例程序,其中使用了循环和条件判断:```section .datamsg db 'Please enter a number: ',0xa ;提示信息len equ $-msg ;获取字符串长度buf resb 1 ;定义一个字节的缓冲区section .textglobal _start_start:mov eax, 4 ;write系统调用号为4mov ebx, 1 ;文件描述符为1(标准输出)mov ecx, msg ;要输出的字符串地址mov edx, len ;要输出的字符数int 0x80 ;调用系统调用mov eax, 3 ;read系统调用号为3mov ebx, 0 ;文件描述符为0(标准输入)mov ecx, buf ;缓冲区地址mov edx, 1 ;要读取的字节数int 0x80 ;调用系统调用sub al, '0' ;将ASCII码转换成数字值check_prime:xor ebx, ebx ;ebx清零,作为除数使用mov ecx, eax ;将eax的值赋给ecx,作为被除数使用inc ebx ;将ebx自增1,相当于除数加1cmp ebx, ecx ;比较除数是否大于被除数jge is_prime ;如果除数大于等于被除数,跳转到is_prime xor edx, edx ;edx清零,作为余数使用div ebx ;将ecx/ebx的商放在eax中,余数放在edx中 cmp edx, 0 ;判断余数是否为0je not_prime ;如果余数为0,跳转到not_primejmp check_prime ;跳转到check_primenot_prime:mov eax, 4 ;write系统调用号为4mov ebx, 1 ;文件描述符为1(标准输出)mov ecx, not_prime_msg ;要输出的字符串地址mov edx, not_prime_len ;要输出的字符数int 0x80 ;调用系统调用exit:mov eax, 1 ;exit系统调用号为1xor ebx, ebx ;退出状态码为0int 0x80 ;调用系统调用退出程序not_prime_msg db 'The number is not prime.',0xa ;提示信息not_prime_len equ $-not_prime_msgis_prime:mov eax, 4 ;write系统调用号为4mov ebx, 1 ;文件描述符为1(标准输出)mov ecx, is_prime_msg ;要输出的字符串地址mov edx, is_prime_len ;要输出的字符数int 0x80 ;调用系统调用jmp exit ;跳转到exitis_prime_msg db 'The number is prime.',0xa ;提示信息is_prime_len equ $-is_prime_msg```四、数组1. 计算数组的和下面是一个计算数组的和的示例程序:```section .dataarr dd 1, 2, 3, 4, 5 ;定义一个双精度浮点型数组arrn equ ($-arr)/4 ;获取数组长度section .textglobal _start_start:xor eax, eax ;eax清零,作为计数器和累加器使用xor ecx, ecx ;ecx清零,作为数组下标使用loop_start:cmp ecx, n ;比较ecx是否大于等于njge loop_end ;如果ecx大于等于n,跳转到loop_endadd eax, dword [arr+ecx*4] ;将arr[ecx]加到eax中inc ecx ;将ecx自增1,相当于下标加1jmp loop_start ;跳转到loop_startloop_end:mov ebx, eax ;将sum赋值给ebx,作为返回值mov eax, 1 ;exit系统调用号为1xor ecx, ecx ;退出状态码为0int 0x80 ;调用系统调用退出程序```2. 查找数组中的最大值下面是一个查找数组中的最大值的示例程序:```section .dataarr dd 10,20,30,-40,-50,-60,-70,-80,-90,-100 ;定义一个双精度浮点型数组arrn equ ($-arr)/4 ;获取数组长度section .textglobal _start_start:mov eax, dword [arr] ;将arr[0]赋值给eax,作为最大值使用xor ecx, ecx ;ecx清零,作为数组下标使用loop_start:cmp ecx, n ;比较ecx是否大于等于njge loop_end ;如果ecx大于等于n,跳转到loop_endcmp eax, dword [arr+ecx*4] ;比较eax和arr[ecx]jge loop_next ;如果eax大于等于arr[ecx],跳转到loop_next mov eax, dword [arr+ecx*4] ;将arr[ecx]赋值给eax,更新最大值loop_next:inc ecx ;将ecx自增1,相当于下标加1jmp loop_start ;跳转到loop_startloop_end:mov ebx, eax ;将max赋值给ebx,作为返回值mov eax, 1 ;exit系统调用号为1xor ecx, ecx ;退出状态码为0int 0x80 ;调用系统调用退出程序```五、总结本文介绍了几个汇编语言编程实例,涉及到基本的输入输出、循环、条件判断、数组等知识点。
第4章8086,8088微机汇编语言程序设计

2)段内偏移量(Offset) 它是标号与段起始地址之间相距的字节数,为一16位 无符号数。 3)类型(Type) 类型表示该标号所代表的指令的转移范围,分NEA R(近)与FAR(远)两种。NEAR类型的标号仅在 同一段内使用,用2字节指针给出转移的偏移量属性(即 只改变IP值,不改变CS值);而FAR类型的标号无此限 制,必须用4字节指针指出转移的段地址与段内偏移量。 当标号用作JMP或CALL等指令的目标操作数时,若 为段内转移或调用则采用NEAR类型;若为段间转移或 调用则应当采用FAR类型。 JMP FAR PTR LINE
第4章 8086/8088汇编语言程序设计
汇编语言程序设计是开发微机系统软件的基本 功,在程序设计中占有十分重要的地位。
由于汇编语言具有执行速度快和易于实现对硬件的控 制等独特的优点,所以至今它仍然是用户使用得较多的程 序设计语言。特别是在对于程序的空间和时间要求很高的 场合,以及需要直接控制设备的应用场合,汇编语言更是必 不可少了。 由于汇编语言本身的特点,本章将选择目前国内广泛 使用的IBM PC机作为基础机型,着重讨论8086/8088汇编 语言的基本语法规则和程序设计的基本方法,以掌握一般 汇编语言程序设计的初步技术。
(1)立即操作数 立即操作数在指令中直接给出,不需要使用 寄存器,也不涉及访问数据区的操作,只能作为 源操作数。立即操作数是整数,可以是1字节或 2字节。在汇编语言中,立即操作数用常量(包 括数值常量和符号常量)以及由常量与有关运算 符组成的数值表达式表示。 如:MOV BX,1000+5*3 (2)寄存器操作数 通用寄存器AX、BX、CX、DX、BP、 SP、DI、SI以及段寄存器CS、SS、D S、ES都可以作为操作数。如:MOV BX,AX
汇编语言程序设计实例

汇编语言程序设计实例汇编语言是一种非常底层的编程语言,它允许程序员直接与计算机硬件进行交互。
汇编语言程序设计通常用于需要高性能或者对硬件有特定需求的场合。
以下是一些汇编语言程序设计的实例,以帮助理解其基本结构和应用。
实例一:数据传输在汇编语言中,数据传输是最基本的操作之一。
以下是一个简单的数据传输程序实例,它将一个立即数(即直接给出的数值)移动到寄存器中:```assemblymov ax, 1234h ; 将十六进制数1234h移动到ax寄存器```实例二:算术运算汇编语言支持基本的算术运算,如加法、减法、乘法和除法。
以下是一个进行加法运算的例子:```assemblymov ax, 5 ; 将数值5移动到ax寄存器add ax, 3 ; 将数值3加到ax寄存器中```实例三:条件跳转条件跳转是控制程序流程的重要手段。
以下是一个基于条件跳转的简单程序,它检查ax寄存器的值是否为0,并根据结果跳转到不同的代码段:```assemblymov ax, 0 ; 将数值0移动到ax寄存器jz zero ; 如果ax为0,则跳转到标签zero; 继续执行其他代码...zero:; 如果ax为0,执行这里的代码```实例四:循环结构循环结构在汇编语言中实现起来较为复杂,但可以通过重复使用跳转指令来模拟。
以下是一个简单的循环结构实例,它将ax寄存器的值减1,直到值为0:```assemblystart_loop:dec ax ; 将ax寄存器的值减1jnz start_loop ; 如果ax不为0,跳回start_loop```实例五:字符串处理汇编语言程序设计中,字符串处理是一个常见的任务。
以下是一个将字符串从源地址复制到目标地址的程序:```assemblymov si, source ; 将源字符串的地址移动到si寄存器mov di, dest ; 将目标地址移动到di寄存器mov cx, length ; 将字符串的长度移动到cx寄存器copy_loop:movsb ; 从si复制一个字节到diloop copy_loop ; 减少cx的值并重复循环直到cx为0```实例六:子程序调用在汇编语言中,子程序是一种将代码封装成模块化单元的方法。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
标号
标号是用户定义的符号地址。 一条指令的标号是该条指令的符号名字,标号的值是汇编这 条指令时指令的地址。 标号由以英文字母开始的1~8个字母或数字组成,以冒号 “:”结尾。 标号可以由赋值伪指令赋值,如果没有赋值,汇编程序把存 放该指令目标码第一字节的存储单元的地址赋给该标号,所 以,标号又叫指令标号。
ORG 汇编起始命令
格式:ORG 16位地址 功能:规定该伪指令后面程序的汇编地址,即汇编后生成目 标程序存放的起始地址。例如: ORG 2000H START:MOV A,#64H ┇ 规定了START的地址是2000H,又规定了汇编后的第一条指 令码从2000H开始存放。
END 汇编结束指令
二、机器汇编
三、反汇编
一、手工汇编
通过手工方式查指令编码表,逐个把助记符指令 “翻译”成机器码,然后把得到的机器码程序键入 单片机,进行调试和运行。 手工汇编的缺点: 1、偏移量的计算容易出错 2、程序的修改会引起后面指令地址的变化,转移 指令的偏移量也要重新计算。
二、机器汇编
机器汇编是在计算机上使用交叉汇编程序进行源程 序的汇编。汇编工作由机器自动完成,最后得到以 机器码表示的目标程序。
3、对于通用的子程序,考虑到其通用性,除了用于存放子程 序入口参数的寄存器外,子程序中用到的其他寄存器的内容 应压入堆栈(返回前再弹出),即保护现场。 4、在中断处理程序中,除了要保护处理程序中用到的寄存器 外,还要保护标志寄存器。 5、用累加器传递入口参数或返回参数比较方便,在子程序中, 一般不必把累加器内容压入堆栈。
便于分工,从而可使多个程序员同时进行程序的编写和调试 工作,加快软件研制进度。
程序可读性好,便于功能扩充和版本升级。
对程序的修改可局部进行,其它部分可以保持不变。
对于使用频繁的子程序可以建立子程序库,便于多个模块调 用。
2、划分模块的原则
每个模块应具有独立的功能,能产生一个明确的结果,即单
模块的功能高内聚性。
模块之间的控制耦合应尽量简单,数据耦合应尽量少,即模 块间的低耦合性。控制耦合是指模块进入和退出的条件及方 式,数据耦合是指模块间的信息交换方式、交换量的多少及 交换频繁程度。 模块长度适中。20条~100条的范围较合适。
二、编程技巧
1、尽量采用循环结构和子程序。
2、尽量少用无条件转移指令。
§4.1 编程的步骤、方法和技巧
§4.1.1 §4.1.2 编程的步骤 编程的方法和技巧
§4.1.1 编程的步骤
一、分析问题 二、确定算法 三、画程序流程图 四、编写程序
Байду номын сангаас
一、分析问题
对需要解决的问题进行分析,以求对问题由正确的 理解。如, 解决问题的任务是什么? 工作过程? 现有的条件,已知数据,对运算的精度和速度方面 的要求? 设计的硬件结构是否方便编程?
§4.2 汇编语言源程序的编辑和汇编
§4.2.1 源程序编辑
§4.2.2 源程序的汇编
§4.2.3 伪指令
§4.2.1 源程序编辑
在微型计算机上,借助编辑软件,编写或修 改汇编语言源程序。如行编辑或屏幕编辑软
件。
§4.2.2 源程序的汇编
汇编:将汇编语言源程序转换为机器码表示的目标 程序的过程。对单片机有: 一、手工汇编
格式:END
功能:通知汇编程序结束汇编。在END之后所有的 汇编指令均不予以处理。
二、确定算法
算法是如何将实际问题转化成程序模块来处理。 在编程以前,先要对几种不同的算法进行分析、比 较,找出最适宜的算法
三、画程序流程图
程序流程图是使用各种图形、符号、有向线段等来说明程序 设计过程的一种直观的表示。
流程图步骤分得越细致,编写程序是也越方便。 画流程图是程序结构设计是采用的一种重要手段。 一个系统软件有总的流程图(主程序框图)和局部的流程图。 流程图常采用的图形和符号。
注释
注释部分不是汇编语言的功能部分,只是用语增加 程序的可读性。 良好的注释是汇编语言程序编写中的重要组成部分。
§4.1.2 编程的方法和技巧
一、模块化的程序设计方法 二、编程技巧
一、模块化的程序设计方法
1、程序功能模块化的优点 2、划分模块的原则
1、程序功能模块化的优点
单个模块结构的程序功能单一,易于编写、调试和修改。
椭圆框
或桶形框
:表示程序的开始或结束。
矩形框
菱形框
:表示要进行的工作。
:表示要判断的事情,菱形框内 的表达式表示要判断的内容。
圆圈 指向线
:表示连接点 :表示程序的流向
四、编写程序
用89C51汇编语言编写的源程序行(一条语句)包 括四个部分,也叫四个字段:
〔标号:〕〔操作码〕〔操作数〕;〔注释〕 每个字段之间要用分隔符分隔,而每个字段内部不能使用分 隔符。可以用作分隔符的符号:空格“ ”、冒号“:”、、 逗号“,”、分号“;”等。 例:LOOP:MOV A,#00H;立即数00H→A
操作码
操作码是必不可少的。 它用一组字母符号表示指令的操作码。在89C51中, 由89C51的指令助记符组成。
操作数
汇编语言指令可能要求或不要求操作数,所以这一字段可能有也可能没 有。 若有两个操作数,操作数之间用逗号“,”分开。 操作数包括的内容有: (1)工作寄存器:由PSW.3和PSW.4规定的当前工作寄存器区中的 R0~R7。 (2)特殊功能寄存器:21个SFR的名字。 (3)标号名:赋值标号—由汇编指令EQU等赋值的标号;指令标号— 指令标号指示的指令的第一字节地址是该标号的值。 (4)常数:可用二进制(B)、十进制、十六进制(H),若常数以字 符开头,前面加0。 (5)$:用来表示程序计数器的当前值。 (6)表达式:汇编时,计算出表达式的值填入目标码。
三、反汇编
将二进制机器语言程序翻译成汇编语言程序的过程 称反汇编。
汇编和反汇编的过程如图4-3所示。
汇编(汇编程序)
源程序 (汇编语言)
反汇编(汇编程序)
目标码 (机器语言)
图4-3 汇编和反汇编过程
§4.2.3 伪指令
伪指令不是真正的指令,无对应的机器码,在汇编 时不产生目标程序,只是用来对汇编过程进行某种 控制。