汇编语言程序设计第五章 循环与分支程序设计

合集下载

汇编语言程序设计方法

汇编语言程序设计方法

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条件为假执行分支体

汇编语言程序设计_第5章 分支循环程序设计(参考答案)

汇编语言程序设计_第5章 分支循环程序设计(参考答案)

第5章分支、循环程序设计本章要点: 转移指令的寻址方式及其执行过程,控制转移类指令的使用,分支和循环程序的设计和应用。

程序调试的方法,常见问题的程序设计方法。

一、单项选择题5.1.1条件转移是根据标志寄存器中的标志位来判断的,条件判断的标志位共有( B )位。

A. 4B. 5C. 6D. 95.1.2用一条条件转移指令一次可以实现( A )个分支。

A. 2B. 3C. 4D. N5.1.3 条件转移指令的转移范围是(A)。

A. -128~127B. 0~255C. 0~65535D. -32768~327675.1.4 设A为字变量,B为标号,下列指令中不正确的是(D)。

A. MOV AX,AB. JNZ BC. JMP [SI]D. JMP B[BX]5.1.5 下述指令中影响CF标志位的是(A)。

A. SHL AL,1B. MOV AL,1C. JC LD. JNC L5.1.6 下述指令中不影响CF标志位的是(A)。

A. INC SIB. SUB SI,0C. NEG ALD. TEST AL,15.1.7 在多重循环程序设计中,每次通过外层循环进入内层循环时,其内层循环的初始条件(B)。

A. 不必考虑B. 必须重新设置C. 必须清0D. 必须置15.1.8 当设计一个程序时,最重要的是(B)。

A. 程序的结构化B. 能使程序正常运行并实现功能C. 程序的执行速度快D. 程序占用的存储空间小*5.1.9 如果“JNC L”指令的操作码放在0040H,转移后在0020H处取下一指令的操作码,那么这条指令的位移量是(C)。

A. 1EHB. 20HC. 0DEHD. 0E0H*5.1.10 如果“JGE P”指令的操作码放在0050H,该指令的位移量是34H,执行完这条指令转移取下一条指令的偏移地址是(C)。

A. 82HB. 84HC. 86HD. 88H二、填空题5.2.1 当下面循环程序中的划线处填上一个什么数字时,执行的循环次数最多?MOV CX,____0______MOV AX,0L:INC AXLOOP L5.2.2 当两个数进行比较后,执行__JE L(JZ L)表示两数相等则转移到L。

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

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

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)

汇编语言循环程序设计

汇编语言循环程序设计

RET
HEXASC
ENDP
CODE ENDS
END START
⑵ 用伪指令方法编程:
DATA SEGMENT
HEXDATA DW 4D7EH
RESULT DB 4 DUP(?)

DATA ENDS
CODE SEGMENT
ASSUME CS:CODE;DS:DATA
STAห้องสมุดไป่ตู้T: MOV
AX, DATA
[例3] 在xx单元开始的连续单元中存放有10个无符 号数,从中找出中最大者送y• y单元。
根据题意,我们把第一个数先送入AL寄存器中, 然后将AL中的数与后面的9个数逐个进行比较。如果AL 中的数较小,则两数交换;如果AL中的数大,则不交换 。在比较过程中,AL中始终保持较大的数,这样,比较 9次后,则最大的数在AL中,最后把AL中的数(最大者 )存入yy单元。
MOV BX, [SI]
NEXT: MOV AX, BX
AND AL, 0FH
CALL HEXASC
MOV [DI], AL
INC DI
PUSH CX
MOV CX, 4
SHR BX, CL
POP CX
LOOP NEXT
LEA
MOV STD LOOP1: LODSB MOV MOV INT LOOP MOV MOV INT MOV INT
YSEG SEGMENT

CALL SUBT1
MOV AH,4CH INT 21H SUBT1 PROC FAR
YSEG ENDS

RET SUBT1 ENDP XSEG SEGMENT
2.寄存器内容的保护和恢复
通常主程序和过• 程的设计是分开的, 因而他们所使用的寄存器往往会发生冲 突。为避免冲突,应在进入过程时,将 该过程所用到的寄存器内容保护起来, 称为保护现场。而从过程返回主程序前 ,再将这些寄存器的内容恢复,称为恢 复现场。保护现场和恢复现场通常分别 用堆栈压入指令和弹出指令来实现。例 如:

第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个机器周期。

《汇编语言程序设计》(第四版)教案及答案解析

《汇编语言程序设计》(第四版)教案及答案解析

《汇编语言程序设计》教案附:习题参考答案《汇编语言程序设计》(第4版)钱晓捷主编前言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.180X86微处理器 (4)2.2基于微处理器的计算机系统构成 (4)2.3中央处理机 (5)2.4存储器 (6)2.5外部设备 (7)第 3 章 80X86的指令系统和寻址方式 (8)3.180X86的寻址方式 (8)3.2程序占有的空间和执行时间 (10)3.380X86的指令系统 (10)第 4 章汇编语言程序格式 (27)4.1汇编程序功能 (27)4.2伪操作 (27)4.3汇编语言程序格式 (31)4.4汇编语言程序的上机过程 (34)第 5 章循环与分支程序设计 (37)5.1循环程序设计 (37)5.2分支程序设计 (38)5.3如何在实模式下发挥80386及其后继机型的优势 (38)第 6 章子程序结构 (40)6.1子程序的设计方法 (40)6.2子程序的嵌套 (41)6.3子程序举例 (41)第 7 章高级汇编语言技术 (43)7.1宏汇编 (43)7.2重复汇编 (44)7.3条件汇编 (45)第 8 章输入/输出程序设计 (46)8.1I/O设备的数据传送方式 (46)8.2程序直接控制I/O方式 (47)8.3中断传送方式 (47)第 9 章 BIOS和DOS中断 (50)9.1键盘I/O (50)9.2显示器I/O (52)9.3打印机I/O (53)9.4串行通信口I/O (54)第 10 章图形与发声系统的程序设计 (55)10.1显示方式 (55)10.2视频显示存储器 (55)10.3EGA/VGA图形程序设计 (56)10.4通用发声程序 (57)10.5乐曲程序 (58)第 11 章磁盘文件存取技术 (59)11.1磁盘的记录方式 (59)11.2文件代号式磁盘存取 (60)11.3字符设备的文件代号式I/O (61)11.4BIOS磁盘存取功能 (62)附录:《IBM—PC汇编语言程序设计》习题参考答案 (63)第一章.习题 (63)第二章.习题 (64)第三章.习题 (65)第四章.习题 (79)第五章.习题 (84)第六章.习题 (104)第七章.习题 (118)第八章.习题 (125)第九章.习题 (130)第十章.习题 (134)第十一章.习题 (145)第 1 章 基础知识【教学目的】本章内容是本课程的基础,通过本章学习,使学生明确汇编语言程序设计的学科性质、基本内容和学习意义,掌握数制的转换、数据的编码,了解本门课程的教学要求和学习方法。

第五章_汇编语言程序设计基础

第五章_汇编语言程序设计基础
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除外)还要由数据传送令在 执行程序时赋值。

汇编-循环与分支程序设计

汇编-循环与分支程序设计

方法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的首字节;

深圳大学 郑海虹:《微机原理与汇编语言》课程教学大纲

深圳大学 郑海虹:《微机原理与汇编语言》课程教学大纲
掌握:中断请求、中断判优、中断响应、中断处理和中断返回的原理
掌握:中断处理程序的设计,设置和获取中断向量的方法
理解:BIOS和DOS中断调用概念和调用方法
教学目的
掌握BIOS和DOS系统功能调用。
内容提要
9.1键盘I/O
9.2显示器I/O
教学要求
掌握:BIOS与DOS的键盘中断和显示中断
教学目的
掌握基本图形操作以及图形程序设计方法,利用PC机的发声系统编写产生各种声音和乐曲的技术。
教学目的
了解8086μcpu的内部结构,存储器的实模式。
内容提要
2.180x86微处理器
2.2基于微处理器的计算机系统构成
2.3中央处理机
2.4存储器
2.5外部设备
教学要求
理解:微处理器的基本结构和工作过程
掌握;8088/8086微处理器的内部特性和功能
掌握:8088/8086微处理器的存储器组织和段寄存器的应用
教学目的
逐步熟悉和掌握汇编语言程序的格式,可以编写简单的顺序程序。
内容提要
4.1汇编程序功能
4.2伪操作
4.3汇编语言程序格式
4.4汇编语言的上机过程
教学要求掌握:Βιβλιοθήκη 编语言的上机过程,汇编语言源程序的格式
掌握:各类伪指令
教学目的
掌握汇编语言源程序的循环、分支设计方法。
内容提要
5.1循环程序设计
5.2分支程序设计
注:写明各学期教学总时数及各周学时数。
(三)主要内容
本课程主要介绍80x86计算机CPU的结构,存储器的组织方式,8086/8088计算机的寻址方式,8086/8088指令系统,80x86、Pentium增强和扩充指令,基本的汇编语言程序设计方法和技能及高级汇编语言技术。

第5章 习题及答案

第5章 习题及答案

第五章 汇编语言程序设计1、画图说明下列语句所分配的存储器空间及初始化的数据值。

难度:2(1) BYTE_VAR DB ‘BYTE’,12,-12H ,3 DUP(0,2 DUP(1,2),7) (2) WORD_VAR DW 3 DUP(0,1,2),7,-5,’BY’,’TE’,256H 答:(1) (2)07H BYTE_V AR 42H WORD_V AR 00H 00H 59H 00H FBH 54H 01H FFH 45H 00H 59H 0CH 02H 42H EEH 00H 45H 00H 00H 54H 01H 00H 56H 02H 01H 02H 01H 00H 02H 02H 07H 00H 00H 00H 01H 00H 02H 01H 01H 00H 02H 02H 07H 00H 00H 00H 01H 00H 02H 01H 01H 00H 02H 02H07H00H2、假设程序中的数据定义如下: PARTNO DW ?PNAME DB 16 DUP(?) COUNT DD ? PLENTH EQU $- PARTNO 问:PLENTH 的值为多少?他表示什么意义? 答:PLENTH 的值为22,它表示当前已分配单元空间。

《微型计算机原理》第5章习题与解答3、有符号定义语句如下:难度:2BUF DB 1,2,3,’123’EBUF DB 0L EQU EBUF-BUF问:L的值是多少?答:L的值为6;4、假设成序中的数据定义如下:难度:2LNAME DB 30 DUP(?)ADDRESS DB 30 DUP(?)CITY DB 15 DUP(?)CODE_LIST DB 1,7,8,3,2(1)用一条MOV指令将LNAME的偏移地址存入BX。

(2)用一条指令将CODE_LIST的头两个字节的内容放入SI。

(3)写一条伪指令定义符使CODE_LENGTH的值等于 CODE_LIST域的实际长度。

汇编语言程序设计复习

汇编语言程序设计复习

知识点第一章基础知识(1)正负数的补码表示, 掌握计算机中数和字符的表示;eg.假设机器字长为8位,[+3]补=00000011B,[-3]补= 11111101 H 。

十六进制数0FFF8H表示的十进制正数为65528D,表示的十进制负数为-8D。

8位二进制数被看成是带符号补码整数时,其最小值是-128,最大值是 127 。

第二章80x86计算机组织(1)中央处理机CPU的组成和80x86寄存器组,重点:专用寄存器,段寄存器eg: IP寄存器中保存的是?代码段中的偏移地址FLAGS标志寄存器中共有几位条件状态位6位,有几位控制状态位2位,标志寄存器分为哪2类?陷阱标志,中断标志。

(2)存储单元的地址和内容每一个字节单元给以一个唯一的存储器地址,称为物理地址;一个存储单元中存放的信息称为该存储单元的内容。

存储器地址的分段,(低位字节存放)低地址,(高位字节存放)高地址;实模式下逻辑地址、选择器和偏移地址;物理地址的表示段基地址加上偏移地址。

eg.如果SS=6000H,说明堆栈段起始物理地址是_____60000H___。

已知字节(00018H)=14H,字节(00017H)=20H,则字(00017H)为__1420H______。

如果(SI)=0088H,(DS)=5570H,对于物理地址为55788H的内存字单元,其内容为0235H,对于物理地址为5578AH的内存字单元,其内容为0E60H,那么执行指令LDS SI,[SI]以后,(SI)= 0235H ,(DS)= 0E60H .第三章80x86的指令系统和寻址方式与数据有关的寻址方式(立即寻址方式,寄存器寻址方式,直接寻址方式,寄存器间接寻址方式,寄存器相对寻址方式,基址变址寻址方式,相对基址变址寻址方式)和与转移地址有关的寻址方式(段内直接寻址,段内间接寻址,段间直接寻址,段间间接寻址)。

数据传送指令(通用数据传送指令、累加器专用传送指令、输入输出指令)、算术指令(加法指令、减法指令(*加减指令对4个标志位的影响[of,cf,sf,zf])、乘法指令(*乘法指令的要求:目的操作数必须是累加器)、除法指令(*被除数在累加器中,除法指令执行完以后,商和余数在?))、逻辑指令(逻辑运算指令(*XOR,AND,OR,TEST指令及指令执行后对标志位的影响)、移位指令)、串处理指令(与REP相配合工作的MOVS、STOS、LODS 指令,与REPE/REPZ和REPNE/REPNZ联合工作的CMPS、SCAS指令)、控制转移指令(无条件转移指令、条件转移指令、循环指令、子程序调用指令、中断)。

第五章 循环与分支程序设计

第五章 循环与分支程序设计
12
continue: add loop mov loop ……
2. 分支程序设计
? ? … case 1 case 2 case n case 1 case 2 case n
CASE 结构
(1) 逻辑尺控制 (2) 条件控制
IF-THEN-ELSE 结构
(3) 地址跳跃表(值与地址有对应关系的表) 地址跳跃表(值与地址有对应关系的表)
13
x(x1,x2,…… x2,……,x10) 例:有数组 x(x1,x2,……,x10) 和 y(y1,y2,……,y10), (z1,z2,…… z2,……,z10) 编程计算 z(z1,z2,……,z10) z1 = x1 z2 = x2 z3 = x3 z4 = x4 z5 = x5 z6 = x6 z7 = x7 z8 = x8 z9 = x9 + y1 + y2 - y3 - y4 - y5 + y6 - y7 - y8 + y9
3
1. 循环程序设计
初始化
初始化
N N
控制条件
Y
循环体 控制条件
Y
循环体
DO-WHILE 结构
DO-UNTIL 结构
4
初始化:设置循环的初始状态 循环体:循环的工作部分及修改部分 控制条件:计数控制
特征值控制 地址边界控制
5
例:把 BX 中的二进制数以十六进制的形式显示在屏幕上
BX
1
2 3
4je lea L: shr jnb jmp add1: add jmp continue: …… routine1: …… routine2: …… al, 0
(寄存器间接寻址) 寄存器间接寻址)
continue bx, branch_table ;逻辑右移 al, 1 逻辑右移 ;jnb=jnc add1 ;段内间接转移 word ptr[bx] bx, type branch_table L

《汇编语言》作业答案

《汇编语言》作业答案

3545233.doc 制作:江家宝《IBM—PC汇编语言程序设计》课后作业参考答案目录第一章:基础知识 ........................................................................................ 2第二章:80×86计算机组织......................................................................... 2第三章:80×86的指令系统和寻址方式..................................................... 3第四章:汇编语言程序格式........................................................................ 7第五章:循环与分支程序设计.................................................................... 9第六章:子程序结构 ................................................................................ 12第七章:高级汇编语言技术.................................................................... 20第八章:输入输出程序设计.................................................................... 22第九章:BIOS和DOS中断 (23)3545233.doc 制作:江家宝第一章:基础知识1.1、用降幂法和除法将下列十进制数转换为二进制数和十六进制数:(3) 4095 答:(3) 4095 =1111 1111 1111B=FFFH1.2、将下列二进制数转换为十六进制数和十进制数:(1) 10 1101 答:(1) 10 1101B=2DH=451.3、将下列十六进制数转换为二进制数和十进制数:(4) 1234 答:(4) 1234H=1 0010 0011 0100B=46601.4、完成下列十六进制数的运算,并转换为十进制数进行校核:(3) ABCD-FE 答:(3) ABCD-FEH=AACFH=437271.5、下列各数均为十进制数,请用8位二进制补码计算下列各题,并用十六进制数表示其运算结果。

汇编-循环与分支程序设计

汇编-循环与分支程序设计

汇编-循环与分支程序设计循环与分支程序设计----------1.引言在汇编语言中,循环和分支是编写和优化程序中常用的技术。

循环用于重复执行一段代码,而分支用于根据条件跳转到不同的代码段。

本文将介绍如何在汇编语言中实现循环和分支以及如何优化这些代码段。

2.循环程序设计2.1.while循环在汇编语言中,while循环可以使用条件跳转指令(如jmp、jz、jnz等)来实现。

以下是一个简单的while循环的汇编代码示例:.datacount db 10.codemn procmov al, 0loop_start:cmp al, countjge loop_end。

循环内容inc aljmp loop_startloop_end:。

循环结束后的代码2.2.for循环在汇编语言中,for循环可以使用计数器和条件跳转指令来实现。

以下是一个简单的for循环的汇编代码示例:.datacount db 10.codemn procmov al, 0loop_start:cmp al, countjge loop_end。

循环内容inc aljmp loop_startloop_end:。

循环结束后的代码mn endp3.分支程序设计3.1.if语句在汇编语言中,if语句可以通过条件跳转指令来实现。

以下是一个简单的if语句的汇编代码示例:.dataflag db 1.codecmp flag, 1jne else。

if语句的真正内容jmp endifelse:。

else语句的内容endif:。

if语句结束后的代码mn endp3.2.switch语句在汇编语言中,switch语句可以通过多个条件跳转指令来实现。

以下是一个简单的switch语句的汇编代码示例:.datacase db 2.codemn proccmp case, 1je case1cmp case, 2je case2jmp case_defaultcase1:。

汇编语言程序设计之循环程序

汇编语言程序设计之循环程序

汇编语言程序设计之循环程序汇编语言中的循环程序是一种重复执行一定次数的程序结构。

循环程序通常用于处理大量数据、实现排序算法等需要重复执行的任务。

下面将介绍几种常见的循环程序设计方法。

1.计数循环计数循环是一种每经过一次循环,计数器的值增加或减少一个固定量的循环程序。

以下是一个使用计数循环实现输出从1到10的循环程序的汇编代码示例:```MOVCX,10;初始化计数器为10LOOP_START:MOVAH,02H;设置系统调用功能号为02HMOVDL,'0';设置要输出的字符为'0'ADDDL,CL;将计数器的值加到字符上INT21H;调用系统调用,输出字符INCCL;计数器加1CMPCL,10;比较计数器与10JLELOOP_START;如果计数器小于等于10,继续循环```2.条件循环条件循环是一种根据一定条件决定是否继续执行循环的循环程序。

以下是一个使用条件循环实现求1到10的累加和的汇编代码示例:```MOVCX,10;初始化计数器为10MOVAX,0;初始化累加和为0LOOP_START:ADDAX,CX;将计数器的值加到累加和上DECCX;计数器减1CMPCX,0;比较计数器与0JNZLOOP_START;如果计数器不等于0,继续循环```3.外层循环和内层循环在一些情况下,需要在一个循环中嵌套另一个循环,这就是外层循环和内层循环的概念。

以下是一个使用外层循环和内层循环实现输出一个5x5的乘法表的汇编代码示例:```MOVCX,5;设置外层循环次数为5OUTER_LOOP:MOVDX,1;初始化内层循环计数器为1INNER_LOOP:MOVAX,CX;外层循环计数器值存储到AX寄存器MULDX;AX=AX*DXMOVBX,AX;结果存储到BX寄存器MOVAH,02H;设置系统调用功能号为02HMOVDL,'';设置要输出的字符为空格INT21H;调用系统调用,输出字符MOVAX,BX;将结果从BX寄存器移回AX寄存器MOVAH,02H;设置系统调用功能号为02HADDAL,'0';将数值转化为字符INT21H;调用系统调用INCDX;内层循环计数器加1CMPDX,5;比较内层循环计数器与5JLEINNER_LOOP;如果内层循环计数器小于等于5,继续内层循环MOVAH,02H;设置系统调用功能号为02HMOVDL,0AH;设置要输出的字符为换行符INT21H;调用系统调用,换行DECCX;外层循环计数器减1CMPCX,0;比较外层循环计数器与0JNZOUTER_LOOP;如果外层循环计数器不等于0,继续外层循环```以上是三种常见的循环程序设计方法的汇编代码示例。

《汇编语言程序设计》课件(上)

《汇编语言程序设计》课件(上)

课程性质与设置目的要求《汇编语言程序设计》课程是计算机专业高等教育的专业基础必修课程。

通过该课程的学习,使学生掌握汇编语言程序设计的基本方法和技术,从而加深对计算机系统的认识和理解;以有利于今后计算机相关专业课程的学习。

同时本课程作为一门面向机器硬件的软件设计技术,可以在计算机应用开发中得到应用,能够帮助学生今后从事有关计算机应用及研究工作。

本课程采用汇编程序MASM 6.0版,强调对基本指令的理解和掌握,重点介绍16位机的指令系统和程序设计技术。

要求掌握基本的编程技术,强调上机实验,熟练进行程序的调试,培养学生的动手能力。

先修课程要求:本课程的先修课程为《数字逻辑》、《高级语言程序设计》。

本课程学分为4分。

总学时数为90,其中54学时为课堂教学,36学时为上机实践。

教学手段:课堂教学运用多媒体教学手段和上机实践等相结合。

考核方法:采用笔试,结合平时成绩。

考试成绩占70%,平时成绩占30%引言:●关于本书●我们要学习本书中的哪些内容?●时间安排●平时成绩计算方法目录第一章基础知识1.1汇编语言简介1.1.1什么是汇编语言1.1.2为什么要学习汇编语言1.2计算机中数据的表示1.3计算机组织1.3.1计算机系统概述1.3.2 中央处理机CPU1.3.3 存储器1.3.4 外部设备第二章汇编语言程序实例及上机操作2.1汇编语言程序实例2.2工作环境及上机操作2.3 DEBUG主要命令2.4 常用的DOS命令2.5 几个常用的DOS系统功能调用(INT 21H)第三章指令系统和寻址方式3.1 寻址方式3.2 指令系统第四章汇编语言程序格式4.1汇编程序功能4.2 伪操作4.3 程序格式4.4 汇编语言上机第五章循环与分支程序设计5.1 循环程序设计5.2 分支程序设计第六章子程序6.1 子程序的设计方法6.2 子程序的嵌套(见书)6.3 子程序举例第七章高级汇编语言技术第一章基础知识1.1 汇编语言简介1.1.1什么是汇编语言机器语言汇编语言高级语言1.1.2为什么要学习汇编语言1.2计算机中数据的表示1.2.1 不同进位计数制及其相互转换二进制及进制十进制数: 123.6(D)=1×102+2×101+3×100+6×10 -1各位权值10k二进制数: 101101(B) = 1×25+1×23+1×22+1×20=45(D) 各位权值2k十六进制数: 5F(H)=5×161+15×160(D)各位权值16k1.2.2 二进制数、十进制数和十六进制数转换(1)二进制数转换为十进制数(按权展开)1101.1(B)=23+22+20+2-1=8+4+1+0.5=13.5(D)(2)十进制数转换为二进制数. 降幂法:(适用于数值不大的数)13.5(d)=8+4+1+0.5 =1101.1100001000001+ 0.1 1101.1★对于小数有:例1.2:N=0.8125D (降幂法)2-12-22-32-40.5 0.25 0.125 0.0625计算过程:0.8125- 0.5 =0.3125 (b1=1)0.3125- 0.25 =0.0625 (b2=1)0.0625- 0.125 <0 (b3=0)0.0625- 0.0625=0 (b4=1)N=0.8125D=0.1101B例1.4: N=0.8125D (乘2取整法)0.8125 × 2 1.6250.625 × 2 1.250.25 × 2 0.50.5 × 2 1.00.8125D =0.1101B★对于整数有:除法:(除2取余法,对整数而言)N=13 除2即二进制数去掉最右一位13/2=6 余1 (余1表明N是奇数,得到一位)6/2=3 余0 商为6即可写出1103/2=1 余11/2=0 余113(d)=1101(b)1011B = 11D1101B = 13D(3)十六进制数与二进制数转换每四位二进制数表示一位十六进制数例:0011 0101 1011 1111 3 5 B F即0011010110111111(B)= 3 5 B F(H)(4)十六进制数与十进制数转换方法同二进制数与十进制数转换,不过是基数为十六进制数所对应的权。

计算机组成原理与汇编语言程序设计

计算机组成原理与汇编语言程序设计

五、汇编语言程序设计
3.操作数:操作数表示指令助记符的操作对象。
4.注释:注释均以分号开始,它可占一行或多行,一般放在一条语句 的后面。 例:一项是含有4个字段的一条指令语句: LOP: MOV AX,0000H ;将AX清零
标号 指令助记符 操作数 注释
例:以下是含有4个字段的一条指令语句 INC CX
数据定义语句按照伪指令DB,DW和DD所确定的数据大小来给变量(或
存储单元)分配相应数量的存储单元,同时给这些存储单元预置由表达式 确定的初值。它们通常有以下几种形式: 1、数值表达式 例如:DATA数据段定义了字节、字、双字变量
五、汇编语言程序设计
DATA SEGMENT
VARB1
5.3汇编语言数据
5.3.1符号定义语句
1、等值伪指令 指令格式:符号 EQU 表达式/符号 EQU伪指令的左移是将表达式的值或表达式赋给EQU左边的符号 例:用符号标识常数、数值表达式 NUM EQU 10H COUN EQU 1234+34-67 VAR DB N令语句格式
标号:指令助记符
操作数的有无、有几个, 取决于指令助记符 翻译后,没有对 应的目标代码
指令语句的一般格式如下: 操作数 ;注释
1.标号:标号是机器指令语句存放地址的符号表示,代表该指令目标 代码的第一个字节地址,后面必须紧跟冒号“:” ,在指令语句中, 是任选字段。 2.指令助记符:指令助记符为语句的核心成分,表示了该语句的操作 类型。
五、汇编语言程序设计
例如: BUF DB 100 DUP(0)
以上语句定义了以BUF为首址,大小为100个字节,初值为0的数据存 储单元。
5.3.3数据
一、常数
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

start
;end assembly
16
5.2 分支程序设计 5.2.1 分支程序的结构形式
Y
处理1
条件满足?
N
处理2 处理1
判断条件
处理2

处理n
IF_THEN_ELSE结构
CASE结构
17
5.2.2 分支结构设计方法

一般利用条件转移指令来产生。
(1)单条件,测试某次运算结果(P88) A、ZF,0或相等:JZ(JE)、JNZ(JNE) B、SF,符号:JS、JNS C、OF,溢出:JO、JNO D、PF,奇偶位:JP、JNP E、CF,进位:JB(<)、JNAE(≯=)或JC JNB(≮)、JAE(≥)或JNC
;main part of prognam main proc far assume cs:prgnam,ds:datarea ;starting execution address start: ;set up stack for return ;save old data segment push ds ;put zero in AX sub ax,ax ;save it on stack push ax ;set ds register to current data segment ;datarea segment addr mov ax,datarea ;into DS register mov ds,ax
(COUNT1)
Y (COUNT1) -1
Y 结束
N
(COUNT1)=0?
14
以下为程序的实现:
Datarea n a Datarea segment EQU 20 dw n dup(?) ends ;define data segment
Prognam segment ;
;define code segment

5
开始
初始化循环记数值
BX循环左移一个数位 把最右边的数位转换为ASCⅡ 是 ASCⅡ A~F? Y 加上7 显示一个字符 N Y N
记数值-1 =0?
结束
返回例题
6
下面是以BIN2HEX.ASM为文件名建立的源文件
prognam main segment ;define code segment proc far assume cs:prognam ;starting execution addr ;save old data segment ;put zero in AX ;save zero on stack
1 8 16 84 32 5
2 16 84 32 8 5
3 84 32 16 8 5
13
程序的结构框图如图所示
(COUNT1)
N -1
(COUNT2) I
(COUNT1) 0 Y
开始
AI ≥ AI+1 ? N AI AI+1
I=I+1
(COUNT2) (COUNT2) -1
N
(COUNT2)=0?
2
循环程序设计过程

框图:
次数:4
初值
取一个十六进数
显示
循 环 体
循环 控制
3
次数-1 =0?
结束
取一个十六进制数
1 0 1 1 0 1 0 1 0 1 1 1 0 1 0 0

BX
B
5
7
4 B 5
5 7 4 B
7 4 B 5
4 B 5 7
B 5 7 4
7 4
4
显示十六进数字符
利用DOS功能调用(#2功能):DL←ASCII码 十六进数字符:0┅9,A┅F. ASCII码:30H┅39H,41H┅46H 算法:1,十六进数+30H 2,>39H? 3,YES 再加07H NO 不操作 4,结束
;the following instruction delete an element from the list as follows: ;(1) if the element lies at the end of the list, delete it by decreasing ; the element count by 1.
start: ;set up stack for return push ds xor ax,ax push ax :main part of prognam mov ch,4 rotate: mov cl,4 rol bx,cl mov al,bl and al,0fh add al,30h cmp al,3ah jl printit add al,7h
;number of digits ;set count to 4 bit ;left digit to right ; move to AL ;mask off left digit ;convert hex to ASCⅡ ;is it >9? ;jump if digit=0 to 9 ;digit is A to F
;set count1 ;to n-1 ;save count1 in di ;clear bx ;load a(i) into ax and compare ;with a(i+1) ;swap if ;a(i)<a(i+1) and store greater ;number ;increment index ;if not the end of a pass,repeat ;restore count1 for the either loop ;if not the final pass,repeat ;return to dos ;end of main part of prognam ;end of code segment
;if(CX)=0,delete last ele ;move one ele up in list
;point to next ele ;repeat untill all ele moved ;decrease ele count by 1 ;exit ;end of main part of prog
11
;(2)otherwise, delete the element by moving all subsequent elements up by one position. delete: next_el:
dec_cnt:
exit: del_ul
jcxz dec_cnt mov bx,es:[di] mov es:[di-2],bx add di,2 loop next_el pop di dec word ptr es:[di] ret endp
思路: 1、因为已排序,采用折半查找法以提高查找效率。 2、先取中间元素,如果相等则查找成功;如果比中间元素 大,则再取高半部的中间元素进行比较;如果比中间元素小 ,则再取低半部的中间元素进行比较。 3、重复2过程直到查找成功或最终未找到该数为止。 4、顺序查找法平均N/2次,折半法平均比较次数为log2N
7
printit: mov dl,al mov ah,2 int 21h dec ch jnz rotate ret main endp prognam ends end start
;put ASCⅡ char in DL ;display output function ;call DOS ;done 4 digits? ;not yet ;return to DOS ;end of main part of prog ;end of segment ;end of assembly
15
mov dec mov loop1: mov mov loop2: cmp jge xchg mov continue: add loop mov loop ret endp main Prognam ends end
cx,n cx di,cx bx,0 ax,a[bx] ax,a[bx+2] continue ax,a[bx+2] a[bx],ax bx,2 loop2 cx,di loop1
Back
12
多重循环程序设计

例 5.7 有一个首地址为A的N字数组,请编制一
程序使该数组中的 数按从大到小的次序排序。
我们采用冒泡排序算法从第一个字开始依次对相邻两个数进 行比较,如次序对则不做任何调整;如次序不对则这两个数交换 位置。下表表明了这种算法的例子:
序号 1 2 3 4 5 数 8 5 16 84 32 比较遍数
第五章 循环与分支程序设计
编制一个汇编语言程序的步骤如下:
1)分析题意,确定算法。 2)根据算法画出程序框图。 3)根据框图编写程序。 4)上机调试程序。
5.1 循环程序设计
循环程序可由以下三部分组成:
1)设置循环的初始状态:循环次数、指针设置、 初值。 2)循环体。 3)循环控制:修改指针、改变次数、判断条件。
B、SF∧OF=0:JNL(≮)、JGE(≥)
C、(SF∧OF)∨ZF =1:JLE(≤)、JNG(≯)
D、(SF∧OF)∨ZF =0:JNLE(≮=)、JG(>)
20
(4)测试CX或ECX的值为0转移指令(P91)
A、(CX)=0:JCXZ
B、(ECX)=0:JECXZ
21

例5.9:在附加段中,有一个按从小到大排列的无 符号数数组,其首地址放在DI寄存器中,数组中 的第一个单元存放着数组长度。在AX中有一个无 符号数,要求在数组中查找(AX),如找到,则使 CF=0,并在SI中给出该元素在数组中的偏移地址; 如未找到,则使CF=1。
18
(2)根据无符号数比较结果进行转移(P89)
相关文档
最新文档