汇编语言程序设计第五章
合集下载
第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重复执行某一指令系列〔程序段〕的一种程序 结构形式
组成:
汇编语言程序设计(第二版)第五章PPT课件
MACRO retnum mov al,retnum mov ah,4ch int 21h ENDM
;;带有形参retnum ;;宏定义中使用参数
宏调用
宏名 [实参表]
start: mainbegin dispmsg string mainend 0 end start
;宏调用,建立DS内容 ;宏调用,显示字符串 ;宏调用,返回DOS
过程名 ENDP
➢要 调 用 带➢参过数程声过明程伪定指义令:的用过于程事,先声不明应过采程用的结构 CALL指令过,程因名为比较PR烦O琐TO 调用距离 语言类型, 参数:类型 ➢应该采用过程调用伪指令INVOKE ➢使 用 INV➢O过K程E调伪用伪指指令令的 前 提 是 需 要 用 PROTO伪指令对过程IN进VO行K声E 明过程名,参数,...
mov al,_a
imul _c
mov cx,4
imul cx
例5.1-1/2
;bx中为b2 ;ax中为4ac
例5.1-2/2
.if sword ptr bx >= ax ;比较二者大小 mov tag,1
;第一分支体:条件满足,tag←1 .else
mov tag,0 ;第二分支体:条件不满足,tag←0 .endif .exit 0
mov bx,ax mov ax,0 .ELSE * jmp @C0003 *@C0001: dec ax .ENDIF *@C0003:
.data
_a
sbyte ?
_b
sbyte ?
_c
sbyte ?
tag byte ?
.code
.startup
mov al,_b
imul al
汇编语言程序设计第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重复前缀, 用来将一片连续的存储字节(或字)单元臵相同的值。
第五章_汇编语言程序设计基础
3
§5-1 汇编语言的基本概念
汇编 语言 源程 序 汇编 程序 A ss em bl er 机器 语言 目标 程序
汇编语言指令与机器指令之间有一一对应的关系,所以汇 编语言与具体的机器密切相关,是一种面向机器的语言。 不同机器(CPU)的汇编语言不同。 为方便编程,实际的汇编程序常还提供一些除机器指令以 外的命令,被称为伪指令。伪指令(Pseudo Instruction) 仅在汇编过程中指导汇编程序如何生成目的代码,自己本 身并没有对应的机器代码。 汇编语言的指令(语句)包含两类:硬指令或真指令(指 令语句)和伪指令(指示性语句) 。
12
§5-2 汇编语言的基本语言成分
6. 综合运算符(改变属性运算符):由已存在的存储器操作数 (变量/标号)生成一个段地址和位移量相同、类型不同的新 的存储器操作数(变量/标号)。 (1) 改变变量/标号的类型: 格式: 新类型 PTR 变量/标号 功能:把PTR左边的属性赋给右边的变量/标号 [例] 设变量XVAR是字节属性,现把它的两个字节内容送 到AX中起去。 MOV AX , WORD PTR XVAR (2) 定义当前存储单元的类型: 格式: THIS 类型 功能:可用于建立新类型的存储器变量,但不分配新的存 储空间,它的段地址和位移量是汇编时的当前值。 [例] WBUFFER EQU THIS WORD BUFFER DB 100 DUP(?)
17
§5-3 汇编语言源程序的结构
(3) 段的类别属性:通常使用的类别名是‘CODE’、 ‘DATA’、‘STACK’,分别指明是代码段、数据段、 堆栈段;但也允许用户自定义类别名。类别名必须用单引 号括起来。 连接程序在组织段时,将所有同类别的段集中在一起, 进行相邻分配。 2. 段寄存器说明伪指令(ASSUME): 格式: ASSUME 段寄存器:段名 [,段寄存器:段名] 功能:告诉汇编程序,段名所指的段由那一个段寄存器寻 址,即建立段与段寄存器的关系。 说明:段寄存器的实际值(CS除外)还要由数据传送令在 执行程序时赋值。
§5-1 汇编语言的基本概念
汇编 语言 源程 序 汇编 程序 A ss em bl er 机器 语言 目标 程序
汇编语言指令与机器指令之间有一一对应的关系,所以汇 编语言与具体的机器密切相关,是一种面向机器的语言。 不同机器(CPU)的汇编语言不同。 为方便编程,实际的汇编程序常还提供一些除机器指令以 外的命令,被称为伪指令。伪指令(Pseudo Instruction) 仅在汇编过程中指导汇编程序如何生成目的代码,自己本 身并没有对应的机器代码。 汇编语言的指令(语句)包含两类:硬指令或真指令(指 令语句)和伪指令(指示性语句) 。
12
§5-2 汇编语言的基本语言成分
6. 综合运算符(改变属性运算符):由已存在的存储器操作数 (变量/标号)生成一个段地址和位移量相同、类型不同的新 的存储器操作数(变量/标号)。 (1) 改变变量/标号的类型: 格式: 新类型 PTR 变量/标号 功能:把PTR左边的属性赋给右边的变量/标号 [例] 设变量XVAR是字节属性,现把它的两个字节内容送 到AX中起去。 MOV AX , WORD PTR XVAR (2) 定义当前存储单元的类型: 格式: THIS 类型 功能:可用于建立新类型的存储器变量,但不分配新的存 储空间,它的段地址和位移量是汇编时的当前值。 [例] WBUFFER EQU THIS WORD BUFFER DB 100 DUP(?)
17
§5-3 汇编语言源程序的结构
(3) 段的类别属性:通常使用的类别名是‘CODE’、 ‘DATA’、‘STACK’,分别指明是代码段、数据段、 堆栈段;但也允许用户自定义类别名。类别名必须用单引 号括起来。 连接程序在组织段时,将所有同类别的段集中在一起, 进行相邻分配。 2. 段寄存器说明伪指令(ASSUME): 格式: ASSUME 段寄存器:段名 [,段寄存器:段名] 功能:告诉汇编程序,段名所指的段由那一个段寄存器寻 址,即建立段与段寄存器的关系。 说明:段寄存器的实际值(CS除外)还要由数据传送令在 执行程序时赋值。
汇编-循环与分支程序设计
方法A
MOV DL,0DH MOV AH,06H INT 21H MOV DL,0AH MOV AH,06H INT 21H
方法B
MOV DL,0AH MOV AH,06H INT 21H MOV DL,0DH MOV AH,06H INT 21H
记住以下ASCII值
退格:08H(即8) 空格:20H(即32) 换行:0AH(即10) 回车:0DH(即13) 0 :30H(即48) a :61H(即97) A :41H(即65)
程序流程图
开始
DX=A
DX=A+B BX=DX DX左移3位 BX左移1位
DX=BX+DX-500
结束
编写程序
DATA BUFA BUFB RESULT
SEGMENT DW ? DW ? DW ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: CODE
➢ 循环控制部分:判断循环条件满足与否,常用方法:计数控制、特 征值控制、地址边界控制等。
➢ 常用指令
[1].LOOP,LOOPZ/LOOPE,LOOPNZ/LOOPNE;
[2].各种跳转指令;
特别要注意循环入口和循环次数的正确设置、地址指针及循环控
制条件的修改等。否则会得不到期望的结果。
➢ 多重循环程序设计循环嵌套
INT 21H
不回显在屏幕上
2.键盘一次输入一个字符串的方法:
串地➢址例存如入(,DS在:D数X)据、调区用定参义数的为字10送符A缓H冲区如下:
MOV MOV MOV MOV MOV
DABADDAXuHSX,f,,,TfASAO0eEXfArGf,Hsc/eSASBo/tBEuu设TCufnGRf置BftTMfueILeNIr/frENE/fGT/设e/NN/r/置BTB/2uu/1存ffBHDffDuD功入eefBBBrrf能字是的er参符存段的33?数串放地偏22 为的输址移D0最入U存地APH大字入址(长符D存S?度串入)并的DX存缓入冲B区uffer的首字节;
《汇编语言程序设计》第5章基本汇编语言程序设计.ppt
汇编语言程序设计的基本步骤: 1.分析题意,确定数据结构和算法 2.根据算法绘制程序流程图 3.根据流程图编写程序 4.调试程序
5.1 汇编语言程序的设计步骤
汇编语言程序设计的基本步骤
例5.1 在100个字的无符号整数字中找出最 大数。
5.1 汇编语言程序的设计步骤
汇编语言程序设计的基本步骤
5.2 顺序结构的程序设计
(2)输出:在8086.8088指令系统中,字符的输出是由 DOS21H中断的02H子功能来实现的,命令序列如下: MOV AH,02H INT 21H 其作用是将寄存器DL中所存放的字符进行显示输出, 故在执行该命令序列之前,应先将被输出字符的ASCII 码存入DL中。
程序的基本结构
1.顺序结构 2.分支结构 3.循环结构
ห้องสมุดไป่ตู้
5.1 汇编语言程序的设计步骤
程序的基本结构 1.顺序结构
5.1 汇编语言程序的设计步骤
程序的基本结构 2.分支结构
5.1 汇编语言程序的设计步骤
程序的基本结构 3.循环结构
5.1 汇编语言程序的设计步骤
第5章基本汇编语言程序设计
1.分析题意,确定数据结构和算法 (1)初始化,建立一个数据指针指向数据区的首
地址; (2)将第一个数存入寄存器(如AX)中; (3)调整数据指针,使其指向下一个数; (4)将数据指针所指的数与寄存器AX的内容相比
较,如果该数较大,则将其存入AX,否则丢掉; (5)重复执行(3)、(4)两步,直至将数组中
分析:比较两数可用CMP指令,而带符号数的比 较结果可由标志位SF、OF来确定,选用的转移 指令应为JG、JL等。
第5章基本汇编语言程序设计
5.1 汇编语言程序的设计步骤 5.2 顺序结构的程序设计 5.3 分支结构的程序设计 5.4 循环结构的程序设计 5.5 子程序设计
5.1 汇编语言程序的设计步骤
汇编语言程序设计的基本步骤
例5.1 在100个字的无符号整数字中找出最 大数。
5.1 汇编语言程序的设计步骤
汇编语言程序设计的基本步骤
5.2 顺序结构的程序设计
(2)输出:在8086.8088指令系统中,字符的输出是由 DOS21H中断的02H子功能来实现的,命令序列如下: MOV AH,02H INT 21H 其作用是将寄存器DL中所存放的字符进行显示输出, 故在执行该命令序列之前,应先将被输出字符的ASCII 码存入DL中。
程序的基本结构
1.顺序结构 2.分支结构 3.循环结构
ห้องสมุดไป่ตู้
5.1 汇编语言程序的设计步骤
程序的基本结构 1.顺序结构
5.1 汇编语言程序的设计步骤
程序的基本结构 2.分支结构
5.1 汇编语言程序的设计步骤
程序的基本结构 3.循环结构
5.1 汇编语言程序的设计步骤
第5章基本汇编语言程序设计
1.分析题意,确定数据结构和算法 (1)初始化,建立一个数据指针指向数据区的首
地址; (2)将第一个数存入寄存器(如AX)中; (3)调整数据指针,使其指向下一个数; (4)将数据指针所指的数与寄存器AX的内容相比
较,如果该数较大,则将其存入AX,否则丢掉; (5)重复执行(3)、(4)两步,直至将数组中
分析:比较两数可用CMP指令,而带符号数的比 较结果可由标志位SF、OF来确定,选用的转移 指令应为JG、JL等。
第5章基本汇编语言程序设计
5.1 汇编语言程序的设计步骤 5.2 顺序结构的程序设计 5.3 分支结构的程序设计 5.4 循环结构的程序设计 5.5 子程序设计
单片机课件第五章__汇编语言程序设计
MOV 31H,A ;暂停
开始 取数,A←(30H) A为负数? N Y A←64H
图 例
5-4 4.3
A=0?
N A←X+2 存数,(31H)←A(30H) 结束 A←|X|
程 序 流 程 图
3.多向分支程序设计举例
【例5.4】 根据R0的值转向7个分支程序。
R0<10,转向SUB0; R0<20,转向SUB1;
JMP @A+DPTR ;PC ← A+DPTR TAB: AJMP SUB0 ;转移指令表 AJMP SUB1 AJMP SUB5 AJMP AJMP SUB2 SUB6
开始
K=? K=0 转SUB0 K=1 …… K=6 转SUB1 转SUB6
图5-5 多向分支程序流程图
返回本节
4.2.4 循环程序
5.2.2 顺序程序
5.2.3 分支程序
5.2.4 循环程序
5.2.5 子程序 5.2.6 位操作程序
返回本章首页
5.2.1 汇编语言程序设计步骤
1.分析问题
2.确定算法
3.设计程序流程图 4.分配内存单元 5.编写汇编语言源程序 6.调试程序
返回本节
5.2.2 顺序程序
顺序程序是一种最简单,最基本的程序。
【例5.2】 设X、Y两个小于10的整数分别存于 片内30H、31H单元,试求两数的平方和并将 结果存于32H单元。 解:两数均小于10,可利用乘法指令求平方。 程序流程如图5-2所示。参考程序如下: ORG 2000H
MOV
MOV
A,30H
;取30H单元数据
B,A ;将X送入B寄存器
MUL AB
ONE DATA 30H
五章汇编语言程序设计共70页
5.6顺序程序设计-例5-2(6)
CODE
MOV BX,VARX ADD BX,VARY ADD BX,VARZ XOR DX,DX DIV BX MOV F1,AX MOV F2,DX MOV AH,4CH INT 21H ENDS END BEGIN
软中断INT 21H
5.6顺序程序设计-两种退出用户程序的办法
3.关系运算符
5.3汇编语言数据--- 5.3.4运算符
4.数值返回运算符 (1)SEG和OFFSET运算符 (2)TYPE运算符 (3)LENGTH运算符和SIZE运算符
5.3汇编语言数据--- 5.3.4运算符
5.属性运算符PTR 6.运算符优先级
5.4伪指令语句(内容)
5.4.1段定义语句 5.4.2过程定义语句 5.4.3定位语句和位置计数器 5.4.4偶地址控制语句 5.4.5程序标题语句
3. 字符串表达式(DB<256,DW/DD1~2
个)
例: name1 DB
‘abcdef’
name2 DB
‘zhang’,’wang’,’li’
name3 DW
‘to’,’je’
name4 DD
‘ma’,’le’
5.3.2数据定义语句---表达式使用4
4. 带DUP表达式
例:
DB
变量名 DW
表达式1 DUP(表达式2)
第五章 汇编语言程序设计 第五章是重点章节
第五章的内容
5.1概述 5.2汇编语言语句 5.3汇编语言数据 5.4伪指令语句 5.5宏指令语句 5.6顺序程序设计 5.7分枝程序设计
5.8循环程序设计 5.9自程序设计 5.10实用程序设计示例 5.11汇编语言程序的开发
汇编语言第五章
二.模块装配
连接程序(LINK)的功能 将制定的若干个目标模块(.OBJ)和子程序 库(.LIB)中的子程序模块连接在一起,生成可 执行的文件(.EXE)
二.模块装配
NAME WAN2 EXTRN DIV0:WORD, COUNT:WORD PUBLIC WAN2
DATA1 SEGMENT PARA PUBLIC ‘A1’ SUM DW 0 DATA1 ENDS STACK SEGMENT PARA STACK ‘STACK’ DB 200 DUP(0) STACK ENDS
DATA1 SEGMENT PARA PUBLIC ‘A1’ BEG EQU 1 COUNT DW 50 DIV0 DW 0 DATA1 ENDS STACK SEGMENT PARA STACK ‘STACK’ DB 200 DUP(0) STACK ENDS CODE SEGMENT PARA PUBLIC ‘B1’ ASSUME DS:DATA1, SS:STACK, CS:CODE START: MOV AX, DATA1 MOV DS, AX MOV BX, BEG MOV CX, COUNT CALL WAN2 MOV AH, 4CH INT 21H CODE ENDS END START
二.模块装配
定位方式: 连接时段首址可以不从一小段开始,从何处开始由定 位方式确定。
① PARA:该段要从能被16整除的地址处开始存放;
② WORD:该段要从一个偶数地址处开始存放; ③ BYTE:该段可以从任何地址开始存放; ④ PAGE该段要从能被256整除的地址处开始存放
。
二.模块装配
连接时把’类别’相同的所有段存放在连续
5.3 模块化程序设计
作用:用于大型程序系统的设计。通过模块
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单重循环程序设计
练习1.计算:S=1+2+3+4+…+200
练习2.计算:S=1+2*3+3*4+4*5+…+N*(N+1) 直到N*(N+1)>200为止。
多重循环程序设计
【例】在以BUF为首址的字存储区中存放有N个有符 号数,现需将它们按大到小的顺序排列在BUF存储 区中,试编写其程序。 我们采用冒泡排序算法从第一个数开始依次对 相邻两个数进行比较,如次序对,则不交换两数 位置;如次序不对则使这两个数交换位置。可以 看出,第一遍需比较(N-1)次,此时,最小的数 已经放到了最后;第二遍比较只需考虑剩下的 (N-1)个数,即只需比较(N-2)次;第三遍只 需比较(N-3)次,……整个排序过程最多需(N1)遍。如下面的4个数即是采用冒泡排序比较的 例子。
.486 DATA SEGMENT USE16 JUMP DB ? TAB DW P000 DW P001 …… DW P255 DATA ENDS CODE SEGMENT USE16 ASSUME CS:CODE,DS:DATA BEG:MOV AX,DATA MOV DS,AX
MOV BL,JUMP MOV BH,0 ADD BX,BX MOV SI,OFFSET TAB JMP WORD PTR [BX+SI] P000: …… P001: …… …… P255: …… CODE ENDS END BEG
MOV DX,OFFSET MESG1 CMP NUMBER,N1 JNC NEXT MOV DX,OFFSET MESG2 JMP DISP NEXT:CMP NUMBER,N2+1 JC DISP MOV DX,OFFSET MESG3 DISP:MOV AH,9 INT 21H MOV AH,4CH INT 21H CODE ENDS END BEG
变址循环程序设计
变址循环:将数据有规律地存放在连续的内存 单元,使数据地址在循环过程中有规律的变化, 利用变址寄存器或基址寄存器,使之指向数据 元素。 例、计算C=A1*B1+A2*B2+A3*B3+A4*B4
分支程序设计
条件成立? Y Y 语句 1 条件成立? N 语句 2
语句
(a) 简单分支
(b) 简单分支的两路分支
表达式计算结果是 情况1 情况2 …… 情况n
语句 1
语句 2
语句 n
(c) 多路分支
简单分支程序的设计
通常是在执行了算术比较指令CMP,或者逻辑比较指令 TEST之后,根据Z,S,O,P,C等各种标志位的状态进行有 条件转移。如果条件成立则跳转到指定指令开始执行, 否则忽略转移指令继续顺序的执行后续的指令。 例、将BX寄存器的内容以二进制格式显示在屏幕上。 ;FILENAME:651.ASM .486 CODE SEGMENT USE16 ASSUME CS:CODE BEG:MOV BX,5678H MOV CX,16
CODE
ADD BX,2 DEC CX JNE LOOP2 MOV CX,DX LOOP LOOP1 MOV AH,4CH INT 21H ENDS END START
程序运行后,BUF区中的内容如下: 20,9,7,6,3,2,0,-4,-8,-9,-10 思考:若要对N个无符号数按由大到小的顺 序排列,要如何修改程序?
LAST:MOV DL,‟0‟ RCL BX,1 JNC NEXT MOV DL,‟1‟ NEXT:MOV AH,2 INT 21H LOOP LAST MOV AH,4CH INT 21H CODE ENDS END BEG
简单分支程序的设计
练习:试编程实现将BUF1和BUF2两个 字单元中的内容相加,若无溢出,将其和保 存到SUM单元中,若有溢出,在屏幕上显 示“Overflow!”。
第五章 循环和分支程序设计
汇编程序编写步骤 汇编程序编写格式 循环程序设计 分支程序设计
子程序设计
字符串程序设计
编制一个汇编语言程序的步骤
(1)分析题意,确定算法 (2)根据算法,画出程序框图 (3)根据框图编写程序 (4)上机调试程序
EXE文件的编程要求
源程序可使用多逻辑段 在实模式下,每个逻辑段大小不超过64KB 适合编写大型程序
数 10 8 16 90 第一遍 10 16 90 32 第二遍 16 90 32 10 第三遍 90 32 16 10 程序流程图如图4.9所示。
32 8 8 8
程序如下: DATA SEGMENT BUF DW 3,-4,6,7,9,2,0,-8,-9,-10,20 N=($-BUF)/2 DATA ENDS STACK SEGNMENT STACK DB 200 DUP(0) STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK
BEG:MOV AX,DATA MOV DS,AX MOV AL,0 LEA BX,BUF LAST:CMP BYTE PTR [BX],-1 JE DISP CMP [BX],AL JC NEXT MOV AL,[BX] NEXT:INC BX JMP LAST
DISP:MOV MAX+4,AL MOV AH,9 MOV DX,OFFSET MAX INT 21H MOV AH,4CH INT 21H CODE ENDS END BEG
复合分支程序设计
例、设NUMBER单元的数X以及数值N1,N2均为单 字节无符号数,请判断X的大小,并更加判断结果 分别显示:N1<=X<=N2,或X<N1,X>N2
.486 DATA SEGMENT USE16 MESG1 DB „N1<=X<=N2 $‟ MESG2 DB „X<N1 $‟ MESG3 DB „X>N2 $‟ NUMBER DB ? N1 EQU 22 N2 EQU 88 DATA ENDS CODE SEGMENT USE16 ASSUME CS:CODE,DS:DATA BEG:MOV AX,DATA MOV DS,AX
MOV MAX+4,AL MOV AH,9 MOV DX,OFFSET MAX INT 21H MOV AH,4CH INT 21H CODE ENDS END BEG
解二: .486 DATA SEGMENT USE16 BUF DB „QWERTYUIOP123‟ FLAG DB -1 MAX DB „MAX=“,?,0DH,0AH,‟$‟ DATA ENDS CODE SEGMENT USE16 ASSUME CS:CODE,DS:DATA
复合分支程序的设计
练习:根据X的值给Y赋值,若X=0,则Y=0 若X<0,则Y=1;若X>0,则Y=-1
多分支程序的设计
作用:使程序能根据不同的条件转移到多个程序分支去。 方法:(1)用寄存器间接寻址的方式实现跳跃表法。 (2)用基址变址的方式实现跳跃表法。 (3)用变址寻址方式实现跳跃表法。
例、 设计一个256分支的段内转移程序,设:JUMP单元有一个数X, 若X=0,转移到标号为P000的程序段; 若X=1,转移到标号为P001的程序段; …… 若X=255,转移到标号为P255的程序段;
汇编源程序的书写结构形式2
堆栈段名 SEGMENT STACK 用变量定义预置的堆栈空间 堆栈段名 ENDS 数据段名 SEGMENT 用变量定义预置的数据空间 数据段名 ENDS 代码段名 SEGMENT 过程名 PROC F A R ASSUME 定义的寻址关系 START:PUSH DS SUB AX,AX PUSH AX 填充数据段 . . . RET 过程名 ENDP 代码段名 ENDS END START
START: MOV AX,DATA MOV DS,AX MOV CX,N DEC CX LOOP1: MOV DX,CX MOV BX,0 LOOP2: MOV AX,BUF[BX] CMP AX,BUF[BX+2] JGE L XCHG AX,BUF[BX+2] MOV BUF[BX],AX
L:
字符串操作程序设计
例、用REP MOVSB指令把字符串S1从一个数据段传送 到辅助数据段的串S2中. DATA1 SEGMENT S1 DB „ABCDEFG‟ COUNT EQU $—OFFSET S1 DATA1 ENDS DATA2 SEGMENT S2 DB 27 DUP(?) DATA2 ENDS CODE SEGMENT
顺序程序设计
例.写出计算Y=A*B+C-18的程序,题中A,B, C是带符号的8位二进制数。
顺序程序设计
练习:试编制一程序,求出下列公式中的Z 值,并存放在RESULT单元中: Z=((X+Y)*8-X)/2 其中X,Y的值分别存放在VARX, VARY单元中。
循环程序设计
循环程序的结构 循环程序的设计方法
(COM文件)
汇编源程序的书写结构形式1
堆栈段名 SEGMENT STACK 用变量定义预置的堆栈空间 堆栈段名 ENDS 数据段名 SEGMENT 用变量定义预置的数据空间 数据段名 ENDS 代码段名 SEGMENT ASSUME 定义的寻址关系 START:填充数据段 . . . MOV AH,4CH INT 21H 代码段名 ENDS END START
源程序只允许使用一个逻辑段,即代码段,不允许设置 堆栈段; 数据可以集中设置在段的开始或者末尾; 程序的启动指令必须存放在偏移地址为100H的单元; 代码段长度小于64KB,适合于编写中小型程序。
例 显示10行HELLO
;FILENAME: 42.ASM .486 CODE SEGMENT ASSUME CS:CODE ORG 100H BEG: JMP START MESG DB „HELLO‟,0DH,0AH,‟$‟ START: MOV CX,10 LAST : MOV AH,9 MOV DX,OFFSET MESG INT 21H LOOP LAST MOV AH,4CH INT 21H CODE ENDS END BEG