汇编语言程序设计方法

合集下载

汇编语言程序设计方法

汇编语言程序设计方法

C 名字前加 下划线
从右到左 调用程序

SYSCALL
从右到左 被调用程序

STDCALL 名字前加
下划线 (注)
被调用程序

PASCAL 名字变大写
BASIC 名字大写
FORTRAN 名字大写
从左到右 被调用程序

从左到右 被调用程序

从左到右 被调用程序

12
PROTO是过程声明伪指令,用于事先声明过程的结构。它的格 式如下:
结束处理部分
AGAIN: ADD AX,CX
;从20,19,……2,1倒序累加到AX
LOOP AGAIN ;每循环一遍,CX自动减1
MOV SUM,AX ;将累加和送入SUM单元
.EXIT 0
END
初始化部分
循环结束? 是 否
工作部分 修改部分 结束处理部分
7
二、用MASM 6.x循环控制伪指令实现循环结构
.CODE
.STARTUP
MOV AL, B
IMUL AL
MOV BX,AX MOV AL,A
;BX中为B的平方
IMUL C
MOV CX,4
IMUL CX
;AX中为4AC
.IF SWORD PTR BX>=AX ;比较B的平方和4AC的大小
MOV SIGN,1
;条件成立,SIGN得到1
.ELSE
MOV SIGN,0
.IF 条件表达式 ;条件为真(非0),执行分支体
分支体
[.ELSEIF 条件表达式
分支体
;前面IF条件为假,并且当前ELSEIF条件为真执行分支体
[.ELSE
;前面IF条件为假执行分支体

汇编语言程序设计的基本方法

汇编语言程序设计的基本方法

01
例2 编写程序,计算(W-(X*Y+Z-100))/W,其中W、X、Y、Z均为16位带符号数,计算结果的商存入AX,余数存入DX。
02
例3 把非压缩十进制数DAT1转换为压缩十进制数
例2编写程序,计算(W-(X*Y+Z-100))/W,其中W、X、Y、Z均为16位带符号数,计算结果的商存入AX,余数存入DX。
通常,编制一个汇编语言源程序应按如下步骤进行:
1
明确任务,确定算法。
2
绘制流程图(包括确定内存单元和分配寄存器)。
3
根据流程图编写汇编语言程序。
4
上机调试程序。
5
程序的基本结构有四种:顺序结构、分支结构、循环结构和子程序结构。
6
5.6 汇编语言程序设计的基本方法
5.6.1 顺序程序设计
顺序结构也称线性结构,其特点是其中的语句或结构被连续执行。 顺序程序是最简单的,也是最基本的一种程序结构。这种结构的程序从开始到结尾一直是顺序执行的,中途没有任何分支。从这种结构的流程图来看,除了有一个起始框,一个终止框外,就是若干执行框,没有判断框。指令指针IP值线形增加,IP=IP+1
条件
N

例4用比较指令和条件转移指令实现两路分支的程序段。
两路分支程序设计
例4用比较指令和条件转移指令实现两路分支的程序段。 … MOV AX,M ;假定M和N为有符号数 MOV BX,N CMP AX,BX ;比较 M和N的大小,影响标志位,准备条件 JG NEXT ;M>N时转移,注意若M、N为无符号数时用JA指令 …… ;分支程序2 JMP DONE NEXT: …… ;分支程序1 …… DONE:RET
X+20 (X≥0)

第四章 汇编语言程序设计

第四章 汇编语言程序设计

一、算术运算符
包括:+,-,*,/(取商),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 伪指令语句
在汇编时进行处理,主要完成变量定义,段定义,
段分配,指示程序开始和结束等功能。

第5章 汇编语言程序

第5章 汇编语言程序

Y
条件满足?
N
处理段
例5-5 设内部RAM30H,31H单元存放两个无符号数, 将大数存在31H,小数存于30H。 ORG 1000H START:CLR C MOV A,30H SUBB A,31H JC NEXT ;次序符合,返回 MOV A,30H ;交换 XCH A,31H MOV 30H,A NEXT: NOP SJMP $ END
$
5-3 分支程序
由条件转移指令构成程序判断框,形成程序分支结构。 5-3-1 单重分支程序 一个判断决策框,程序有两条出路。 两种分支结构: 例1 求R2中补码绝对值,正数不变, 影响条件 负数变补。
MOV A,R2 JNB ACC.7,NEXT;为正数? CPL A ;负数变补 INC A MOV R2,A NEXT:SJMP NEXT ;结束
五、对源程序进行交叉汇编得到机器代码; 反汇编 —— 分析现成产品的程序,要将二进制 的机器代码语言程序翻译成汇编语言源程序。
六、程序调试。
通过微计算机的串行口(或并行口)把机器代 码传送到用户样机(或在线仿真器)进行程序 的调试和运行。
5.1.3评价程序质量的标准
(1)程序的执行时间。 (2)程序所占用的内存字节数。 (3)程序的逻辑性、可读性。 (4)程序的兼容性、可扩展性。 (5)程序的可靠性。
方法二:采用除10H取余数将BCD拆开 ORG 1000H MOV A,20H; 2B 1T MOV B,#10H ; 3B 2T DIV AB ; 1B 4T ORL B,#30H ; 3B 2T MOV 22H,B ; 3B 2T ORL A,#30H; 2B 1T MOV 21H,A ; 2B 1T SJMP $ END;7条指令、16个内存字节、13个机器周期。

汇编语言程序设计基本方法

汇编语言程序设计基本方法

相应传送指令:
MOV AX,DATA1
MOV DATA3,BX
01
MOV AL,DATA2[DI]
02
MOV DATA3[SI],DX
03
MOV CX,LENGTH DATA3
04
MOV BX,SIZE DATA3
05
MOV SI,OFFSET DATA2
06
指令中传送的是一个字还是一个字节,通常由操作数的类型确定。
下列指令中,没有确定的类型,是错误的。
MOV DATA3[SI],02H
03
MOV 2[SI],AL
04
MOV 4[DI],02
05
可以采用如下方式纠正:
06
MOV BYTE PTR 4[DI],02
01
02
如果两个操作数的类型不一致,也是错误的:
DATA1 DW 05H
DATA2 DB 0FH,10H,0AH
01
01
02
03
04
05
MOV AX, ES:[SI]
对BP寄存器
MOV AL, DATA2[BP];对应DS段
MOV AL, 10[BP]; 对应SS段
02
03
04
05
3.2.1 数据传送类指令
取有效地址指令(LEA) 将源操作数SRC的有效地址(偏移地址)送入寄存器REG中 比较: MOV AX,10H[DI] LEA AX,10H[DI] (DI)=0500H,(DS)=0200H
4.2 8086/8088指令系统
单/击/此/处/添/加/副/标/题/内/容
指令类型:
送指令
算指令
算指令

理指令和CPU控制指令

第四章-汇编语言程序的设计

第四章-汇编语言程序的设计

第四章汇编语言程序设计本章的汇编语言程序设计的主要容有:汇编语言程序设计概述、汇编语言程序的结构形式、汇编语言的伪指令。

(一个单片机应用系统和其它计算机系统一样,在完成一项具体工作的时候,它要按照一定的次序,去执行操作,这些操作实际上就是由设计人员,以单片机能够接受的指令编制的程序,那么无论计算机也好,单片机也好,实际上编制程序的过程,就是用计算机来反映设计者的编程思想,那么这一章中,我们将向大家介绍怎样使用单片机指令系统来编制一些应用程序。

在介绍之前,我们还是来学习汇编语言的一些基础知识)4.1 汇编语言程序设计概述1、计算机的汇编语言以助记符表示的指令,每一条指令就是汇编语言的一条语句。

(汇编语言程序设计实际上就是使用汇编指令来编写计算机程序。

汇编语言的语句有严格的格式要求)2、汇编语言的语句格式MCS-51汇编语言的语句格式表示如下:[<标号>]: <操作码> [<操作数>]; [<注释>]标号:指令的符号地址,有了标号,程序中的其它语句才能访问该语句。

①标号是由1~8个ASCII字符组成,但头一个字符必须是字母,其余字符可以是字母、数字或其它特定字符。

②不能使用汇编语言已经定义了的符号作为标号,如指令助记符、伪指令记忆符以及寄存器的符号名称等。

(同一个标号在程序中只能定义一次,不能重复定义;一条语句可以有标号,也可以没有标号,所以是否有标号,取决于程序中是否需要访问该语句。

)操作码:规定语句执行的操作容,操作码是以指令助记符表示的,是汇编指令格式中唯一不能空缺的部分。

操作数:给指令的操作提供数据或地址。

注释:是对语句或程序段的解释说明。

(在单片机中,这四个部分怎么加以区分呢?使用分界符)分界符(分隔符):用于把语句格式中的各部分隔开,以便于编译程序区分不同的指令段。

冒号(:)用于标号之后空格()用于操作码和操作数之间逗号(,)用于操作数之间,分割两个以上的操作数分号(;)用于注释之前。

用汇编语言编写的程序

用汇编语言编写的程序

用汇编语言编写的程序汇编语言是一种低级的编程语言,直接操作计算机硬件。

通过使用汇编语言,程序员可以更加精确地控制计算机的功能和执行过程。

下面将介绍一个用汇编语言编写的程序的例子,以帮助读者更好地理解汇编语言的特点和用途。

一、程序概述这个用汇编语言编写的程序的功能是计算从1到100的所有整数的和。

通过使用汇编语言的特性,我们可以实现高效的计算过程,以最小的资源消耗完成任务。

二、程序设计程序的设计思路是使用循环结构,从1开始累加到100,并将结果保存在寄存器中。

具体的程序设计如下:1. 初始化寄存器:将累加结果的寄存器置零,准备开始累加过程;2. 设定循环起始值:将循环计数器设为1,作为累加的起始值;3. 累加过程:将当前的累加结果与循环计数器相加,将结果保存在累加结果的寄存器中;4. 判断循环结束条件:如果循环计数器小于等于100,则继续循环,否则跳转到结束;5. 循环迭代:将循环计数器加1,准备下一次循环;6. 结束:输出最终的累加结果。

三、程序实现下面是具体的汇编代码实现:```assemblysection .datasum db 0 ; 累加结果count db 1 ; 循环计数器section .textglobal _start_start:mov al, 0 ; 初始化累加结果寄存器 mov bl, 1 ; 初始化循环计数器add al, bl ; 累加过程inc bl ; 循环迭代cmp bl, 101 ; 判断循环结束条件 jle _start ; 继续循环; 输出最终累加结果mov ah, 0x0emov al, 'T'int 0x10mov ah, 0x0e mov al, 'h' int 0x10mov ah, 0x0e mov al, 'e'int 0x10mov ah, 0x0e mov al, ' 'int 0x10mov ah, 0x0e mov al, 's'int 0x10mov ah, 0x0e mov al, 'u'int 0x10mov ah, 0x0e mov al, 'm' int 0x10mov ah, 0x0e mov al, ' 'int 0x10mov ah, 0x0e mov al, 'i'int 0x10mov ah, 0x0e mov al, 's'int 0x10mov ah, 0x0e mov al, ':'int 0x10mov ah, 0x0e mov al, ' 'int 0x10mov ah, 0x0e mov al, '5'int 0x10mov ah, 0x0emov al, '0'int 0x10mov ah, 0x0e mov al, '5'int 0x10mov ah, 0x0e mov al, '0'int 0x10mov ah, 0x0e mov al, '0'int 0x10mov ah, 0x0e mov al, '0'int 0x10mov ah, 0x0e mov al, 0x0d int 0x10mov ah, 0x0e mov al, 0x0aint 0x10; 程序结束mov eax, 1xor ebx, ebxint 0x80```四、程序运行结果以上的程序经过编译、链接后可以在计算机上运行。

第4章 MCS-51单片机汇编语言程序设计

第4章 MCS-51单片机汇编语言程序设计
开始
程序清单:
送转移地址序号
A,R3 ;取序号 A ;序号乘2 DPTR, #JTAB ;32个子程序 首地址送DPTR JMP @A+DPTR ;根据序号转移 JTAB: AJMP ROUT00 ;32个子程序首地址 AJMP ROUT01 … MP: MOV RL MOV AJMP ROUT31
第 四 章 MCS-51 单 片 机 汇 编 语 言 程 序 设 计
【例4-1】
双字节二进制数求补。
程序说明:对R3(高8位)、R2(低8位)中的二进制定 点数取反加1即可得到其补码。
开始
程序清单:
BINPL:MOV A,R2 CPL A ADD A,#01H MOV R2,A MOV A,R3 CPL A ADDC A,#00H MOV R3,A RET ;低位字节取反 ;加1 ;低位字节补码送R2 ;高位字节取反 ;加进位 ;高位字节补码送R3
散转生成正确偏移号
置换指令地址表首址
转入R3指示的程序
AJMP
……
AJMP
第 四 章 MCS-51 单 片 机 汇 编 语 言 程 序 设 计
3.循环程序
包括:循环初始化、循环处理、循环控制
开始 置初值 循环体 循环结束? Y 循环修改 N 循环体 循环结束? N Y 结束 循环修改 结束 开始 置初值
;调用查表子程序 ; 暂存R1中 ;调查表子程序 ;平方和存A中 ;等待
取第一个数→A 调查表子程序 结果存入R1 取下一个数→A 调查表子程序 两数平方相加 存结果
子程序清单:
SQR: INC A ;加RET占的一个字节 MOVC A,@A+PC ;查平方表 RET TAB: DB 0,1,4,9,16 DB 25,36,49,64,81 END
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2014-1-21
13
[例3.4.5] 假定在外部RAM中有ST1、ST2和ST3共3个连续单元,其中
ST1和ST2单元中分别存放着一个8位无符号二进制数,要求 找出其中的大数并存入ST3 单元中。
START:CLR MOV MOVX MOV INC MOVX SUBB JNC XCH BIG0: INC MOVX RET BIG1: MOVX SJMP C DPTR,#ST1 A,@DPTR R2,A DPTR A,@DPTR A,R2 BIG1 A,R2 DPTR @DPTR,A A,@DPTR BIG0 ;进位位清“0” ;设置数据指针,指向ST1 ;取第一个数 ;第一个数存R2 ;数据指针加1,指向ST2 ;取第二个数 ;两数比较(第二个数-第一个数) ;第二个数大转BIG1(C=0无借位跳) ;第一个数大整字节交换继续 ;指向ST3单元 ;存大数
50H 51H 52H
高字节
53H 54H 55H
R1→ 55H
低字节 中字节 高字节 低字节 中字节
低字节

高字节
低字节
00H CY
50H 51H 52H
54H 53H R0→52H 51H 50H 20H
加数
被加数 和
高字节
...
00H
CY
8
2014-1-21
程序:
MOV MOV MOV MOV
;被加数的低字节地址 ;加数的低字节地址
;低字节相加 ;存低字节相加结果
;中间字节带进位相加 ;存中间字节相加结果
;高字节带进位相加 ;存高字节相加结果
;存放进位的单元地址 ;进位送00H位保存
9
2014-1-21
例3.4.2
将R2中BCD码数转为二进制数存进R2。
ORG 2000H BCD2B:MOV A, R2 ;取入口数据 ANL A, #0F0H ;取出十位 SWAP A ; 高4位 低4位 MOV B, #0AH MUL AB ;十位乘10 MOV R3,A ;积暂存进R3 MOV A, R2 ;再取入口数据 ANL A, #0FH ;取出个位 ADD A, R3 MOV R2,A ;结果 R2 RET ;若不是子程序可用END
2014-1-21 4
3.4.2
汇编语言程序设计步骤
一、确定方案和计算方法; 二、了解应用系统的硬件配置、性能指标; 三、建立系统数学模型,确定控制算法和操作步骤; 四、画程序流程图; 开 始 表示程序结构和程序功能。
五、编制源程序。 1.合理分配存储器单元和了解 I/O接口地址。 2.按功能设计程序,明确各程序 之间的相互关系。 3.用注释行说明程序,便于阅读、 修改和调试。 六、程序的调试
=:去FH 思路: Ta=T55? ≠: Ta>T55:去JW Ta<T55:Ta=T54? =:去FH ≠: Ta<T54:去SW Ta>T54:去FH 算法: (1) Ta>T55:去JW (2) Ta<T54:去SW (3) T55≥Ta≥T54:去FH
2014-1-21
19
程序:
CJNE AJMP LOOP1:JNC CJNE AJMP LOOP2:JC FH: RET A,55H,LOOP1 ;Ta ≠T55:转向LOOP1 FH JW
2014-1-21 22
解:程序如下
SGNL:ANL P1,#11100011B;红绿黄灯灭 ORL P1,#00000011B;置P1.0、P1.1输入态, P1.5~P1.7状态不变 SL0: JNB P1.0,SL1 ;P1.0=0,S0未按下,转判S1 JNB P1.1,RED ;P1.0=1,S0按下;且P1.1=0,S1未按下,转红灯亮 YELW:SETB P1.4 ;黄灯亮 CLR P1.2 ;红灯灭 CLR P1.3 ;绿灯灭 SJMP SL0 ;转循环 SL1: JNB P1.1,YELW ;P1.0=0,S0未按下;P1.1=0,S1未按下,转黄灯亮 GREN:SETB P1.3 ;绿灯亮 CLR P1.2 ;红灯灭 CLR P1.4 ;黄灯灭 SJMP SL0 ;转循环 RED: SETB P1.2 ;红灯亮 CLR P1.3 ;绿灯灭 CLR P1.4 ;黄灯灭 SJMP SL0 ;转循环
2014-1-21
20
[例3.4.10]已知电路如图4-5所示,要求实现: ① S0单独按下, 红灯亮,其余灯 灭; ② S1单独按下, 绿灯亮,其余灯 灭; ③ 其余情况, 黄灯亮。
2014-1-21 21
解:程序如下
SGNL:ANL P1,#11100011B; ORL P1,#00000011B; SL0: JNB P1.0,SL1 ; JNB P1.1,RED ; YELW:SETB P1.4 ; CLR P1.2 ; CLR P1.3 ; SJMP SL0 ; SL1: JNB P1.1,YELW ; GREN:SETB P1.3 ; CLR P1.2 ; CLR P1.4 ; SJMP SL0 ; RED: SETB P1.2 ; CLR P1.3 ;绿灯灭 CLR P1.4 ;黄灯灭 SJMP SL0 ;转循环
R0,#20H @R0,A C,ACC.0 00H,C
MOV MOV MOV ADD MOV DEC DEC MOV ADDC MOV DEC DEC MOV ADDC MOV CLR ADDC MOV
R0,#52H R1,#55H A,@R0 A,@R1 @R0,A R0 R1 A,@R0 A,@R1 @R0,A R0 R1 A,@R0 A,@R1 @R0,A A A,#00H 00H,C
2014-1-21
3
汇编的主要任务:
1)确定程序中每条汇编语言指令的指令机器码。 2)确定每条指令在存储器中的存放地址。 3)提供错误信息。 4)提供目标执行文件(*.OBJ/*.HEX)和 列表文件(*.LST)。
一、汇编语言指令类型:
1. 机器指令: 指令系统中的全部指令,每条指令有对应的机器代码。 2. 伪指令: 汇编控制指令,仅提供汇编信息,没有指令代码。
3.4
汇编语言程序设计方法
3.4.1 汇编程序约定 3.4.2 汇编程序设计步骤 3.4.3 顺序程序 3.4.4 分支程序 3.4.5 循环程序 3.4.6 算术运算程序
2014-1-21
1
3.4.1
汇编程序约定
汇编语言程序: 用汇编语言编写的、完成特定功能的指令序列。 汇编程序: 能将汇编语言源程序转换成机器语言目标程序的 系统软件。
2014-1-21 10
[例3.4.3] MOV MOV MOV ANL INC MOV MOV SWAP ANL INC MOV
压缩式BCD码分解成为单字节BCD码。 ;设指针 ;取一个字节 ;暂存 ;高半字节清0
R0,#40H A,@R0 R 2,A A,#0FH R0 @R0,A A ,R 2 A A,#0FH R0 @R0,A
片内 RAM 42H 0 十 41H 0 个 40H 十 个
;保存数据个位
;十位换到低半字节
;保存数据十位
3.4.4 分支程序
根据不同条件转向不同的处理程序,这种结构的程序称为 分支程序。 80C51指令系统中的条件转移指令、比较转移指令和位转 移指令,可以实现分支程序。 由条件转移指令构成程序判断框部分,形成程序分支结构。
温控系统结构框图
电热箱 电热丝
温度传感器
放 大

A/D

单 片
设定值
调节电压
控温
双向可控硅
光隔驱动
控制信号

打印输出
~ 电源
电热箱单片机温控系统结构框图
电热箱采用电热丝加热,由双向可控硅控制加热量的大小; 温度传感器检测电热箱内的温度,经放大与A/D转换后进入单片机; 单片机将设定的温度值与检测到的电热箱中的实际温度进行比较, 并调节运算后,发出控制信号经光电隔离器去驱动双向可控硅以调节 加在电热丝的电压,从而控制电热箱的温度。
影响条件 条件满足? N 处 理 段 Y
影响条件 条件满足? N 处 理 1 Y 处 理 2
2014-1-21
12
3.4.4.1
单重分支程序
一个判断决策框,程序有两条出路。两种分支结构: [例3.4.4] 求R2中补码绝对值: 正数不变,负数变补。 MOV A,R2 JNB ACC.7,NEXT ;为正数?为0跳 CPL A ;负数变补 INC A MOV R2,A NEXT:SJMP NEXT ;结束
内部RAM
...
41H 价格(结果) 40H 重量(变量)
...
;是,转至WETC(C=1即G<5跳) ;否则M=3G+2(G-5)
G=5? =:跳WETC ≠:G<5:跳WETC G>5:顺序执行
;存结果M
3.4.4.2多重分支程序来自开 始 取 X Y Y=0 X=0 ? N Y Y=-1 X<0? N Y=+1
一、多次使用条件转移指令,形成两个以上判断框。 [例3.4.8] :求符号函数Y=SGN(X) +1 (当 X>0) SGN(X)= 0 (当 X=0) -1 (当 X<0)
SYMB: MOV A,40H ;取X 保存Y JZ STOR ;X=0跳,Y=X JB ACC.7,MINUS ;X<0(A.7=1跳) 结 束 MOV A,# 01H ;X>0,Y=+1 内部RAM SJMP STOR ... MINUS:MOV A,#0FFH ;X<0,Y= -1 41H Y(函数) STOR: MOV 41H,A ;保存Y 40H X(变量) ... RET
2014-1-21
15
[例3.4.7]
FRT: MOV MOV MOV MUL MOV MOV CJNE SJMP L1: JC SUBB RLC ADD SJMP WETC: MOV L2: MOV RET
相关文档
最新文档