IBM—PC(80x86)汇编语言与接口技术-第5章 循环与分支程序设计
汇编语言第五、六章:循环与分支程序设计
PUSH DS MOV AX,0 PUSH AX ③用户程序结束时,用RET指令
程序结束的方法
(2)使用DOS功能调用的“INT 21H”指令,实现 用户程序结束,返回DOS
方法:在程序结束前,使用如下指令 MOV AH,4CH INT 21H
注意:一般情况下,使用第2种方法结束用户程序。
3.与简化段定义有关的预定义符号
汇编程序给出了与简化段定义有关的一组预定义符号,它们可在程 序中出现,并由汇编程序识别使用。有关的预定义符号如下:
(1)@code 由.CODE 伪指令定义的段名或段组名。 (2)@data 由.DATA 伪指令定义的段名,或 由 .DATA 、.DATA?、.CONST和 .STACK所定义的段组名。 (3)@stack 堆栈段的段名或段组名。
第一节:循环结构
初始化
循环体
修改部分 Y
控制条件 N
结束
循环的初始状态
循环的工作部分 及修改部分
计数控制循环 条件控制循环
ห้องสมุดไป่ตู้
第五章第循一环章与基分础支知程识序设计
第五章第循一环章与基分础支知程识序设计
循环程序设计
根据条件重复执行一段指令就构成了循环程序结构 。
例:将ARRAY数组中的50个数求和,并将和存入字变量S中 。
……
00110001
16. 0 1 0 0 0 0 1 0 0 0 1 1 0 0 0 0 (ROL DX,1) 0 0 0 0 0 0 0 1 (AND)
00000000 + 0 0 1 1 0 0 0 0 (ADD)
00110000
binbuf 30 31 30 30 30 30 31 30 30 30 31 31 30 30 30 30 返回
80x86汇编语言程序设计、第5章循环与分支程序.
合肥学院计算机科学与技术系何立新《汇编语言程序设计》大家做一个题目试编一程序,求三个带符号字数据中的最大值,并将最大值存入MAX字单元中。
设三个带符号数分别在三个字变量X、Y、Z中存储。
合肥学院计算机科学与技术系程序如下: DATA 何立新《汇编语言程序设计》 DATA CODE START: MOV MOV SEGMENT X DW Y DW Z DW MAX DW ENDS SEGMENT 00ABH –5 200 ? CMP AX , Z JG EXIT L2: MOV AX, Z JMP EXIT L1: CMP AX,Z JLE L2 ;X>Z? ASSUME DS:DATA,CS:CODE AX,DATA DS,AX EXIT:MOV MAX,AX MOV AH,4CH INT 21H MOV CMP JG MOV AX,X AX,Y L1 AX,Y ;Y>Z?;X>Y? CODE END ENDS START
合肥学院计算机科学与技术系何立新《汇编语言程序设计》第五章作业
P209 5.1, 5. 2, 5. 3 交电子档,每人建立一个文件夹,命名为:学号-姓名。
由学习委员统一收齐后,建立一个以班级命名的文件夹,压缩后发到我的邮箱:hlxinwxy@。
IBM-PC汇编语言(⑤ 循环与分支程序设计)
ch5
mov rol mov and add cmp jl add printit: mov mov int dec jnz ……
; ’0’~’9’ ASCII 30H~39H
; ’A’~’F’ ASCII 41H~46H
2013-6-27
安徽理工大学 计算机科学与技术系
李敬兆
《汇编语言》 第5章
安徽理工大学 计算机科学与技术系
李敬兆
《汇编语言》 第5章
第五章
循环与分支程序设计
ch5
2013-6-27
●
1. 2.
教学重点
掌握基本程序结构――顺序结构、循环结 构、分支结构及其汇编语言程序设计 熟悉常见程序设计问题:
数据范围判断(0~9、A~Z、a~z) 字母大小写转换; 字符串传送、比较等操作 求最大最小值、数据求和、统计字符个数 数组排序,查找,插入,删除
;------------mov bx,offset ASCII ;BX指向ASCII码表 mov al,hex ;AL取得一位16进制数,正是ASCII码表中位移
ch5
2013-6-27
安徽理工大学 计算机科学与技术系
李敬兆
《汇编语言》 第5章
例 代码转换
and al,0fh ;只有低4位是有效的,高4位清0
data ends code segment main proc far
ch5
2013-6-27
安徽理工大学 计算机科学与技术系
李敬兆
《汇编语言》 第5章
例 代码转换
assume cs:code,ds:data start:
push ds xor ax,ax push ax mov ax,data mov ds,ax
80x86汇编语言程序设计教程答案
80x86汇编语言程序设计教程答案【篇一:《80x86汇编语言程序设计》教案及答案(第二版)】汇编语言程序设计》(第2版)沈美明、温冬婵编著教案编写时间:2007年8月18日前言1. 汇编语言是计算机能提供给用户的最快而又最有效的语言,也是能够利用计算机所有硬件特性并能直接控制硬件的唯一语言。
2. 汇编语言程序设计是高等院校电子计算机硬、软件及应用专业学生必修的核心课程之一。
它不仅是计算机原理、操作系统等其它核心课程的必要先修课,而且对于训练学生掌握程序设计技术、熟悉上机操作和程序调试技术都有重要作用。
3. 本教材共有十一章,其内容安排如下:(1). 第一、二章为汇编语言所用的基础知识。
(2). 第三章详细介绍80x86系列cpu的指令系统和寻址方式。
(3). 第四章介绍伪操作、汇编语言程序格式及汇编语言的上机过程。
(4). 第五、六章说明循环、分支、子程序结构和程序设计的基本方法。
(5). 第七章说明宏汇编、重复汇编及条件汇编的设计方法。
(6). 第八章叙述输入/输出程序设计方法,重点说明中断原理、中断过程及中断程序设计方式。
(7). 第九章说明bios和dos系统功能调用的使用方法。
(8). 第十~十一章分别说明图形显示、发声及磁盘文件存储的程序设计方法,同时提供各种程序设计方法和程序实例。
附:教学参考书1. 沈美明、温冬婵编著,ibm–pc汇编语言程序设计(第2版),清华大学出版社,2001年(教材)2. 沈美明、温冬婵编著,ibm–pc汇编语言程序设计,清华大学出版社,1991年3. 沈美明、温冬婵编著,ibm–pc汇编语言程序设计—例题习题集,清华大学出版社,1991年6月4. 沈美明、温冬婵、张赤红编著,ibm–pc汇编语言程序设计—实验教程,清华大学出版社,1992年5. 周明德,微型计算机ibm pc/xt(0520系列)系统原理及应用(修订版),清华大学出版社,19916. 郑学坚、周斌,微型计算机原理及应用(第二版),清华大学出版社,19957. 王士元、吴芝芳,ibm pc/xt[长城0520] 接口技术及其应用,南开大学出版社,19908. 杨素行,微型计算机系统原理及应用,清华大学出版社,19959. 戴梅萼、史嘉权,微型计算机技术及应用—从16位到32位(第二版),清华大学出版社,199610. 张昆藏,ibm pc/xt微型计算机接口技术,清华大学出版社,199111. 孟绍光,李维星,高档微机组成原理及接口技术(80386/80486/pentium),学苑出版社,199312. 吴秀清,周荷琴,微型计算机原理与接口技术,中国科学技术大学出版社目录第 1 章基础知识 ....................................................................................................... .. (1)1.1 进位计数制与不同基数的数之间的转换 (1)1.2 二进制数和十六进制数的运算 ....................................................................................................... .. (2)1.3 计算机中数和字符的表示 ....................................................................................................... . (3)1.4 几种基本的逻辑运算 ....................................................................................................... (3)第 2 章 80x86计算机组织 ....................................................................................................... . (4)2.1 80x86微处理器 ....................................................................................................... . (4)2.2 基于微处理器的计算机系统构成 ....................................................................................................... . (4)2.3 中央处理机 ....................................................................................................... . (5)2.4 存储器 ....................................................................................................... (6)2.5 外部设备 ....................................................................................................... .. (7)第 3 章 80x86的指令系统和寻址方式 ....................................................................................................... .. (8)3.1 80x86的寻址方式 ....................................................................................................... (8)3.2 程序占有的空间和执行时间 ....................................................................................................... . (10)3.3 80x86的指令系统 .......................................................................................... .. (10)第 4 章汇编语言程序格式 ....................................................................................................... .. (26)4.1 汇编程序功能 ....................................................................................................... . (26)4.2 伪操作 ....................................................................................................... . (26)4.3 汇编语言程序格式 ....................................................................................................... .. (30)4.4 汇编语言程序的上机过程 ....................................................................................................... .. (33)第 5 章循环与分支程序设计 ....................................................................................................... . (35)5.1 循环程序设计 ....................................................................................................... . (35)5.2 分支程序设计 ....................................................................................................... . (36)5.3 如何在实模式下发挥80386及其后继机型的优势 (36)第 6 章子程序结构 ....................................................................................................... .. (37)6.1 子程序的设计方法 ....................................................................................................... .. (37)6.2 子程序的嵌套 ....................................................................................................... . (38)6.3 子程序举例 ....................................................................................................... .. (38)第 7 章高级汇编语言技术 ....................................................................................................... .. (39)7.1 宏汇编 ....................................................................................................... . (39)7.2 重复汇编 ....................................................................................................... . (40)7.3 条件汇编 ....................................................................................................... . (41)第 8 章输入/输出程序设计 ....................................................................................................... . (42)8.1 i/o设备的数据传送方式 ....................................................................................................... .. (42)8.2 程序直接控制i/o方式 ....................................................................................................... . (43)8.3 中断传送方式 ....................................................................................................... . (43)第 9 章 bios和dos中断 ....................................................................................................... . (46)9.1 键盘i/o ....................................................................................................... .. (46)9.2 显示器i/o ....................................................................................................... . (48)9.3 打印机i/o ....................................................................................................... . (49)9.4 串行通信口i/o ....................................................................................................... .. (50)第 10 章图形与发声系统的程序设计 ....................................................................................................... ........... 51 10.1 显示方 (51)10.2 视频显示存储器 ....................................................................................................... .................................. 51 10.3 ega/vga图形程序设计 ....................................................................................................... .................... 52 10.4 通用发声程序 ....................................................................................................... ...................................... 53 10.5 乐曲程序 ....................................................................................................... . (54)第 11 章磁盘文件存取技术 ....................................................................................................... ........................... 55 11.1 磁盘的记录方式 ....................................................................................................... .................................. 55 11.2 文件代号式磁盘存取 ....................................................................................................... .......................... 56 11.3 字符设备的文件代号式i/o ....................................................................................................... ................ 57 11.4 bios磁盘存取功能 ....................................................................................................... .. (58)附录:《ibm—pc汇编语言程序设计》习题参考答案 ............................................................................... 59 第一章.第二章.第三章.第四章.第五章.第六章.第七章.第八章.第九章.第十章.第十一章. 习题 ....................................................................................................... ................. 59 习................. 60 习题 ....................................................................................................... ................. 61 习题 ....................................................................................................... ................. 74 习题 ....................................................................................................... ................. 79 习题 ....................................................................................................... ................. 97 习题 ....................................................................................................... ............... 110 习题 ....................................................................................................... ............... 117 习题 ....................................................................................................... ............... 122 习题 ....................................................................................................... ............... 125 习题 ....................................................................................................... (136)错误!未指定书签。
第五章 循环与分支程序
8
单分支程序设计
例2:计算AX的绝对值 SUB ax, 0 jge nonneg ;条件满足(AX≥0)? neg ax ;条件不满足,求补 nonneg: mov result, ax ;条件满足 ;
9
单分支程序设计
例3:将AX中存放的无符号数除以2,如果是奇数, 则加1后除以2 test ax,01h ;测试AX最低位 jz even1 ;最低位为0:AX为偶数 add ax,1 ;最低位为1:AX为奇数,需要加1 even1:rcr ax,1 ;AX←AX÷2
分析题意,确定算法。找出合理的算法与适当的数据 结构 根据算法画出流程图 根据流程图编写程序 上机调试程序
汇编语言程序的结构组成
顺序结构 分支结构 循环结构 子程序的结构
4
《汇编语言》 汇编语言》
5.2 分支程序
目标
分支程序的结构及设计
双分支程序的结构及设计 多分支程序的结构及设计 单分支程序的结构及设计
算法
二分查找 地址址表实现多分支
6
分支程序的结构
分支程序
分支程序根据条件是真或假决定执行与否 判断的条件是各种指令,如SUB、CMP、TEST等执行后 形成的状态标志 转移指令Jcc和JMP可以实现分支控制
分支程序的结构形式
单分支 双分支 多分支
7
单分支程序设计
例1:计算X-Y的绝对值 mov ax,X sub ax,Y jns nonneg ;条件满足(X-Y≥0)? neg ax ;条件不满足,求补 nonneg: mov result,ax ;条件满足
11
双分支程序设计
例2:寄存器AL中是字母Y或y,则令AH=0;否则 令AH=-1 cmp al,’Y’ ;AL是大写Y否? jz next ;是,转移 cmp al,’y’ ;AL是小写y否? jz next ;是,转移 mov ah,-1 ;不是Y或y,AH=-1,结束 jmp done ;一定要跳过另一个分支体 next:mov ah,0 ;是Y或y,AH=0,结束 done:...
汇编第5章循环与分支程序设计26页
DO-UNTIL 结构
初始化:设置循环的初始状态 循环体:循环的工作部分及修改部分 控制条件:计数控制
特征值控制 地址边界控制
例:把 BX 中的二进制数以十六进制的形式显示在屏幕上
BX
1 2 3 4
……
mov rotate: mov
rol mov and add cmp jl add printit: mov mov int dec jnz ……
ax, n array_head-2, 0ffffh si, 0
array_end [si], ax insert bx, array_end [si] array_end [si+2], bx si, 2 short compare
array_end [si+2], ax
x
array_head
array_end
( ( 0×10)+1 )×10+2 )×10+5
exit:
jmp newchar ……
例:从键盘接收十六进制数并存入 BX
1af
…… mov bx, 0
31 61 66
newchar: mov ah, 1
;键盘输入
int 21h
sub al, 30h
jl exit
; <0退出
cmp al, 10
程序结构:
顺序结构
循环结构
分支结构
子程序结构
… 复合结构:多种程序结构的组合
编制汇编语言程序的步骤:
(1) 分析题意,确定算法 (2) 根据算法画出程序框图 (3) 根据框图编写程序 (4) 上机调试程序
1. 循环程序设计
初始化
初始化
80x86汇编语言程序设计
80x86汇编语言程序设计80x86汇编语言程序设计是一门专门研究如何使用汇编语言在80x86架构的计算机上编写程序的学科。
80x86架构是Intel公司开发的一种微处理器架构,它包括了8086、80286、80386、80486等处理器,以及后来的Pentium系列。
汇编语言是一种低级语言,它与机器语言非常接近,通常用于编写性能要求极高的程序或者进行底层系统开发。
汇编语言基础汇编语言的指令与机器指令一一对应,但使用助记符来代替二进制代码,使得程序更加易于编写和理解。
汇编语言的基本元素包括指令、寄存器、内存地址和立即数。
- 指令:是汇编语言的基本操作单位,用于执行特定的操作,如数据传输、算术运算、逻辑运算等。
- 寄存器:是CPU内部的存储单元,用于快速存取数据。
80x86架构有多个寄存器,包括通用寄存器、段寄存器、指令指针寄存器等。
- 内存地址:是存储在RAM中的数据的位置,汇编语言可以通过内存地址访问和操作数据。
- 立即数:是指令中直接给出的数值,不需要通过寄存器或内存地址访问。
汇编语言指令80x86汇编语言提供了丰富的指令集,用于执行各种操作。
以下是一些基本的指令类型:- 数据传输指令:如MOV(移动数据)、PUSH(将数据压入堆栈)、POP(从堆栈中弹出数据)等。
- 算术指令:如ADD(加法)、SUB(减法)、MUL(乘法)、DIV(除法)等。
- 逻辑指令:如AND(逻辑与)、OR(逻辑或)、NOT(逻辑非)、XOR (逻辑异或)等。
- 控制流指令:如JMP(无条件跳转)、JE(等于时跳转)、JNE(不等于时跳转)、LOOP(循环)等。
汇编程序结构一个典型的汇编程序包括以下部分:1. 程序声明:声明程序的名称和起始点。
2. 数据定义:定义程序中使用的数据和常量。
3. 代码段:包含程序的指令和逻辑。
4. 堆栈段:用于存储临时数据和调用函数时的参数。
5. 常量段:定义程序中使用的常量。
6. 外部引用:引用其他程序或库中的代码和数据。
总汇编语言循环分支程序设计
总汇编语言循环分支程序设计简介总汇编语言是一种低级语言,用于编写计算机的机器指令。
循环和分支结构是编写程序时经常使用的控制结构。
本文将介绍总汇编语言中循环和分支结构的设计和实现,并给出一些示例代码来帮助读者更好地理解。
循环结构循环结构允许我们重复执行一段代码,直到满足特定条件为止。
在总汇编语言中,有两种常用的循环结构:计数器控制循环和条件控制循环。
计数器控制循环计数器控制循环中,我们使用一个计数器来确定循环执行的次数。
下面是一个示例代码片段,展示了如何使用计数器控制循环:MOV CX, 5 ; 设置循环次数为5L1:; 循环体代码; ...LOOP L1 ; 循环次数减1,如果不为0,则跳转到标签L1继续循环在上面的代码中,我们使用MOV指令将值5赋给CX寄存器,作为循环次数。
然后,我们使用LOOP指令在每次循环结束后将CX寄存器的值减1,并检查其是否为0。
如果不为0,则跳转到标签L1处,继续执行循环体代码。
条件控制循环条件控制循环中,我们使用一个条件来确定循环是否继续执行。
总汇编语言提供了多个指令来实现条件判断,例如CMP、JMP、JE等。
以下是一个示例代码片段,展示了如何使用条件控制循环:MOV CX, 10 ; 设置循环次数L1:; 循环体代码; ...DEC CX ; 循环次数减1CMP CX, 0 ; 比较循环次数与0JNE L1 ; 如果循环次数不为0,则跳转到标签L1继续循环在上面的代码中,我们使用MOV指令将值10赋给CX寄存器,作为循环次数。
然后,在每次循环结束后,我们使用DEC指令将CX寄存器的值减1,并使用CMP指令与0进行比较。
如果循环次数不为0,则使用JNE指令跳转到标签L1处,继续执行循环体代码。
分支结构分支结构允许我们在特定条件下选择不同的执行路径。
在总汇编语言中,我们可以使用条件判断指令(如CMP、JMP、JE等)来实现分支结构。
单一条件分支单一条件分支结构中,根据特定条件的真假选择不同的执行路径。
[计算机]IBM-PC汇编语言程序设计
sub3
PROC 、、 RET ENDP
PROC 、、 RET ENDP
注意返回DOS语句位置
code ENDS END begin
h
9
5.1 循环程序设计
5.1.1 循环程序的结构形式
开始
初始化
循环的初始状态
循环体
循环的工作部分及修改部分
控制条件
计数控制 特征值控制 地址边界控制
ADD AL, 30H ;转变为数字的ASCII
CMP AL, 3aH ;大于3aH, 则应转变
JL print
;为数字0~9的ASCII
ADD AL, 07H ;为字母A~F的ASCII
print: MOV DL,AL ;送 ASCII字符到DL
MOV AH, 2 ;显示DL中的字符
INT 21H
datarea ends
mov cx,0 mov bx,addre mov ax,bx again: test ax,0ffffh jz exit jns shift inc cx shift: shl ax,1 jmp again exit: mov count,cx ret
h
16
例5.4 将正数n插入一个已整序的字数组的正确位置。
循环体 循环条件判断? N
Y
直到型循环 (直到条件成立退出循环)
h
6
分支结构形式
Y N
两个分支
、、、 CMP AL, BL JG great
AL≤BL处理
JMP exit great: AL>BL处理 exit: 、、、
、、、
h
7
N Y
Y
三个分支
分支结构形式
大学_《微型计算机原理及应用》(吴宁著)课后习题答案下载
《微型计算机原理及应用》(吴宁著)课后习题答案下载《微型计算机原理及应用》(吴宁著)内容提要目录第1章计算机基础1.1 数据、信息、媒体和多媒体1.2 计算机中数值数据信息的表示1.2.1 机器数和真值1.2.2 数的表示方法——原码、反码和补码1.2.3 补码的运算1.2.4 定点数与浮点数1.2.5 BCD码及其十进制调整1.3 计算机中非数值数据的信息表示1.3.1 西文信息的表示1.3.2 中文信息的表示1.3.3 计算机中图、声、像信息的表示1.4 微型计算机基本工作原理1.4.1 微型计算机硬件系统组成1.4.2 微型计算机软件系统1.4.3 微型计算机中指令执行的基本过程 1.5 评估计算机性能的主要技术指标1.5.1 CPU字长1.5.2 内存储器与高速缓存1.5.3 CPU指令执行时间1.5.4 系统总线的传输速率1.5.5 iP指数1.5.6 优化的内部结构1.5.7 I/O设备配备情况1.5.8 软件配备情况习题1第2章 80x86/Pentium微处理器2.1 80x86/Pentium微处理器的内部结构 2.1.1 8086/8088微处理器的基本结构2.1.2 80386CPU内部结构2.1.3 80x87数学协处理器2.1.4 Pentium CPU内部结构2.2 微处理器的主要引脚及功能2.2.1 8086/8088 CPU引脚功能2.2.2 80386 CPU引脚功能2.2.3 Pentium CPU引脚功能2.3 系统总线与典型时序2.3.1 CPU系统总线及其操作2.3.2 基本总线操作时序2.3.3 特殊总线操作时序2.4 典型CPU应用系统2.4.1 8086/8088支持芯片2.4.2 8086/8088单CPU(最小模式)系统 2.4.3 8086/8088多CPU(最大模式)系统 2.5 CPU的工作模式2.5.1 实地址模式2.5.2 保护模式2.5.3 虚拟8086模式2.5.4 系统管理模式2.6 指令流水线与高速缓存2.6.1 指令流水线和动态分支预测2.6.2 片内高速缓存2.7 64位CPU与多核微处理器习题2第3章 80x86/Pentium指令系统3.1 80x86/Pentium指令格式3.2 80x86/Pentium寻址方式3.2.1 寻址方式与有效地址EA的概念 3.2.2 各种寻址方式3.2.3 存储器寻址时的段约定3.3 8086/8088 CPU指令系统3.3.1 数据传送类指令3.3.2 算术运算类指令3.3.3 逻辑运算与移位指令3.3.4 串操作指令3.3.5 控制转移类指令3.3.6 处理器控制类指令3.4 80x86/Pentium CPU指令系统3.4.1 80286 CPU的增强与增加指令 3.4.2 80386 CPU的增强与增加指令 3.4.3 80486 CPU增加的指令3.4.4 Pentium系列CPU增加的指令 3.5 80x87浮点运算指令3.5.1 80x87的数据类型与格式3.5.2 浮点寄存器3.5.3 80x87指令简介习题3第4章汇编语言程序设计4.1 程序设计语言概述4.2 汇编语言的程序结构与语句格式 4.2.1 汇编语言源程序的框架结构4.2.2 汇编语言的语句4.3 汇编语言的伪指令4.3.1 基本伪指令语句4.3.2 80x86/Pentium CPU扩展伪指令 4.4 汇编语言程序设计方法4.4.1 程序设计的基本过程4.4.2 顺序结构程序设计4.4.3 分支结构程序设计4.4.4 循环结构程序设计4.4.5 子程序设计与调用技术4.5 模块化程序设计技术4.5.1 模块化程序设计的特点与规范4.5.2 程序中模块间的关系4.5.3 模块化程序设计举例4.6 综合应用程序设计举例4.6.1 16位实模式程序设计4.6.2 基于32位指令的实模式程序设计 4.6.3 基于多媒体指令的实模式程序设计 4.6.4 保护模式程序设计4.6.5 浮点指令程序设计4.7 汇编语言与C/C 语言混合编程4.7.1 内嵌模块方法4.7.2 多模块混合编程习题4第5章半导体存储器5.1 概述5.1.1 半导体存储器的分类5.1.2 存储原理与地址译码5.1.3 主要性能指标5.2 随机存取存储器(RAM)5.2.1 静态RAM(SRAM)5.2.2 动态RAM(DRAM)5.2.3 随机存取存储器RAM的应用5.3 只读存储器(ROM)5.3.1 掩膜ROM和PROM5.3.2 EPROM(可擦除的PROM)5.4 存储器连接与扩充应用5.4.1 存储器芯片选择5.4.2 存储器容量扩充5.4.3 RAM存储模块5.5 CPU与存储器的典型连接5.5.1 8086/8088 CPU的'典型存储器连接5.5.2 80386/Pentium CPU的典型存储器连接 5.6 微机系统的内存结构5.6.1 分级存储结构5.6.2 高速缓存Cache5.6.3 虚拟存储器与段页结构习题5第6章输入/输出和中断6.1 输入/输出及接口6.1.1 I/O信息的组成6.1.2 I/O接口概述6.1.3 I/O端口的编址6.1.4 简单的I/O接口6.2 输入/输出的传送方式6.2.1 程序控制的输入/输出6.2.2 中断控制的输入/输出6.2.3 直接数据通道传送6.3 中断技术6.3.1 中断的基本概念6.3.2 中断优先权6.4 80x86/Pentium中断系统6.4.1 中断结构6.4.2 中断向量表6.4.2 中断响应过程6.4.3 80386/80486/Pentium CPU中断系统6.5 8259A可编程中断控制器6.5.1 8259A芯片的内部结构与引脚6.5.2 8259A芯片的工作过程及工作方式 6.5.3 8259A命令字6.5.4 8259A芯片应用举例6.6 82380可编程中断控制器6.6.1 控制器功能概述6.6.2 控制器主要接口信号6.7 中断程序设计6.7.1 设计方法6.7.2 中断程序设计举例习题6第7章微型机接口技术7.1 概述7.2 可编程定时/计数器7.2.1 概述7.2.2 可编程定时/计数器82537.2.3 可编程定时/计数器82547.3 可编程并行接口7.3.1 可编程并行接口芯片8255A7.3.2 并行打印机接口应用7.3.3 键盘和显示器接口7.4 串行接口与串行通信7.4.1 串行通信的基本概念7.4.3 可编程串行通信接口8251A7.4.3 可编程异步通信接口INS82507.4.4 通用串行总线USB7.4.5 I2C与SPI串行总线7.5 DMA控制器接口7.5.1 8237A芯片的基本功能和引脚特性 7.5.2 8237A芯片内部寄存器与编程7.5.3 8237A应用与编程7.6 模拟量输入/输出接口7.6.1 概述7.6.2 并行和串行D/A转换器7.6.3 并行和串行A/D转换器习题7第8章微型计算机系统的发展8.1.1 IBM PC/AT微机系统8.1.2 80386、80486微机系统8.1.3 Pentium及以上微机系统8.2 系统外部总线8.2.1 ISA总线8.2.2 PCI局部总线8.2.3 AGP总线8.2.4 PCI Express总线8.3 网络接口与网络协议8.3.1 网络基本知识8.3.2 计算机网络层次结构8.3.3 网络适配器8.3.4 802.3协议8.4 80x86的多任务保护8.4.1 保护机制与保护检查8.4.2 任务管理的概念8.4.3 控制转移8.4.4 虚拟8086模式与保护模式之间的切换 8.4.5 多任务切换程序设计举例习题8参考文献《微型计算机原理及应用》(吴宁著)目录本书是普通高等教育“十一五”国家级规划教材和国家精品课程建设成果,以教育部高等学校非计算机专业计算机基础课程“基本要求V4.0”精神为指导,力求做到“基础性、系统性、实用性和先进性”的统一。
80x86汇编语言程序设计 概述及解释说明
80x86汇编语言程序设计概述及解释说明1. 引言1.1 概述在计算机科学领域中,汇编语言是一种与计算机硬件直接交互的低级语言。
它通过使用特定的指令集和对应的操作码,与硬件进行通信和控制。
80x86汇编语言是一种针对Intel 8086微处理器系列的汇编语言。
本文将介绍80x86汇编语言程序设计的基本概念、语法规则以及开发环境与工具。
1.2 文章结构本文将按照如下结构进行介绍:- 引言部分(当前部分)将提供关于文章内容和结构的总体说明。
- 在第二部分中,我们将概述汇编语言的基本概念,并详细介绍80x86架构。
- 第三部分将重点介绍程序开发环境与工具,包括常用的编译、链接和调试工具,并提供搭建开发环境的指南。
- 第四部分将涵盖80x86汇编语言的基本概念和常用语法指南,包括数据类型和寻址方式、寄存器和标志位、以及指令集和汇编指令格式等内容。
- 第五部分我们将通过程序设计实例分享一些技巧,包括简单程序示例及解释、循环结构及优化技巧分享,以及数组与字符串处理技巧。
- 最后,在结论部分将总结回顾本文的主要内容,并对80x86汇编语言程序设计在未来的发展提出展望,同时引出一些问题供读者思考。
1.3 目的本文的目的是为读者提供一个全面且系统性的80x86汇编语言程序设计概述与解释说明。
通过阅读本文,读者将了解到80x86汇编语言的基本概念和语法规则,并掌握相关开发环境和工具的使用。
同时,通过实例和技巧分享,读者能够加深对80x86汇编语言程序设计的理解,并应用于实际项目中。
我们希望读者能够通过本文学习到更多关于80x86汇编语言程序设计方面的知识,并在日后的学习与工作中能够灵活运用这些知识。
2. 80x86汇编语言程序设计概述2.1 汇编语言简介汇编语言是一种低级的计算机编程语言,它使用助记符来代表计算机的机器指令。
与高级编程语言相比,汇编语言更接近计算机底层硬件的操作,可以对计算机进行更细粒度的控制和优化。
(完整版)(整理)《80x86汇编语言程序设计》教案及答案.
(完整版)(整理)《80x86汇编语言程序设计》教案及答案.《汇编语言程序设计》教案附:习题参考答案《IBM-PC汇编语言程序设计》(第2版)沈美明、温冬婵编著教案编写时间:2007年8月18日前言1.汇编语言是计算机能提供给用户的最快而又最有效的语言,也是能够利用计算机所有硬件特性并能直接控制硬件的唯一语言。
2.汇编语言程序设计是高等院校电子计算机硬、软件及应用专业学生必修的核心课程之一。
它不仅是计算机原理、操作系统等其它核心课程的必要先修课,而且对于训练学生掌握程序设计技术、熟悉上机操作和程序调试技术都有重要作用。
3.本教材共有十一章,其内容安排如下:(1).第一、二章为汇编语言所用的基础知识。
(2).第三章详细介绍80x86系列CPU的指令系统和寻址方式。
(3).第四章介绍伪操作、汇编语言程序格式及汇编语言的上机过程。
(4).第五、六章说明循环、分支、子程序结构和程序设计的基本方法。
(5).第七章说明宏汇编、重复汇编及条件汇编的设计方法。
(6).第八章叙述输入/输出程序设计方法,重点说明中断原理、中断过程及中断程序设计方式。
(7).第九章说明BIOS和DOS系统功能调用的使用方法。
(8).第十~十一章分别说明图形显示、发声及磁盘文件存储的程序设计方法,同时提供各种程序设计方法和程序实例。
附:教学参考书1.沈美明、温冬婵编著,IBM–PC汇编语言程序设计(第2版),清华大学出版社,2001年(教材)2.沈美明、温冬婵编著,IBM–PC汇编语言程序设计,清华大学出版社,1991年3.沈美明、温冬婵编著,IBM–PC汇编语言程序设计—例题习题集,清华大学出版社,1991年6月4.沈美明、温冬婵、张赤红编著,IBM–PC汇编语言程序设计—实验教程,清华大学出版社,1992年5.周明德,微型计算机IBM PC/XT(0520系列)系统原理及应用(修订版),清华大学出版社,19916.郑学坚、周斌,微型计算机原理及应用(第二版),清华大学出版社,19957.王士元、吴芝芳,IBM PC/XT[长城0520] 接口技术及其应用,南开大学出版社,19908.杨素行,微型计算机系统原理及应用,清华大学出版社,19959.戴梅萼、史嘉权,微型计算机技术及应用—从16位到32位(第二版),清华大学出版社,199610.张昆藏,IBM PC/XT微型计算机接口技术,清华大学出版社,199111.孟绍光,李维星,高档微机组成原理及接口技术(80386/80486/Pentium),学苑出版社,199312.吴秀清,周荷琴,微型计算机原理与接口技术,中国科学技术大学出版社目录第 1 章基础知识 (5)1.1进位计数制与不同基数的数之间的转换 (5)1.2二进制数和十六进制数的运算 (6)1.3计算机中数和字符的表示 (7)1.4几种基本的逻辑运算 (7)第 2 章80X86计算机组织 (8)2.180X86微处理器 (8)2.2基于微处理器的计算机系统构成 (8)2.3中央处理机 (9)2.4存储器 (10)2.5外部设备 (11)第 3 章80X86的指令系统和寻址方式 (12)3.180X86的寻址方式 (12)3.2程序占有的空间和执行时间 (14)3.380X86的指令系统 (14)第 4 章汇编语言程序格式 (31)4.1汇编程序功能 (31)4.2伪操作 (31)4.3汇编语言程序格式 (35)4.4汇编语言程序的上机过程 (38)第 5 章循环与分支程序设计 (40)5.1循环程序设计 (40)5.2分支程序设计 (41)5.3如何在实模式下发挥80386及其后继机型的优势 (41)第 6 章子程序结构 (43)6.1子程序的设计方法 (43)6.2子程序的嵌套 (44)6.3子程序举例 (44)第7 章高级汇编语言技术 (46)7.1宏汇编 (46)7.2重复汇编 (47)7.3条件汇编 (48)第8 章输入/输出程序设计 (49)8.1I/O设备的数据传送方式 (49)8.2程序直接控制I/O方式 (50)8.3中断传送方式 (50)第9 章BIOS和DOS中断 (53)9.1键盘I/O (53)9.2显示器I/O (55)9.3打印机I/O (56)9.4串行通信口I/O (57)第10 章图形与发声系统的程序设计 (58)10.1显示方式 (58)10.2视频显示存储器 (58)10.3EGA/VGA图形程序设计 (59)10.4通用发声程序 (60)10.5乐曲程序 (61)第11 章磁盘文件存取技术 (62)11.1磁盘的记录方式 (62)11.2文件代号式磁盘存取 (63)11.3字符设备的文件代号式I/O (64)11.4BIOS磁盘存取功能 (65)附录:《IBM—PC汇编语言程序设计》习题参考答案 (66) 第一章.习题 (66)第二章.习题 (67)第三章.习题 (68)第四章.习题 (81)第五章.习题 (86)第六章.习题 (104)第七章.习题 (117)第八章.习题 (124)第九章.习题 (129)第十章.习题 (132)第十一章.习题 (143)第 1 章基础知识【教学目的】本章内容是本课程的基础,通过本章学习,使学生明确汇编语言程序设计的学科性质、基本内容和学习意义,掌握数制的转换、数据的编码,了解本门课程的教学要求和学习方法。
汇编-循环与分支程序设计
方法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的首字节;
80x86IBMPC及兼容计算机卷I和卷II汇编语言设计与接口技术第三版课程设计
80x86IBMPC及兼容计算机卷I和卷II汇编语言设计与接口技术第三版课程设计背景在计算机科学和工程领域内,汇编语言是一门重要的基础课程。
它是一种底层语言,通常用于编写计算机程序或者以编写高级语言程序的底层。
在此背景下,本文将讲述在80x86IBMPC及兼容计算机卷I和卷II汇编语言设计与接口技术第三版这门课程中设计的内容。
前言本文旨在介绍学习80x86IBMPC及兼容计算机卷I和卷II汇编语言设计与接口技术第三版这门课程的学生需要完成的课程设计,同时提供一些指导或建议,并将展示与该课程设计相关的示例代码。
课程设计要求学生需要设计一个小型的程序,要求包括以下要素:1.输入:程序应该从键盘上接收一个字符或字符串。
2.处理:程序应该将输入的字符或字符串进行反转。
3.输出:程序应该将反转后的字符或字符串输出到屏幕上。
实现思路在汇编语言中,字符和字符串被存储为ASCII码,每个字符对应一个8位(1字节)的整数。
反转字符或字符串的最简单方法是将其存储在内存中并将其逐个翻转。
程序的基本逻辑是这样的:1.从键盘读取字符或字符串并存储到内存中。
2.计算字符串长度。
3.反转字符串。
4.输出字符串。
代码实现以下是用NASM编写的汇编语言代码:section .datamsg db 'Please enter a string: ', 0result db 'The reverse of this string is: ', 0 buffer db 30length db 0section .bsssection .textglobal _start_start:; 输出提示消息,并读取用户输入mov eax, 4mov ebx, 1mov ecx, msgmov edx, 23int 0x80mov eax, 3mov ebx, 0mov ecx, buffermov edx, 30int 0x80; 计算字符串长度mov esi, buffermov edi, esixor eax, eaxloop1:cmp byte[edi], 0je loop2inc eaxinc edijmp loop1loop2:mov length, eaxdec edi; 反转字符串xor esi, esimov eax, lengthloop3:cmp esi, eaxjae loop4mov bl, byte[buffer+esi]mov byte[buffer+esi], byte[edi]mov byte[edi], blinc esidec edijmp loop3loop4:; 输出结果mov eax, 4mov ebx, 1mov ecx, resultmov edx, 28int 0x80mov eax, 4mov ebx, 1mov ecx, buffermov edx, 30int 0x80; 退出程序mov eax, 1xor ebx, ebxint 0x80以上代码分为三个部分:1..data:在该部分中定义需要使用的字符串和缓冲区变量。
IBM-PC汇编语言程序设计5.ppt课件
;buff数组下标 ;是不是$ ;是,结束读 ;取串地址
;取串中字符 ;指向下一字符 ;是不是$ ;是,zf=1,转移 ;与’0’比较 ;<‘0’,不计数 ;与’9’比较 ;>’9’,不计数 ;计数
23
练习5.11:测试一字符串是否存在数字,若存在,置CL第5 位置1,否则置0
data segment string db 'abcqdefghijklmnopqrs'
;不是,zf=0退出 ;置标志flag=1
;al是空格? ;是,zf=1,退出
;不是,保存 ;数组索引加1
20 a b c d e f 20
flag= 0 1
jz exit成立
19
5.1.3 多重循环程序设计 基本方法与单重循环相同,但要注意: 1、分别考虑各重循环的控制条件及其程序实现,相互之间
again: mov al, string[si] cmp al,30h jb goon cmp al,39h ja goon or cl,20h jmp exit
main proc far
assume cs:prognam
start:
push ds
sub ax,ax
push ax
mov ax,data
mov ds,ax
lea bx,buff ;取缓冲地址
input: mov ah,01 ;从键盘读串
int 21H
;存入al中
mov [bx],al ;保存字符
JMP exit less: AL<0处理
JMP exit great:
AL>0处理 exit: 、、、
……
8
子程结构形式
1.多处调用完成同一功能的子程:
80X86汇编语言电子教案(5-分支程序及发挥386优势)
循环结构思路采用冒泡排序算法使用双重循环内层循环每次比较相邻的两个数据次序不对则交换外层循环控制内层循环次数以及负责内层循环的初始化5将首地址为字的数组从大到小实现排序多重循环21循环可以嵌套多重循环的设计方法同单重循环但应分别考虑各重循环控制条件数据段部分代码段部分CX内层循环计数器也CX该程序如何解决它们冲突的循环结束条件是否可以更改分支结构可以根据不同的条件判断结果程序段从而改变程序的执行顺序实现程序分支对不同的情况进行不同的处理If Then Else Do汇编语言中程序的分支一般以条件转移指令实现结构可以采用跳跃表法实现请ARRAY 字数组中正数0负数的个数分别存放在DI SI AX 中如何比较正负如何选择转移指令如何确定寻址方式If-Then-Else 结构例在附加段中有一个按从小到大排序的的数组其首地址存放在DI 寄存器中数组中的第一个单元存放着数度在无符数要AX 如找到则使CF=0并在SI 中给出该元素在数组中的偏移地址如未找到则使CF=1If-Then-Else 结构题意DI =数组的长度在数组中查找AX找到AX 则CF=0且SI 为该元素在数组中的偏移值未找到则CF=1If-Then-Else 结构算法采用折半查找法算法描述如下长度为r 查找k 1初始化被查找数组的首尾下标low1highn2若low>high 则查找失败置CF=1程序退出否则计算中点midlow+high /23k 比较若k=r[mid]则查找成功程序结束4低半部分查找lower high mid-1返2继续5高半部分查找higherlowmid+1返2继续问题1程序是如何处理边界条件的2在查找AX 的过程中SI 为什么总是取偶数其指令在哪作用3程序中LOW_IDX 的作用是什么If-Then-Else 结构CF 04BX 的作用AX ES[DI+2]CHK_LAST1程序是如何处理边界条件的见程序2SI为什么总是取偶数其作用SI记录子表的中间元素的偏移地址因该数组为字数组3程序中的作用是什么记录子表的低端地址记录子表的高端地址4BX 的作用记录数组的首地址例试根据1从低位到高位把程序个不同的程序分支解1定义数据段地址入口表Branch_addresses segmentDo CaseProcedure_select segment Do Case 跳跃表法2程序主体寄存器相对寻址mp 1有错吗方式不同有以下实现方案2Mov bx, branch_addresses 寄存器间接寻址Do Case3基址变址寻址Mov si, 7* type branch_table1 充分利用高档机的中题意DATA11 充分利用高档机的程序实现1 充分利用高档机的1 充分利用高档机的2通用寄存器作为指针寄存器BX BP SI寄存器包括ESP 任何通用位通用寄存器除ESP注意在实模式下160存器可同时使用址寄存器时应该2 通用寄存器作为指针寄存器合法指令举例如下非法指令举例如下3个字节的字节表还有一个的字表试编制一程序把字节表中的每个数据作为字表中的高位字节部分移入字表中3程序实现33word_table[esi2]Mov word_table[esi2], ax4尽量应用新机型提供的新指令进行编程以提高程序的运行效率作业P195 5.27。
80X86汇编语言电子教案(5-循环与分支程序设计)
一汇编语言程序设计基本步骤二程序的基本结构形式顺序结构的程序执行时按语句的书写顺序依次执行转移分支和循环因此对于有先后关系的语句程序设计时其先后次序是至关重要的顺序结构一般为简单程序顺序片段会在所有程序中存在1X和位无符号数16X Y值的程序分析1如何定义数据段X Y运算结果用双字空间存储2如何实现无符号数乘法1用加法指令实现无符号数乘法23解12CSEG SEGMENT1设位无符号数写一个求表达式16X Y值的程序实现无符号数乘法1设位无符号数写一个求表达式16X Y值的程序思考是有符号数1数据段的定义是否需要改变2对于这三种指令号数乘法的实现有何不同循环是一种重复循环通常由四部分组成1初始化部分234常有两种1Do-Until由循环指令实现2由转移指令实现说明(1) 由循环指令实现循环时ECX ZF标志这时计数值调整和条件测试在循环指令中完成例如使用LOOP LOOPZ/LOOPNZ 由转移指令实现循环时通常以条件转移指令为循环控制部入口以无条件转移指令为循环体结束件控制法循环可以嵌套明确循环控制部分和调整部分防止死循环特殊循环结构在循环体内条件判断出口能有多个出口循环控制部分控制循环何时结束1循环次数已知例LOOP2循环次数已知但可能提前结束例LOOPZ/LOOPNZ3循环次数不定据具体情况而定合理选择循环控制条件是循环程序设计的关键题意屏幕显示如下2把制的形式显示在屏幕上2把制的形式显示在屏幕上分析位十六进制数码因此BX位之后加上一个数一个十六进制数码对应字母的码值算法的基本思想ASCII A~F2把制的形式显示在屏幕上程序主体rotate: 完成什么功能;0-9ASCII 30H-39H作用 ;A-F ASCII 41H-46H作用3 53将正数数组的正确位置数据段部分3 5353535算法的基本思想ARRAY_HEAD-2-1K NN循环次数已知但可能提前结束代码段部分1数组中元素与插入值的比较指令在何处2控制循环结束的指令在哪里3边界条件如何体现功能3将正数数组的正确位置4试编制一程序从键盘输入一行字符要求第一个键入的字符必须是空格如不是则退出是则开始接收键入的字符并顺序存放在首地址为BUFFER的缓冲区中空格符不存入直到接收到第二个空格符时退出程序题意C空格是第一个字符是空格符是空格符代码段部分LEA BXMOV FLAG0NEXT MOV AH01HINT21HFLAG01HFOLLOWALEXITFLAG1 FOLLOWCMP ALEXIT[BX]EXIT 1判定第一个接收字符的指令语句在哪里2循环结束条件是什么循环结构思路采用冒泡排序算法使用双重循环内层循环每次比较相邻的两个数据次序不对则交换外层循环控制内层循环次数以及负责内层循环的初始化5将首地址为字的数组从大到小实现排序多重循环21循环可以嵌套多重循环的设计方法同单重循环但应分别考虑各重循环控制条件数据段部分代码段部分CX 内层循环计数器也CX 该程序如何解决它们冲突的循环结束条件是否可以更改作业P175。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ax,data
ds,ax ; 把数据段段地址送ds
ax,number ; 把number送ax
ax,0
; (ax)=0?
finish
; 为零则退出
ax,1
; 把ax左移1位
compa
; cf为0则跳转
one
; cf为1则one加1
compa
; 循环
ax,4c00h
21h
; 返回DOS
start
例:从键盘接收十进制数并存入 BX
第5章 循环与分支程序设计
• 【课前思考】 1. 编制一个汇编语言程序分哪几步? 2. 循环程序有哪两种基本结构?由几部分
组成? 3. 设计算法时对可能出现的边界情况如何
考虑? 4. 如何设置逻辑尺? 5. 什么是起泡排序算法? 6. 如何理解数组排序算法中采用的折半查
找法? 7. 如何使用跳跃表法实现CASE结构?
【难重点】 • 循环控制条件的选择。 • 考虑循环算法时注意可能出现的边界情况。 • 静态地预置逻辑尺。动态地修改标志位。 • 多重循环程序设计时应分别考虑各重循环的控
制条件及其程序实现,相互之间不能混淆。另 外,应该注意在每次通过外层循环再次进入内 层循环时,初始条件必须重新设置
• 起泡排序算法是多重循环程序设计中的一种常 用方法
ax, n array_head-2, 0ffffh si, 0
array_end [si], ax insert bx, array_end [si] array_end [si+2], bx si, 2 short compare
array_end [si+2], ax
x
array_head
【学习指南】
• 掌握汇编编程的四个步骤至关重要。
学会正确分析理解题意并确定合适的数 据结构及算法、画程序流程框图、选取正 确有效的指令编写程序、最后应当掌握运 用调试手段进行调试。
• 学习多重循环程序设计前应熟练掌握单层 循环程序设计的各种实现方法及实现细节, 如对可能出现的边界情况的处理等。
• 学习起泡排序算法、折半查找法、跳跃表 法之前,应首先理解传统实现方法。
; ’0’~’9’ ASCII 30H~39H ; ’A’~’F’ ASCII 41H~46H
• 例5.2 统计字单元number中二进制数位值 为1的个数,统计结果存放在变量one中。
统计1的个数,只能逐位进行测试。如 果被测数据为0,则不必进行统计。否则可 采用移位操作,判断移到CF标志中的结果 来累计1的个数。使用左移指令,每移一位 低位补0,所以测试数据变为0,就可结束 统计。这是一个先判断,后执行的循环程 序,而且循环次数是不定的。
1. 循环程序设计
初始化
初始化
控制条件 N
Y
循环体
DO-WHILE 结构
循环体 N 控制条件
Y
DO-UNTIL 结构
初始化:设置循环的初始状态 循环体:循环的工作部分及修改部分 控制条件:计数控制
特征值控制 地址边界控制
例:把 BX 中的二进制数以十六进制的形式显示在屏幕上
BX
1 2 3 4
……
data segment
number dw 1669H
one
db 0
data ends
code start: compa:
finish: code
segment assume
mov mov mov cmp jz shl jnc inc jmp mov int ends end
cs:code, ds:data
( ( 0×10)+1 )×10+2 )×10+5
exit:
jmp newchar ……
• 例5.3 将正数N插入一个已整序的字数组的正 确位置。该数组的首地址和末地址分别为 ARRAY_HEAD和ARRAY_END,其中所有 数均为正数且已按递增的次序排列。 由于数组的首地址和末地址都是已知的, 因此数组长度是可以确定的。但是,这里只 要求插入一个数,并不一定要扫描整个数组, 所以可以用找到应插入数的位置作为循环的 结束条件。此外,为空出要插入数的位置, 其前的全部元素都应前移一个字(即向地址 增大的方向移动一个字,这里的前后是指程 序运行的方向为前,反之则为后)。所以算 法上应该从数组的尾部向头部查找,可逐字 取出数组中的一个数K与N作比较
• 数组排序算法中可以采用折半查找法来提高查 找效率。
• CASE结构可以使用跳跃表法实现。
循环程序设计 分支程序设计
程序结构:
顺序结构
循环结构
分支结构
子程序结构
… 复合结构:多种程序结构的组合
编制汇编语言程序的步骤:
(1) 分析题意,确定算法 (2) 根据算法画出程序框图 (3) 根据框图编写程序 (4) 上机调试程序
例:将正数 n 插入一个已整序的正数字数组
x
dw
array_head dw
array_end dw
n
dw
? 3,5,15,23,37,49,52,65,78,99 105 32
…… mov mov mov compare: cmp jle mov mov sub jmp insert: mov ……
array_end
n
-1 3 5 15 23 37 49 52 65 78 99 105 32
125
……
mov newchar: mov
int sub jl cmp jg cbw
bx, 0 ah, 1 21h al, 30h exit al, 9 exit
31 32 35
;键盘输入
; <0退出 ; >9退出
xchg mov mul xchg add
ax, bx cx, 10 cx ax, bx bx, ax
mov rotate: mov
rol mov and add cmp jl add printit: mov mov int dec jnz ……
ch, 4 cl, 4 bx, cl al, bl al, 0fh al, 30h al, 3ah printit al, 7h dl, al ah, 2 21h ch rotate
• 【学习目标】
• 了解并掌握循环程序的构造方法,尤其是对 循环控制条件的设置以及可能出现的边界情 况的考虑。
• 掌握起泡排序算法这种多重循环程序设计中 的常用方法。交换标志位的设置在此算法中 更能提高效率。
• 学会在数组排序算法中采用折半查找法来提 高查找效率。学会使用跳跃表法实现CASE结 构。