汇编语言程序结构

程序的基本结构分为顺序、分支、循环、子程序

一、顺序结构

顺序结构程序是最简单的也是最基本的一种程序结构形式。这种结构的程序有程序的开头顺序的执行直到程序结束为止,执行过程中没有任何分支。

例:用查表的方法将一位十六进制数转换为与它相应的ASCII码

DATA	SEGMENT
		TABLE 	DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H	
				DB 41H,42H,43H,44H,45H,46H					
		NUMBER 	DB 8
		ASCII 	DB ?				;数据定义
DATA 	ENDS
CODE 	SEGMENT
		ASSUME CS:CODE, DS:DATA
START: 	MOV AX, DATA
		MOV DS, AX					;数据加载
		MOV BX, OFFSET TABLE
		MOV AL, NUMBER   
		XLAT						;换码指令
		MOV  ASCII, AL
		MOV  AH, 4CH
		INT  21H					;返回
CODE 	ENDS
		END START		 

2、分支结构

可以事先把各种可能出现的情况和处理的方法写在程序里,然后由计算机自动做出判断,并跳转或调用相应的程序处理。

特点:其运行方向是向前的,再确定的条件下,只能执行多个分支中的一个分支。

分支结构的分类
在这里插入图片描述(1)双分支结构
求a、b、c三个数中的最大值,并将其存入max单元。
在这里插入图片描述

Data 	segment
		a dw 64
		b dw 9
		c dw 30
		max dw ?
Data 	ends
Stack 	segment
		db 100 dup(?)
Stack 	ends
Code 	segment
		assume cs:code,ds:data,ss:stack
start:	mov ax,data
		mov ds,ax
		mov ax,a
		cmp ax,b
		ja q1 
		mov ax,b
q1: 	cmp ax,c
		jg q2
		mov ax,c
q2: 	mov max,ax
		mov ah,4ch
		int 21h
code ends
		end start

(2)多分支结构
是有若干个条件,每一个条件对应一个基本操作。分支程序就是判断产生的条件,哪个条件成立,就执行哪个条件对应操作的程序段。也就是说,从若干分支中选择一个分支执行。

三、循环结构

需要多次重复执行相同的或相似的功能

1、循环程序结构
(1)初始化部分:设置循环执行的初始化状态。
(2)循环体部分:需要多次重复执行的部分。
(3)循环控制部分:用于控制循环体的执行的次数。循环体每次执行后,应该修改循环条件,是循环能够在适当的时候终止执行。

2、循环控制方法
(1)计数控制法
对于已知的循环程序次数,一般采取计数控制法来控制循环。CX 寄存器作为循环计数器。
【例1】设有两个长度为8个字节的无符号数分别存放在以NUM1、NUM2为首地址的连续的内存单元中,将两个数相加,并将结果存入SUM内存单元中。
【分析】8个字节可以当成4个字来运算,用循环带进位加4次即可。

SHUJU 	SEGMENT
		NUM1  DQ  1234506A812D778FH
		NUM2  DQ  3E543289A566398CH
		SUM   DQ  ?
SHUJU	ENDS
DAIMA	SEGMENT
		ASSUME  CS:DAIMA,DS:SHUJU
KAISHI:	MOV  AX,SHUJU
		MOV  DS,AX   	
		LEA  BX,NUM1   
		LEA  SI,NUM2
		LEA  DI,SUM   
		MOV  CX,4
		CLC
JIXU:	MOV AX,WORD PTR [BX]
		ADC AX,WORD PTR [SI]
		MOV WORD PTR [DI],AX
		ADD BX,2
		ADD SI,2
		ADD DI,2
		LOOP JIXU
		MOV AH,4CH
		INT 21H
DAIMA 	ENDS
		END KAISHI

(2)条件控制法
循环次数未知,知道结束时的条件。
【例2】编写程序完成求1+2+3+……N的累加和,直到累加和超过1000为止。统计被累加的自然数的个数送CN单元,累加和送SUM。
【分析】用寄存器处理比较快速。因为结果要求送两种数,可分别用AX、BX操作。

DATA 	SEGMENT
		SUM  DW  ?
		CN   DW  ?
DATA	ENDS
CODE	SEGMENT
		ASSUME  CS:CODE,DS:DATA
START:	MOV  AX,DATA
		MOV  DS,AX   	;初始化
		MOV  AX,0    	;0送AX
		MOV  BX,0    	;0送BX
LP: 	INC  BX      	;BX加1
		ADD  AX,BX  	;求累加和
		CMP  AX,1000	;条件控制
		JBE  LP    		;≤1000转
		MOV  SUM,AX
		MOV  CN,BX  	;送结果
		MOV  AH,4CH
		INT  21H     	;返回DOS
CODE    ENDS 
		END  START

(3)混合控制法
嵌套多种控制循环。

四、子程序

主程序:往往要调用子程序或处理中断, 暂停主程序,执行子程序或中断服务程序。
子程序:子程序又称为过程。在一个实际程序中,有些操作要执行多次,把要重复执行(subroutine)操作编为子程序。也常把一些常用的操作标准化、通用化成子程序。

模块化程序设计方法按照各部分程序所实现的不同功能把程序划分成多个模块,各个模块在明确各自的功能和相互间的连接约定后,就可以分别编制和调试程序,最后再把他们连接起来,形成一个大程序。
子程序结构是模块化程序设计的基础

调用子程序时需保留内容:

① 调用子程序:
将CALL下条指令地址即IP值保留下来(8086中段寄存器CS和指令指针IP),才能保证子程序执行完后准确返回主程序继续执行。
② 执行子程序时:
通常用到内部寄存器,执行结果会影响标志位,必须在调用子程序之前将现场保护起来。
③ 子程序嵌套或子程序递归(自调自):
保留许多信息,而且保证正确返回(且后进先出)。后保留先取出原则(即LIFO-LAST In First out)。
发布了113 篇原创文章 · 获赞 109 · 访问量 11万+

猜你喜欢

转载自blog.csdn.net/weixin_42109012/article/details/102707457