Welcome

首页 / 软件开发 / 汇编语言 / 汇编基础:顺序、分支与循环程序设计

汇编基础:顺序、分支与循环程序设计2013-05-28一个算法用程序设计语言的语句有序地组合在一起加以描述,其组合方式称为程序的控制结构或简称为程序结构。程序的基本结构形式有顺序结构、分支结构和循环结构。

一、顺序结构

顺序结构是最简单的,也是最基本的程序结构形式,这种结构形式的程序的最大特点就是程序运行时从开始到结尾一直是按照编写指令的顺序执行,且每条指令仅执行一次,具有顺序结构的程序或者程序段,成为顺序程序。

我们拿一个简单的程序来说明汇编的顺序程序设计。

例:设两个字存储变量X和Y, 编程实现这两个变量的交换。

分析:由于存储单元之间不能够直接进行数据交换,所以利用通用寄存器AX来作为交换的中介。我在这里给出一个代码范例:

DATASEGMENTX DW1032HY DW2043HDATAENDSSTACK1SEGMENT PARA STACKDW 20H DUP (0)STACK1ENDSCODESEGMENTASSUME CS:CODE, DS:DATA, SS:STACK1BEGIN:MOV AX, DATAMOV DS, AXMOV AX, XXCHGAX, YMOV X, AXMOV AH, 4CHINT 21H CODEENDSEND
代码分析:前面一部分是对数据以及堆栈的定义,这里我就不再多说了,我们从BEGIN开始,因为对于MOV来说,不能够直接将DATA作为源操作数,DS作为目的操作数,所以要通过一个通用寄存器来实现两者之间的赋值,MOV   AX, X意为将X的值先保存在AX中,而后执行XCHG AX, Y将AX与Y的值进行交换,此时Y里面存储的便是X的值,AX中存储的Y的值。紧接着MOV X, AX再将AX中存储的Y的值赋予X,即实现X与Y值得交换。

二、分支程序设计

实现分支程序需要有相应的转移指令的支持,而转移指令又分为无条件转移指令与有条件转移指令两类,在有条件转移指令中,不同的条件往往是通过标志寄存器中条件标志的不同状态反映的。因而,分支程序设计中一个至关重要的问题是如何根据标志寄存器中标志位的不同状态,配合使用合适的转移指令实现程序的转移。关于转移指令请看我的另一篇文(http://yiluohuanghun.blog.51cto.com/3407300/940123)。

还是拿例子来说吧:X为存储单元中的有符号字数据,编写程序实现计算其绝对值,并保存到原处。

分析:当X>=0时,X的绝对值就是它本身,否则利用求负指令将X变号,并放回要原处,下面我给出了一个程序,大家可以参考下:

DATASEGMENTX DW0F874HDATAENDSSTACK1SEGMENT PARASTACKDW20H DUP(0)STACK1ENDSCODESEGMENTASSUMECS:CODE, DS:DATA, SS:STACK1BEGIN:MOV AX, DATAMOV DS, AXMOV AX, XTESTAX, AXJNS DONENEG X ;负指令NEG对X取反DONE: MOV AH, 4CHINT 21HCODEENDSEND BEGIN
程序分析:TESTAX, AX;此处目的是为了重置标志寄存器各位的值,以便于下一条指令JNS使用标志寄存器