在学习高级语言程序设计时,我们知道了程序的三大主要结构:顺序结构、分支结构和循环结构。在汇编语言的源程序也同样有此三大结构,所不同的是它们的表现形式不同。用高级语言编写程序时,由于不使用“转移语句”而使这三种结构清晰明了。
但在汇编语言的源程序中,很难不使用“转移语句”(除非是一些只有简单功能的程序),有时甚至会有各种各样的“转移语句”。由于存在这些转移语句,就使得:汇编语言源程序的基本结构显得不太明确。如果源程序的编写者思维混乱,编写出来的源程序在结构上就会显得杂乱无章,反之,如果编写者条理清晰,安排的操作井然有序,那么,编写出来的程序在结构上就会一目了然。
总之,不论是高级语言的源程序,还是汇编语言的源程序,其程序的三大基本结构也还是万变不离其宗的。顺序结构是最简单的程序结构,程序的执行顺序就是指令的编写顺序,所以,安排指令的先后次序就显得至关重要。另外,在编程序时,还要妥善保存已得到的处理结果,为后面的进一步处理直接提供前面的处理结果,从而避免不必要的重复操作。
例6.3 编写程序段,完成下面公式的计算(其中:变量X和Y是32位有符号数,变量A,B和Z是16位有符号数)。
A←(X-Y+24)/Z的商,B←(X-Y+24)/Z的余数
解:
DATA1 SEGMENT X DD ? Y DD ? Z DW ? A DW ? B DW ? … DATA1 ENDS CODE1 SEGMENT … MOV AX, X MOV DX, X+2 ;用(DX:AX)来保存32位变量X的数值 SUB AX,Y SBB DX, Y+2 ;(DX:AX)-(Y+2:Y) ADD AX, 24D ADC DX, 0 ;(DX:AX)+24 IDIV Z MOV A, AX MOV B, DX … CODE1 ENDS
在编程序时,常常需要交换二变量之值。假设需要交换值的变量名为:var1和var2,临时增加的变量名为temp。常用的算法如下:
temp = var1 var1 = var2 var2 = temp
例6.4 假设有二个字变量word1和word2,编写程序段实现交换其值的功能。
解:
方法1:用汇编语言指令简单“直译”上面的 交换数据方法
DATA1 SEGMENT … word1 DW ? word2 DW ? temp? DW ? … DATA1 ENDS CODE1 SEGMENT … MOV AX, word1 MOV temp, AX ;上二语句实现语句“temp=word1” MOV AX, word2 MOV word1, AX? ;上二语句实现语句“word1=word2” MOV AX, temp MOV word2, AX? ;上二语句实现语句“word2=temp” … CODE1 ENDS
这种方法虽然也能完成功能,但显然其不能充分利用汇编语言的特点,程序效率很低。
方法2:用汇编语言指令的特点来直接编译
DATA1 SEGMENT … word1 DW ? word2 DW ? … DATA1 ENDS CODE1 SEGMENT … MOV AX, word1 XCHG AX, word2 MOV word1, AX ;能XCHG word1, word2来代替这三条指令吗? … CODE1 ENDS该方法充分利用了汇编语言的特点,不仅省去了中间变量temp的定义,而且程序的效率也提高了。