基本汇编语言程序设计.ppt
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
②执行指令jmp tabel[bx],设bx=02
则IP← [tabel+bx]
即IP← 2500H
③CS:2500H为分支Disp2的入口,CPU即执行分 支DISP2
多分支
14
例4.4 使用地址表实 现多分支。8个分支的标 号分别为disp1,disp2…
在代码段有:
disp1:mov dx,…
disp2:mov …
设disp1的偏移地址为 2300h,disp2的偏移地址
为2500h……。 在数据段有:
tabel
tabel dw disp1,disp2,…
多分支
例4.2/2
6
mov al,byte ptr qvar[2] mov byte ptr qvar[3],al mov al,byte ptr qvar[1] mov byte ptr qvar[2],al mov al,byte ptr qvar[0] mov byte ptr qvar[1],al mov byte ptr qvar[0],0
Y= 0 当 X=0 -1 当 X<0
X≥0? N
Y=-1
Y
X=0? N
Y=1
实际是双分支的组合。
Y Y=0
多分支
13
例2:判断AL各位的值,D0=1,转移到L0;D1=1,转移 到L1;D2=1,转移到L2……
y D0=1
N y
D1=1
N
y D2=1
N
分支L0 分支L1 分支L2
也可认为是双分
支的组合,但为简 化编程,实现左图 的分支结构可以在 数据段设置转移地 址表,如例题4.4
12 34 56 78 87 65 43 21h (移位前)
(移位后) 34 56 78 87 65 43 21 00h 返回第四章
例4.2/3
7
4.2 分支程序设计 条件转移指令Jcc和无条件转移指令JMP用于实现程序 的分支结构,JMP不测试条件,Jcc可根据条件是否成立 决定转移到指定位置或不转移而顺序执行后续指令。由 于Jcc不支持条件表达式,而是以当前标志位的状态为 条件,故Jcc之前一定要安排设置标志位的指令,如加 减法、比较、测试等指令。基本分支类型分为单分支和 双分支。
15
︰ ︰ disp8
disp7 disp6
disp5
disp4 disp3
2500H 2300H
相对tabel 的偏移量
E C A 8 6 4 2 0
disp1
转入分支:按输入的数字转入不同分支
①按输入的数字求出分支相对tabel的偏移量: disp1为0,disp2为2,disp3为4…,如输入数字2,则偏 移量为(2-1)×2=2,将求出的偏移量存入bx。
.model small
.startup
.stack
mov ax,x
.data
add ax,y
X dw 5
add ax,z
Y dw 6
mov w,ax
Z dw 7
.exit 0
W dw ?
end
.code
例4.1
4
例4.2 设有一个64位数据,将它整个左移8位。
00
例4.2/1
12 qvar[7] 34 qvar[6] 56 qvar[5] 78 qvar[4] 87 qvar[3] 65 qvar[2] 43 qvar[1] 21 qvar[0]
2
4.1 顺序程序设计
指令按程序中的书写顺序逐条执行,称为顺序程序。 除非编程解决非常简单的问题,顺序程序并不多见, 但是顺序程序往往是复杂程序结构的一部分,如分支 结构的一个分支,循环结构的循环体等。
4.1顺序程序设计(e)
返回第四章 3
例4.1:设有3个字变量x,y和z,求出三者之和,结果 存入字变量w。
5
.model small
.stack .data Qvar dq 1234567887654321h .code mov al,byte ptr qvar[6] mov byte ptr qvar[7],al mov al,byte ptr qvar[5] mov byte ptr qvar[6],al mov al,byte ptr qvar[4] mov byte ptr qvar[5],al mov al,byte ptr qvar[3] mov byte ptr qvar[4],al
JMP
Y 条件成立?
N 分支语句体1
分支语句体2
后续操作
双分支
11
双分支举例:显示BX的最高位。
shl bx,1 jc one mov dl,’0’
;转分支体 ;分支体1
mov dl,’0’ shl bx,1
jmp next
;转后续操作
jnc next
One: mov dl,’1’
;分支体2
next: mov ah,2
4.2分支程序设计
8
1. 单分支类型
对同一个问题,根据选择的条件不同,单分支结 构的流程图有两种画法,对应的程序也有两种编法。 如计算AX中的有符号数的绝对值。
单分支
9
Y AX≥0 ?
N 求补指令
保存百度文库果 cmp ax,0 jge noneg neg ax
Noneg: mov result,ax
;后续操作
mov dl,’1’
int 21h
next:mov ah,2
3.分支程序的其他问题
int 21h
⑴有些双分支问题可以先假设一种情况,把双分
支改成单分支问题。如上例,先假设BX最高位为0,
在分支外准备显示0;如最高位为0,即可直接跳到后
续操作;如最高位为1才需要执行分支体。⑵⑶
双分支
12
⑵分支的嵌套形成多分支,嵌套形式多种多样。 例1:求符号函数 1 当 X>0
*****************
封面
1
第四章 基本汇编语言程序设计
4.1 顺序程序设计
4.2 分支程序设计
4.3 循环程序设计
4.4 子程序设计 4.4.1 过程定义伪指令 4.4.2 子程序的参数传递 4.4.3 子程序的嵌套、递归与重入 4.4.4 子程序的应用
本章要点及习题分析
第四章基本汇编语言程序设计
单分支
AX<0? N
Y
求补指令
JMP
保存结果
cmp ax,0 (教材有误) jnge yesneg
jmp done yesneg: neg ax Done: mov result,ax
10
2.双分支程序
两个分支都有语句 体,如何选择条件不重 要。
流程图中分支体的 位置就是程序的实际顺 序,故分支语句体1最 后一定要有一条JMP 指令,跳过语句体2, 转移到“后续操作”。
则IP← [tabel+bx]
即IP← 2500H
③CS:2500H为分支Disp2的入口,CPU即执行分 支DISP2
多分支
14
例4.4 使用地址表实 现多分支。8个分支的标 号分别为disp1,disp2…
在代码段有:
disp1:mov dx,…
disp2:mov …
设disp1的偏移地址为 2300h,disp2的偏移地址
为2500h……。 在数据段有:
tabel
tabel dw disp1,disp2,…
多分支
例4.2/2
6
mov al,byte ptr qvar[2] mov byte ptr qvar[3],al mov al,byte ptr qvar[1] mov byte ptr qvar[2],al mov al,byte ptr qvar[0] mov byte ptr qvar[1],al mov byte ptr qvar[0],0
Y= 0 当 X=0 -1 当 X<0
X≥0? N
Y=-1
Y
X=0? N
Y=1
实际是双分支的组合。
Y Y=0
多分支
13
例2:判断AL各位的值,D0=1,转移到L0;D1=1,转移 到L1;D2=1,转移到L2……
y D0=1
N y
D1=1
N
y D2=1
N
分支L0 分支L1 分支L2
也可认为是双分
支的组合,但为简 化编程,实现左图 的分支结构可以在 数据段设置转移地 址表,如例题4.4
12 34 56 78 87 65 43 21h (移位前)
(移位后) 34 56 78 87 65 43 21 00h 返回第四章
例4.2/3
7
4.2 分支程序设计 条件转移指令Jcc和无条件转移指令JMP用于实现程序 的分支结构,JMP不测试条件,Jcc可根据条件是否成立 决定转移到指定位置或不转移而顺序执行后续指令。由 于Jcc不支持条件表达式,而是以当前标志位的状态为 条件,故Jcc之前一定要安排设置标志位的指令,如加 减法、比较、测试等指令。基本分支类型分为单分支和 双分支。
15
︰ ︰ disp8
disp7 disp6
disp5
disp4 disp3
2500H 2300H
相对tabel 的偏移量
E C A 8 6 4 2 0
disp1
转入分支:按输入的数字转入不同分支
①按输入的数字求出分支相对tabel的偏移量: disp1为0,disp2为2,disp3为4…,如输入数字2,则偏 移量为(2-1)×2=2,将求出的偏移量存入bx。
.model small
.startup
.stack
mov ax,x
.data
add ax,y
X dw 5
add ax,z
Y dw 6
mov w,ax
Z dw 7
.exit 0
W dw ?
end
.code
例4.1
4
例4.2 设有一个64位数据,将它整个左移8位。
00
例4.2/1
12 qvar[7] 34 qvar[6] 56 qvar[5] 78 qvar[4] 87 qvar[3] 65 qvar[2] 43 qvar[1] 21 qvar[0]
2
4.1 顺序程序设计
指令按程序中的书写顺序逐条执行,称为顺序程序。 除非编程解决非常简单的问题,顺序程序并不多见, 但是顺序程序往往是复杂程序结构的一部分,如分支 结构的一个分支,循环结构的循环体等。
4.1顺序程序设计(e)
返回第四章 3
例4.1:设有3个字变量x,y和z,求出三者之和,结果 存入字变量w。
5
.model small
.stack .data Qvar dq 1234567887654321h .code mov al,byte ptr qvar[6] mov byte ptr qvar[7],al mov al,byte ptr qvar[5] mov byte ptr qvar[6],al mov al,byte ptr qvar[4] mov byte ptr qvar[5],al mov al,byte ptr qvar[3] mov byte ptr qvar[4],al
JMP
Y 条件成立?
N 分支语句体1
分支语句体2
后续操作
双分支
11
双分支举例:显示BX的最高位。
shl bx,1 jc one mov dl,’0’
;转分支体 ;分支体1
mov dl,’0’ shl bx,1
jmp next
;转后续操作
jnc next
One: mov dl,’1’
;分支体2
next: mov ah,2
4.2分支程序设计
8
1. 单分支类型
对同一个问题,根据选择的条件不同,单分支结 构的流程图有两种画法,对应的程序也有两种编法。 如计算AX中的有符号数的绝对值。
单分支
9
Y AX≥0 ?
N 求补指令
保存百度文库果 cmp ax,0 jge noneg neg ax
Noneg: mov result,ax
;后续操作
mov dl,’1’
int 21h
next:mov ah,2
3.分支程序的其他问题
int 21h
⑴有些双分支问题可以先假设一种情况,把双分
支改成单分支问题。如上例,先假设BX最高位为0,
在分支外准备显示0;如最高位为0,即可直接跳到后
续操作;如最高位为1才需要执行分支体。⑵⑶
双分支
12
⑵分支的嵌套形成多分支,嵌套形式多种多样。 例1:求符号函数 1 当 X>0
*****************
封面
1
第四章 基本汇编语言程序设计
4.1 顺序程序设计
4.2 分支程序设计
4.3 循环程序设计
4.4 子程序设计 4.4.1 过程定义伪指令 4.4.2 子程序的参数传递 4.4.3 子程序的嵌套、递归与重入 4.4.4 子程序的应用
本章要点及习题分析
第四章基本汇编语言程序设计
单分支
AX<0? N
Y
求补指令
JMP
保存结果
cmp ax,0 (教材有误) jnge yesneg
jmp done yesneg: neg ax Done: mov result,ax
10
2.双分支程序
两个分支都有语句 体,如何选择条件不重 要。
流程图中分支体的 位置就是程序的实际顺 序,故分支语句体1最 后一定要有一条JMP 指令,跳过语句体2, 转移到“后续操作”。