分析问题
寻找解决问题的思路、方法、算法
描述算法
编写程序实现算法
设计测试数据和预期计算结果
上机调试程序
第四章汇编语言程序设计的基本方法
程序设计的解题基本步骤如下:
顺序、分支、循环程序和子程序的设计是汇编语言程序设计的基本内容。
在此基础上还要掌握汇编语言程序设计的基本方法和技巧,和EXE格式程序的结构和特点、多模块程序设计方法等。
程序的几种基本结构
程序的基本结构有三种:顺序结构、分支结构、循环结构
顺序结构:按语句的书写顺序依次执行
分支结构:根据不同的条件判断结果,执行不同的程序段,实现程序分支。
循环结构:由条件是否成立,确定是否重复执行某段程序。
顺序程序设计
例4-1 (p 77) 查表求2的整次幂(2n,n=0,1,…,14)
分析:
表地址=array+2*n 就是存放2n的单元地址
20 21 22 23 24 ……. 214
字编号: 0 1 2 3 4 14
array
字节编号: 0 1 2 3 4 5 6 7 8 9 28 29
注意:2n在表中(即数组array中)的存放规律,n正好是2n在表中的存放字单元的顺序号。
例: (array+2*3)= (array+6)= 23 =8
分支程序设计
程序的分支通过转移指令来实现,因此转移指令的操作应该是能够改变程序执行顺序。
转移指令
转移指令分为两类:无条件转移指令、条件转移指令
1 ) 无条件转移指令
指令格式:JMP 标号
无条件转移到标号指向的指令继续执行
无条件转移
段内转移
段间转移
直接寻址
间接寻址
(不影响任何标志位)
(1) 段内转移(段内直接寻址)
方法:
修改CS:IP
段内转移只需修改IP实现转移: 使IP 标号所在行的指令
即: (IP)=标号所在行指令的偏移地址
段内转移分为三种形式:
段内直接短转移
格式:JMP SHORT 标号
操作:(IP)←(IP)+D(8位偏移量)
段内短转移
例: JMP SHORT NEXT
NEXT: MOV AL, 4
MOV指令
D=3 0H
(IP)
B0
04
…
…
…
存储器
代码段
EB
30
0152H
0120H
0121H
0153H
0122H
JMP指令
下一条要执行的指令
段内短转移范围:
以JMP指令为中心的-128~+127字节内
根据JMP指令的操作
转移目的地址为: (IP)+D=0122H+30H= 0152H (IP)
操作:(IP)←(IP)+D(8位偏移量)
段内直接近转移(段内直接寻址)
格式:JMP NEAR PTR 标号
操作:(IP)←(IP)+D(16位偏移量) -32768~+32767字节范围
例4-3 段内直接近转移举例
JMP NEAR PTR EXIT
EXIT: POP AX
两种转移指令都可以写成简化形式(省略SHORT和NEAR):
JMP 标号
汇编时如何确定标号的类型?
位移量D=
8位段内短转移指令
> 8位段内直接近转移指令
段内间接转移(段内间接寻址)
格式:JMP WORD PTR OPR
操作:(IP)←(OA)
OA是由OPR的寻址方式确定的寄存器或存储单元(字类型), OA存的是目的转移地址。
例: 段内间接转移
JMP BX ;(IP)←(BX)=转移地址
间接寻址转移指令的特点是指令中没有直接给出标号
(2)段间转移
实现段间转移时,转移目的地址由段地址和偏移地址构成,因此段间转移需要同时修改CS和IP。
段间直接转移(段间直接寻址)
格式:JMP FAR PTR 标号
操作:(IP)←标号的偏移地址
(CS)←标号所在段的段地址
例4-5 段间直接转移
CODEl SEGMENT
JMP FAR PTR NEW_SEG
CODEl ENDS
CODE2 SEGMENT
NEW_SEG: MOV AX,BX
CODE2 ENDS
JMP [BX] ;(IP)←((BX)) =转移地址
34100H
32000H
XX
XX
…
…
…
CODE2
CODE1
操作码
21
00
32
NEW_SEG
00
…
EA
JMP指令
IP
CS
设NEW_SEG标号的地址为3200H:2100H
执行JMP指令后,程序流程控制将从CODE l代码段 CODE2代码段,实现段间转移操作。
段间间接转移(段间间接寻址)
段间直接转移
格式:JMP DW
04 汇编语言程序设计的基本方法 来自淘豆网www.taodocs.com转载请标明出处.