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

合集下载

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

汇编语言第五、六章:循环与分支程序设计
②程序开始时,执行如下指令
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 返回

第5讲 循环与分支程序设计

第5讲 循环与分支程序设计

; ’0’~’9’ ASCII 30H~39H
; ’A’~’F’数 n 插入一个已整序的正数字数组
loop和[bx]的联合应用
• 计算ffff:0~ffff:b单元中的数据的和,结 果存储在dx中。 • 分析: 怎样解决这两个看似矛盾的问题? 目前的方法(在后面的课程中我们还有 别的方法)就是我们得用一个16位寄 存器来做中介。
loop和[bx]的联合应用
• 我们将内存单元中的 8 位数据赋值到 一个16位寄存器ax中,再将ax中的数据 加到dx上,从而使两个运算对象的类 型匹配并且结果不会超界。
一段安全的空间
• 在8086模式中,随意向一段内存空间写 入内容是很危险的 ,因为这段空间中 可能存放着重要的系统数据或代码。 • 比如下面的指令: mov ax,1000h mov ds,ax mov al,0 mov ds:[0],al
一段安全的空间
• 我们以前在Debug中,为了讲解上的方便, 写过类似的指令。 • 但这种做法是不合理的 ,因为之前我们并 没有论证过 1000:0中是否存放着重要的系统 数据或代码。 • 如果1000:0中存放着重要的系统数据或代码, “mov ds:[0],al” 将其改写,将引发错误。 •
在循环开始前设(bx)=0,每次循环,将bx中 的内容加1即可。
loop和[bx]的联合应用
• 分析: (续)更详细的算法描述初 始化
(ds)=0ffffh (bx)=0 (dx)=0 (cx)=12 循环12 次: s:(al)=((ds)*16+(bx)) (ah)=0 (dx)=(dx)+(ax) (bx)=(bx)+1 loops
Loop指令
• 任务3:编程计算2∧12。 分析: 2∧12=2*2*2*2*2*2*2*2*2*2*2*2,若设 (ax)=2,可计算: (ax)= (ax)*2*2*2*2*2*2*2*2*2*2*2,最 后(ax)中为2∧12的值。N*2可用N+N 实现。

汇编语言程序设计_第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。

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

第5章 循环与分支程序设计
2018/11/8
CH5
5.1 循环程序设计
循环结构一般是根据某一条件判断为真
或假来确定是否重复执行循环体
循环指令和转移指令可以实现循环控制
2018/11/8
CH5
● 循环程序结构形式
初始化
初始化
控制条件
Y
N N
循环体 控制条件
Y
循环体
DO-WHILE 结构
DO-UNTIL 结构
2018/11/8
2018/11/8
CH5
(3)循环控制条件 循环次数已知,可以使用: ●LOOP指令实现,但是必须注意: 循环移位指令中使用CL寄存器作为 移位次数寄存器,LOOP 指令的循 环次数隐含在CX寄存器中,避免这 两者之间的冲突。
● 条件跳转指令实现。
LOOP AGAIN DEC 计数器 JNZ AGAIN
xor ax,ax push ax X dw 5 1.简单的加减法运算,直接用加减法指令实现 mov ax,data Y dw 6 mov ds,ax 2. 数据存储方式 : 字节、字、双字、四字等 W dw 7 mov ax,Y Z dw ? 3.寻址方式:直接寻址 sub ax,X data ends add ax,W mov Z,ax code segment ret
2018/11/8
CH5
开始 初始化CX=0 Y
N
Y=0? N
Y=-? Y
CX←CX+1 Y逻辑左移1位
;移位
; ’0’~’9’ ASCII 30H~39H
; ’A’~’F’ ASCII 41H~46H
2018/11/8
CH5
方法2 (条件跳转指令)
rotate:

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

汇编语言设计 教案 第五章  循环与分支程序设计
➢ DO-UNTIL结构则是先执行后判断的结构,它先 执行循环体然后再判断控制条件,若满足控制 条件则继续执行循环体,否则退出循环。这两 种结构一般可以随习惯使用,但在初始循环次 数可能为0的情况下则必须使用DO-UNTIL结构。
5.1.2 循环程序设计方法
无论使用哪种循环结构,循环程序一般应包括 以下几部分: ➢ 循环初始化。它包括设置循环次数的初始值、地址 指针的初始设置等。 ➢ 循环体。这是循环工作的主体,包括要重复执行的 操作,以及循环的修改部分。修改部分包括地址指 针的修改、循环控制条件的修改等。 ➢ 循环控制部分。它是控制循环的关键,判断循环条 件满足与否。
特别要注意循环入口和循环次数的正确设置、 地址指针及循环控制条件的修改等。否则会得不到 期望的结果。
DATA
ENDS
这是一个初始循环次数不定、根据条件控制循环的例子
算法:先使用字符串指令进行块 查找,若找到则显示“Duplication!
MOV DX,0
例5.1 试编 MOV CL,10
分析:采用折半查找法可以提高对有序表的查表效率。
JMP SHORT EXIT
制一个程序, MOV BX,TAB[SI] ;元素前移为插入的数字腾位置 MOV TAB[SI-2],BX
ADD SI,2
;修改地址指针
把BX寄存 JMP SHORT COMPARE
A: MOV AH,9H
LEA DX,PRT
器中的二进 INT 21H
JMP EXIT
B: MOV TAB[SI-2],AX ;插入元素
CN
DW ($-BUFFER)/2 ;元素个数
MAX
DW ?
;存放最大数单元MINDW ?;存放最小数单元

第5章 顺序、分支和循环程序设计

第5章 顺序、分支和循环程序设计

表5-4
带符号数的条件转移指令
其中:A、B为两个有符号数
助记 符


转移条件
实例描述
JZ/JE
结果为零/相等时转移
ZF=1
A=B
JNZ JNE

结果不为零/不相等时转 移
ZF=0
A≠B
JG / JNLE
JGE JNL /
大于/不小于且不等于时 转移
大于等于/不小于时转移
SF=OF ZF=0
SF=OF ZF=1 SF≠OF ZF=O SF≠OF ZF=1
结果不为零/不相等时转移
JS
JNS JO JNO JP/JPE
结果为负数时转移时转移
结果为正数时转移 有溢出时转移时转移 无溢出时转移 偶校验时转移
SF=1
SF=0 0F=1 0F=0 PF=1
JNP/JPO
奇校验时转移
PF=0
假如:比较两数X和Y是否相等,相等执行程序段L1,不等执行程序段L2。 则: ┇ MOV AX,Y CMP AX,X ;Y-X结果不送目的操作数 JZ L1 ;相等时ZF=1转到L1 ┇ ;L2程序段,不等时ZF=0执行L2程序段 ┇ L1 : ┇ ;L1程序段 ┇ 或: ┇ MOV AX,Y CMP AX,X ;Y-X结果不送目的操作数 JNZ L2 ;不等时ZF=0转到L2 ┇ ┇ ┇ ┇ ;L1程序段,相等时ZF=1执行L1程序段 ;L2程序段
33循环程序设计循环程序设计共共66学时学时编写程序的一般步骤编写程序的一般步骤分析问题分析问题算法设计画出流程图算法设计画出流程图根据流程图编写源程序根据流程图编写源程序程序的调试与修改程序的调试与修改顺序程序设计在设计这种程序中顺序程序设计在设计这种程序中没有分支和循环没有分支和循环只要遵照算法按步骤顺序写出相应的指令即可只要遵照算法按步骤顺序写出相应的指令即可

第五章 循环与分支程序

第五章  循环与分支程序

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:...

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

第五章 循环与分支程序设计
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
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

assume cs:code,ds:data
start:
push ds
第五章循环与分支程序设计
xor ax,ax push ax mov ax,data mov ds,ax mov ax,X add ax,Y add ax,Z mov W,ax ret main endp code ends end start
开始
初始化循环 计数值
BX循 环 左 移 一个数位
把最右面的数 位 转 换 为 ASCII
是 ASCII
N
A~F?
Y
加上7
(3)循环控制条件分析
●因为循环次数已知,可以使用LOOP指令实现 ,但是必须注意:由于循环移位指令中使用CL 寄存器作为移位次数寄存器,而LOOP 指令的 循环次数隐含在CX寄存器中,因此,必须注意 这两者之间的冲突。
第五章 循环与分支程序设计
第五章循环与分支程序设计
学习重点
1. 掌握基本程序结构(顺序结构、循环结构、 分支结构)及其汇编语言程序设计方法
2. 熟悉常见程序设计问题:
➢ 数据范围判断(0~9、A~Z、a~z) ➢ 字母大小写转换; ➢ 字符串传送、比较等操作 ➢ 求最大最小值、数据求和、统计字符个数 ➢ 数组排序,查找,插入,删除
;02号DOS功能调用 ;显示一个ASCII码字符
第五章循环与分支程序设计
5.1 循环程序设计
➢ 循环结构一般是根据某一条件判断为 真或假来确定是否重复执行循环体
➢ 循环指令和转移指令可以实现循环控 制
第五章循环与分支程序设计
● 循环程序结构形式
初始化
初始化
控制条件
N
循环体
Y
循环体
N
控制条件件
Y
例00:查表法,实现一位16进制数转换为ASCII码显示
data segment
ASCII db 30h,31h,32h,33h,34h,35h
db 36h,37h,38h,39h ;0~9的ASCII码
db 41h,42h,43h,44h,45h,46h;A~F的ASCII码
hex db 0bh ;任意设定一个待转换的一位16进制数
第五章循环与分支程序设计
程序结构
(1) 顺序结构 (2) 循环结构
(3)分支结构 (4) 子程序结构 …
(5)复合结构:多种程序结构的组合
第五章循环与分支程序设计
编写汇编语言程序的步骤
(1) 分析题意,确定算法 (2) 根据算法画出程序框图 (3) 根据框图编写程序 (4) 上机调试程序
第五章循环与分支程序设计
●除了可以使用LOOP指令之外,还可以使用条 件跳转指计 数 值 =0? Y 结束
LOOP AGAIN
第五章循环与分支程序设计
DEC 计数器 JNZ AGAIN
方法1 (LOOP)
……
mov cx, 4
;初始化
rotate: push cx
mov cl, 4
rol bx, cl
BX
1
2 3
4
第五章循环与分支程序设计
分析:(1)程序结构的确定 由题意应该把BX的内容从左到右每4位为一组在屏幕上显示出来,显然
这可以用循环结构来完成,每次显示一个十六进制数位,因而循环次数是已 知的,计数值为4。
(2)循环体的构成(算法确定) 循环体应该包括:二进制到所显示字符的ASCII之间的转换,以及每个字
mov al, bl
and al, 0fh
add al, 30h ; ’0’~’9’ ASCII 30H~39H
cmp al, 3ah
jl printit
add al, 7h
; ’A’~’F’ ASCII 41H~46H
printit: mov dl, al
mov ah, 2
int 21h
pop cx
loop rotate
……
第五章循环与分支程序设计
方法2 (条件跳转指令)
……
mov ch, 4
;初始化
rotate: mov cl, 4
rol bx, cl
mov al, bl
and al, 0fh
add al, 30h ; ’0’~’9’ ASCII 30H~39H
cmp al, 3ah
jl printit
mov al,hex
;AL 取 得 一 位 16 进 制 数 , 正 是 ASCII 码 表 中 位 移
and al,0fh xlat mov dl,al mov ah,2 int 21h ret main endp code ends end start
;只有低4位是有效的,高4位清0 ;换码:AL←DS:[BX+AL] ;入口参数:DL←AL
data ends
code segment
main proc far
assume cs:code,ds:data
start:
push ds
xor ax,ax
push ax
mov ax,data
mov ds,ax
;-------------
mov bx,offset ASCII
;BX指向ASCII码表
add al, 7h
; ’A’~’F’ ASCII 41H~46H
printit: mov dl, al
mov ah, 2
int 21h
dec ch
jnz rotate
符的显示。 需要了解相关知识:◆字符和其ASCII码之间的关系?
“0”~“9” 30H~39H, “A”~”F” 41H~5AH ◆如何显示一个字符? (a)将显示字符的ASCII码放入DL寄存器;(b)将AH的内容置为2(功能号) ;(c)执行INT 21H(DOS 功能调用)。
第五章循环与分支程序设计
5.0 顺序程序设计
➢顺序程序完全按指令书写的前后顺 序执行每一条指令,是最基本、最 常见的程序结构
➢一般纯粹的顺序结构的程序设计较 少。
第五章循环与分支程序设计
例0
WX+Y+Z
data segment
X dw 5
Y dw 6
Z dw 7
W dw ?
data ends
code segment
main proc far
DO-WHILE 结构
DO-UNTIL 结构
第五章循环与分支程序设计
● 循环程序结构说明
初始化: 设置循环的初始状态
循环体: 循环的工作部分及修改部分
控制条件:计数控制(LOOP) 特征值控制(LOOPZ/LOOPNZ/
条件跳转指令)
第五章循环与分支程序设计
例1:把 BX 中的二进制数以十六进制的形式显示在屏幕上 如:1011 0010 1111 1010 B B2FAH
相关文档
最新文档