第五章 汇编语言程序设计
第5章 汇编语言程序设计20PPT课件

第5章 汇编语言程序设计
5.1 汇编语言的基本概念
汇编语言是一种采用助记符表示的程序设计语言, 即用助记符来表示指令的操作码和操作数,用标 号或符号代表地址、常量或变量。
汇编语言编写的程序能够直接利用硬件系统的特 性直接对位、字节、字寄存器或存储单元、I/O端 口进行处理,同时也能直接使用CPU指令系统提供 的各种寻址方式。
(小于)、GT(大于)、LE(小于等于)、GE (大于等于) (4)分析运算符:SEG、OFFSET、TYPE、SIZE和 LENGTH (5)合成运算符:PTR、THIS、SHORT
5.3 伪指令语句
5.3.1 数据定义伪指令 5.3.2 符号定义伪指令 5.3.3 段定义伪指令 5.3.4 模块定义与连接伪指令 5.3.5 处理器选择伪指令
汇编程序时最早也是最成熟的一种系统软件。 汇编程序的功能如下:
用汇编语言编 写的源程序
汇编程序
目标程序
5.2汇编语言源程序的格式
5.2.1 分段结构 5.2.2 汇编语言语句的类型和格式
5.2.1 分段结构
汇编语言源程序的结构是分段结构形式,一个汇 编语言源程序由若干段(SEGMENT)组成,每个段 以SEGMENT语句开始,以ENDS语句结束。整个源 程序的结尾是END语句。
5.3.1 数据定义伪指令
数据定义伪指令的用途是定义一个变量的类型, 给操作数赋值,或者仅给变量分配存储单元而不 赋予特定的值
数据定义伪指令的一般格式为:
[变量名] 作数……]
伪指令定义符
操作数[,操
数据定义伪指令定义符后面的操作数可以是 常数、表达式或字符串,但每项操作数的值不能 超过由伪指令定义符所定义的数据类型限定的范 围。
微机原理与汇编语言第5章汇编语言程序设计

(3) 装填段寄存器(只装填数据型段寄存器)
(4) 设置返回DOS的方法
例如:
MYDARA SEGMENT ……
MYDATA ENDS MYCODE SEGMENT
ASSUME CS:MYCODE,DS:MYDATA START:
无法正常连接
有算法错误
LINK .EXE文件
(1) 编辑程序
DOS 环境下用 EDIT 编辑器
WINDOWS 环境下用 记事本
(2)汇编源程序
宏汇编程序 MASM.EXE 或小汇编程序 汇编程序主要有以下功能:
① 检查源程序中语法错误,给出错误提示信息 ② 产生目标文件(.OBJ)、列表文件(.LST)及 交叉引用文件(.CRF) ③ 展开宏指令
end start
汇编后的目 标文件只有 208字节
汇编语言源程序的格式
例二 编程实现多字节加法,如 S=3B74AC60F8H+20D59E36C1H
DATA1
F8H 60H ACH 74H 3BH
……
被加数、和
DATA2
C1H 36H 9EH D5H 20H
加数
DATA SEGMENT
DATA1 DB 0F8H, 60H, 0ACH, 74H, 3BH
(3) 操作数
操作数即为操作的对象。在指令语句中,可能有 单操作数或双操作数,也可能无操作数或隐含操作数; 而在伪指令中可能有更多个操作数。当操作数不止一个 时,相互之间应该用逗号隔开。
可以作为操作数的有:常数、寄存器、标号、变量 和表达式等。
1) 常量:是指令在中出现的哪些固定值, 可以分为数值常数和字符串常数两类。
第05章汇编语言及程序设计ppt课件

汇编语言 源程序
汇编
目标程序
汇编程序
一一对应
汇编语言的指令
机器语言的指令
汇编语言程序设计的特点:
➢ 汇编语言是面向机器的语言,CPU不同的机器有不同 的汇编语言
➢ 可以充分利用机器的硬件功能和结构特点
➢ 可有效地加快程序的执行速度,减少目标程序所占用 的存储空间
➢ 可以对输入/输出端口进行控制,实时性能好 ➢ 汇编语言程序移植性、通用性、可读性差
第 5 章 程序设计及汇编语言
内容安排
一. 程序设计步骤 二. 程序设计 三. 汇编语言及汇编程序 四. 汇编语言源程序格式及实例 五. 上机操作
§5.1 程序设计步骤
(1〕分析问题 (2〕建立数学模型 (3〕确定算法 (4〕绘制程序流程图 (5〕内存空间分配 (6〕编制程序与静态检查 (7〕程序调试〔实验)
[名字] DW <表达式或数据项表> 功能:表达式或项表中的每一项是一个/两个字
节数,他们从符号名地址开始按字节连续存放, 如:直D到1 表中DB数据12H项, 结12H束 12H
D1 DB 3 DUP (12H) MOV AX, D1
注意:① 表达式或数据项表多于一项时,项与项之间用 逗号“,”或空格分隔
MOV BL,0FFH ;将FFH送入BL寄存器
LOut: MOV AL,BL
OUT 73H,AL ;将结果的标志数据输出到 73H端口
HLT
;暂停
Lw10: MOV BL,00H
JMP LOut
L10to20: MOV BL,88H
JMP LOut
3. 循环程序
强制CPU重复执行某一指令系列〔程序段〕的一种程序 结构形式
组成:
汇编语言程序设计第5章

6.整理文档
程序设计的结果包括两大部分,一是程序,二是文档。这 里讲的文档主要是包括各个设计阶段的规格说明书,以及用户 使用手册等。这是用户使用、维护程序的依据。 7.软件测试
测试是保证软件质量的重要手段,其主要方式是在设计测
试用例的基础上检验软件的各个组成部分。首先是进行单元测 试,查找各模块在功能和结构上存在的问题并加以纠正。其次 是进行组装测试,将已测试过的模块按一定顺序组装起来。最 后按规定的各项需求,逐项进行有效性测试,决定已开发的软 件是否合格,能否交付用户使用。
4.编码 这个阶段也称为程序编制或编程,主要是选择一种程序设
计语言,并用此语言具体地实现所设计的算法。
5.调试与排错
通过调试来排除程序中的错误,保证程序的正确。一般要作
静态检查和动态运行。静态检查包括人工检查和上机进行语法
检查;动态运行就是根据程序在工作中所有可能的情况,例如,
输入各种不同的初始数据,检查程序执行是否正确。
例5-1 若内存的数据段中,有缓冲区BUFFER,存取数据的
规则是先存储一个16位带符号的被除数,再存储一个16位带符
号的除数,接着存储商,最后存储余数。 DATA SEGMENT
BUFFER DW 812DH
DW 013CH DW ? DW ? DATA ENDS
;被除数
;除数 ;存商 ;存余数
STACK
JNC LABEL JO JNO JS LABEL LABEL LABEL
JNS LABEL
JP/JPE LABEL JNP/JPO LABEL
SF=0
PF=1 PF=0
为正时转移
结果为偶时转移 结果为奇时转移
(2) 根据两个无符号数比较结果来决定转移的条件转移指令
第5章 汇编语言程序设计ppt课件

;段分配
START:MOV AX,DATA MOV DS,AX MOV AL,BUF1 ADD AL,BUF2 MOV SUM,AL MOV AH,4CH INT 21H
CODE ENDS END START
;填装数据段寄存器DS ;取第一个加数 ;和第二个加数相加
代 码 段
;返回DOS状态 ;CODE段结束 ;整个源程序结束
第5章 汇编语言程序设计
5.1 汇编语言程序格式 5.2 常用伪指令 5.3 汇编语言的编写 5.4 DOS功能调用 5.5 汇编语言设计
最新课件
教学重点
本章介绍程序结构、伪指令、DOS功能调用。 重点:汇编语言程序的基本结构;
伪指令及其使用方法; DOS功能调用; 基本的汇编语言程序设计方法。 难点:DOS功能调用的应用 汇编语言程序的设计
算术运算符
运 算
逻辑运算符
符
及 关系运算符
表
达 式
分析运算符
综合运算符
+、—、*、/、MOD
与数学运算符的意义相同。
A取N模D是、取OR余、数N。OT、XOR E例运Q:算、82结NEM果、O是LD一T、1个6G常;T数、结.L果E、为G2 E 两个2表0H达M式O比D较7时; ,结表果达为式4表示 方法/性质要相同 关时SSEI系Z,GE成为、、立全OT,YF0PF结SE果ET为、全LE1;NG不T成H、立 例把T规等偏H如存定价移IS:储存于地、指单储址MP令元OT单RV地M元OB址的XV分,性B解0X质;,为3段2地EQ址4和5
作用:由编程者按照一定的规则来定义的一种较“宏 大”的指令,包括多条指令或伪指令 。
最新课件
例题1
SEGMENT
ENDS
第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个机器周期。
汇编语言程序设计 第五章 课件

(3)串搜索指令 SCAS
LEA DX,ASS MOV AH,10 INT 21H LEA DI,ASS+2 ;输入串首址→DI MOV CL,ASS+1 ;输入串长度→CX MOVZX CX,CL MOV AL,′A′ ;计数器清零 MOV BX,0 P: REPNE SCASB ;查找字符‛A” JE A ;查到字符‛A”转A处执行 ;全部查完转结束 JMP OUT1 ;所有判断完否 A: CMP CX,0 JE OUT1 ;全部查完转结束 CMP BYTE PTR [DI], ‘M’ ;判断‛A”后的字符为‛M”否 JNE B ;不是转B处执行 INC BX ;是‛AM”计数器加1 B: JMP P ;未完转P继续判断 OUT1:MOV AH,4CH ;返回操作系统 INT 21H CODE ENDS END START
(1)串操作指令MOVS、CMPS、SCAS的 使用格式及功能; (2)简单宏指令的定义与调用方式; (3)模块程序设计的方法。
第五章
程序设计的其它方法与技术 三、本章学习的难点:
(1)MOVS与MOV、CMPS与CMP功能上
的差别及串操作指令的正确使用方法; (2)宏指令的定义与调用方式; (3)模块之间的组合、定位及通信方式; (4)模块化程序设计技术。
(5)存储字节/字/双字指令 STOS
●格式: ●功能:
STOS
OPD 或
STOSB 往字节串中存数 STOSW 往字串中存数 STOSD 往双字串中存数
⑴ 字节操作:(AL)→ ES:[DI]/[EDI] 字操作: (AX)→ ES:[DI]/[EDI] 双字操作:(EAX)→ES:[DI]/[EDI] 即将AL(或AX、EAX)中的数据送入DI/EDI所指的目的串中的字节(或 字、双字)存储单元中。修改指针DI/EDI,使之指向串中的下一个元素。 ⑵ 修改串指针,使之指向下一元素,修改方式为: i.当DF=0时,(SI)/(ESI)增量1(字节操作)或2(字操作) 或 4(双字操作)。 ii.当DF=1时,(SI)/(ESI)减量1(字节操作)或2(字操作) 或 4(双字操作)。 说明:该指令执行后,并不影响标志位,因而它一般只带REP重复前缀, 用来将一片连续的存储字节(或字)单元臵相同的值。
微机原理第五章 程序设计-dsh

INT
COSEG
21H
ENDS END START
第三节 分支程序
计算机可根据不同条件进行逻辑判断,从而选择不同 的程序流向。程序的流向是由 CS和 IP决定的,当程序 的转移仅在同一段内进行时,只需修改偏移地址 IP的 值;如果程序的转移是在不同的段之间进行,则段基 址 CS和偏移地址 IP均需要修改。 转移指令分为无条件转移指令和条件转移指令。 在进行分支程序设计时,首先要根据处理的问题用比 较、测试的方式,或者用算术运算、逻辑运算使标志 寄存器产生相应的标志位,根据转移条件选择转移指 令。
INC INC DEC JNZ
BX BX CX LOP ; ;控制部分
修改部分
MOV YY,AX MOV AH,4CH INT CODE ENDS 21H
END
START
一.循环的基本结构
1.先执行,后判断结构
流程图如右:
入口
初始化部分
循环体
修改部分
N
循环 结束? Y 出口
例2. 编程统计数据块中正数的个数,
Y
RS END (DX)
DATA
SEGMENT
D1
COUNT RS DATA CODE
DB,-1,-3,5,7,-9,·,-6 · ·
EQU DW ENDS SEGMENT ASSUME CS:CODE,DS:DATA $-D1 ?
START:
MOV
AX,DATA
MOV
MOV MOV MOV
DS,AX
JMP JUS2
BIGD: JG JUS1 ;x>0转移 ;x=0
MOV AL, 0
JMP
JUS1: JUS2:
JUS2
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第五章汇编语言程序设计5·1编程将片内40H一60H单元中内容送到以3000H为首的存特区中。
答:按题目要求编程如下:MOV Rl,#40HMOV R0,#20HMOV DPTR,#3000HLI:MOV A,@RlMOVX@DPTR,AINC R1INC DPTRDJNZ R0,Ll5.2编写计算下列算式的程序。
①23H+45H+ABH+03H=②CDH十l5H-38H-46H=③1234H+8347H=④ABl23H-43ADCH=答:按题目要求编程如下:①MOV A,#23HADD A,#45HADD A,#0ABHXCH A,B;相加后有溢出处理ADDC A,#00HXCH A,BADD A,#3H;结果A中是低位,B中是高位②MOV A,#0CDHADD A,#15HSUBB A,#t38HSUBB A,#46H③MOV A,#34HADD A,#047HMOV40H,AMOV A,#12HADDC A,#83HMOV4lH,A;结果40H中是低位,41H中是高位④CLR CMOV A,#23HSUBB A,#0DCHMOV40H,AMOV A,#0B1HSUBB A,03AHMOV41H,AMOV A,#0AHSUBB A,#04HMOV42H,A;结果40中是低位,42H中是高位5·3编程计算片由RAM区5OH~57H八个单元中数的算术平均值,结果存放在5AH中。
答:在本题计算中要求8个单元的和小于255。
按题目要求编程如下:MOV R0,#50HMOV R1,#8MOV A,#0LI:ADD A,@R0INC R0DJNZ R1,L1MOV B,#8DIV ABMOV5AH,A5·4编写计算下列的程序,设乘积和平方结果均小于255。
a,b值分别存在300H和3002H 单元中,结果存于片外3000H单元中。
25,a=b①Y=a*b,a<ba/b,a>b(a+b)2+10,(a+b)2<10②Y=(a+b)2,(a+b)2=10(a+b)2-10,(a+b)2>10答:按题目要求编程①MOV DPTR,#3001HMOVX A,@DPTR;取a值MOV30H,A;a值暂存储在30HJNC DPLMOVX A,@DPTR;取b值CJNE A,30H,L1;a=b?MOV A,#25SJMP EEL1:JNC L2MOV B,30HMUL ABSJMP EEL2:MOV B,AMOV A,30HDIV ABEE:MOV DPTR,#3001HMOVX@DPTR,A②MOV DPTR,#3001HMOVX A,@DPTRMOV30HINC DPLMOVX A,@DPTRADD A,30HMOV B,AMUL ABMOV31H,ACJNE A,#10,L1SJMP EEL1:JC L2CLR CSUBB A,#10SJMP EEL2:ADD A,#10MOV DPTR,#3000HMOVX@DPTR,A5.5设有两个长度均为15的教组,分别存放在以2000H和2100H为首的存储区中,试编程求其对应项之和,结果存放列以2200H为首的存储区中。
答:在本题中假设两数之和不超过255。
按题目要求编程如下:MOV DPTR,#2000HMOV Rl,#15LI:MOV DPH,#20HMOVX A,@DPTRMOV R2,AMOV DPH,#2lHMOVX A,@DPTRADD A,R2MOV DPH,#22HMOVX@DPTR,AINC DPLDJNZ Rl,LlSJMP$5·6设有100个有符号教,连续存放在以2000H为首地址的存储区中试编程统计其中正数、负数、零的个数。
答:在本题中设正数、负数、零分别存放在30H、31H、32H单元中。
按题目要求编程如下MOV30H,#0MOV31H,#0MOV32H,#0MOV DPTR,#2000H;设数据区首地址MOV Rl,#tl00;设数据区长度L4:MOVX A,@DPTRINC DPTRCJNE A,#0,L1INC32HSJMP L2LI:JC L3INC30HSJMP L2L3:INC31HL2:DJNZ R1,L4SJMP$5·7请将片外教据存储器地址为1000H~1030H的教据块,全部搬迁到片内RAM30H~60H 中,并将原教据块区域全部清0。
答:按题目要求编程如下MOV DPTR,#1000HMOV Rl,#30HMOV R0,#30HLI:MOVX A,@DPTRMOV@R0,AMOV A,#0MOVX@DPTR,AINC DPLINC R0DJNZ R1,L15·8试编写一子程序,使间寄存器Rl所指向的两个片外RAM连续单元中的高4往二进制数,合并为一个字节装入累加器A中。
己知Rl指向低地址,并要求该单元高4位放在A的低4位中。
答:按题目要求编程如下MOVX A,@Rl;将低字节读入ANL A,#0F0H;保留高4位SWAP A;交换到低4位MOV B,A;暂存INC R1;改变地址MOVX A,@Rl;将高字节读入ANL A,#0F0H;保留高4位ORL A,B;组合成新字节RET;返回5·9试编程把以2040H为首地址的连续50个单元中的无符号数按降存排列,存放到以3000H为首地址的存储区中。
答:该程序采用冒泡(下沉)法,也可用别的方法;排列前首先将数据搬到目的存储单元。
按题目要求编程如下:MOV R2,#50;排序字节数MOV R3,#20H;源地址暂存人R3、R4MOV R4,#40H;目的地址暂存人R5、R6MOV R5,#30HMOV R6,#00HSEND_LP:MOV DPH,R3MOV DPL,R4MOVX A,@DPTRINC DPTRMOV R3,DPHMOV R4,DPLMOV DPH,R5MOV DPL,R6MOVX@DPTR,AINC DPTRMOV R5,DPHMOV R6,DPLDJNZ R2,SEND_LPMOV R2,#49;重复次数CMP_LP1:MOV DPTR,¥3000H;起始地址MOV R3,#49;比较次数CMP_LP2;MOVX A,@DPTRMOV B,AINC DPTRMOVX A,@DPTRCJNE A,B,Ll;相邻两个数比较LI:JC NO_CHAGE;A小,不交换转NO_CHAGEMOV30H,A;准备交换CLR CMOV A,DPLSUBB A,#0lHMOV DPL,AMOV A,30HMOVX@DPTR,AINC DPTRMOV A,BMOVX@DPTR,ANO_CHAGE:DJNZ R3,CMP_LP2;50个数重复一遍?DJNZ R2,CMP_LPl;排序结束?LJMP$5·10试编一查表程序,从首地址为2000H和长度为100的数据块中找出ASCII吗A,将其地址送列20A0H和20AlH单元中。
答:按题目要求编程如下:MOV DPTR,#2000H;数据块首地址MOV R2,@100;查找长度GO_ON:MOVX A,@DPTR;取一个数CJNE A,#’A’,IFEND;是否等于'A'?MOV A,DPH;是,将地址存人指定单元MOV B,DPLMOV DPTR,#20A0HMOVX@DPTR,AINC DPTRXCH A,BMOVX@DPTR,ARETIFEND:INC DPTR;不是,下一个DJNZ R2,GO_ON;末查找完,继续RET5·11设在2000H~2004H单元中,存放有5个压缩BCD吗,编程将它们转换成ASCII 吗,存放到以2005H单元为首地址的存储区中。
答:按题目要求编程如下MOV R2,#05H;转换长度送R2MOV R3,#20H;源地址送R3,R4MOV R4,#00HMOV R5,#20H;目的地址送R5,R6MOV R6,#05HCHLP:MOV DPH,R3;取源地址MOV DPL,R4MOVX A,@DPTR;读一个数INC DPTR;修改源地址MOV R3,DPH;保存源地址MOV R4,DPLMOV B,A;数据暂存SWAP A;将高位转成BCD码ANL A,#0FHORL A,#30HMOV DPH,R5;取目的地址MOV DPL,R6MOVX@DPTR,A;将高位BCD码保存到目的单元INC DPTR;修改目的地址MOV A,B;将暂存数据取出ANL A,#0FH;将低位转成BCD码ORL A,#30HMOVX@DPTR,A;将低位BCD码保存到目的单元INC DPTR;修改目的地址MOV R5,DPH;保存目的地址MOV R6,DPLDJNZ R2,CHLP;转换未完,继续RET5.12在以2000H为首地址的存储区中,存放着20个用ASCII码表示的0~9之间的数,试编程将它们转挨成BCD吗,并以压缩BCD码(即一个单元存放二位BCD码)的形式存放在3000H~3009H单元中。
答:按题目要求编程如下MOV R2,#10;组合次数MOV R3,#20H;源地址送R3,R4MOV R4,#00HMOV R5,#30H;目的地址送R5,R6MOV R6,#00HC12LP:MOV DPH,R3;取源地址MOV DPL,R4MOVX A,@DPTR;读一个数ANL A,#0FH;屏蔽高4位,保留低4位SWAP A;将低4位暂存XCH A,BINC DPTR;修改源地址MOVX A,@DPTR;读下一个数ANL A,#0FH;屏蔽高4位,保留低4位ORL A,B;和暂存数据组合成新BCD码INC DPTR;修改源地址MOV R3,DPH;保存源地址MOV R4,DPLMOV DPH,R5;取目的地址MOV DPL,R6MOVX@DPTR,A;保存BCD码INC DPTR;修改目的地址MOV R5,DPH;保存目的地址MOV R6,DPLDJNZ R2,Cl2LP;转换未完,继续RET5·13试编程实现下列逻辑表达式的功能。
设P1.7~Pl.0为8个变量的输入端,而其中P1.7又作为变量输出端。
①Y=X o X1X2+X3+X4X5X6+X7②Y=X0X1十X2X3X4十X5X6X7答:按题目要求编程如下;输人端定义X0EQU P1.0X1EQU P1.1X2EQU P1.2X3EQU P1.3X4EQU P1.4X5EQU P1.5X6EQU P1.6X7EQU P1.7.Y EQU P1.8;暂存位定义TEMP1EQU00HTEMP2EQU01H表达式①MOV C,X0ANL C,X1ANL C,/X2ORL C,/X3MOV TEMPI,CMOV C,X4ANL C,X5ANL C,X6ORL C,/X7ORL C,TEMPIMOV Y,CRET表达式②MOV C,X0ANL C,X1CPL CMOV TEMPI,CMOV C,X2ANL C,X3ANL C,X4CPL CMOV TEMP2,CMOV C,X5ANL C,X6ANL C,X7CPL CORL C,TEMP2CPL CORL C,TEMPIMOV Y,CRET5.14试偏写一多字节无符号数加法子程存。