汇编语言程序设计-课件 第五章(1)顺序程序设计_第1页
汇编语言程序设计-课件 第五章(1)顺序程序设计_第2页
汇编语言程序设计-课件 第五章(1)顺序程序设计_第3页
汇编语言程序设计-课件 第五章(1)顺序程序设计_第4页
汇编语言程序设计-课件 第五章(1)顺序程序设计_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第5章基本程序设计一般来说,编写汇编程序应遵循如下步骤:(1)分析问题,确定算法(2)绘制流程图(3)分配资源(4)根据流程图编写程序(5)上机调试程序从程序结构上看,汇编程序有顺序、分支、循环和子程序四种基本结构形式。

5.1顺序程序设计顺序程序设计也称为简单程序设计或直接程序设计。顺序程序是程序的基本组成部分。一、存储单元内容移位将存储单元A中的内容左移4位,存储单元B中的内容右移2位(移位后的空位为0)。分析:实现存储单元内容移位,可以直接使用移位指令。但要求移后空位为0,故应使用逻辑移位指令。程序段如下: MOV CL,4 SHL A,CL MOV CL,2 SHR B,CL二、

屏蔽与组合将字类型变量A的高4位和低4位置0,其余各位保持不变。分析:对字或字节变量中的部分位进行置0操作,称为屏蔽操作。它们是数据处理常用的方法之一。多用于数据或码型变换中,它们可用逻辑运算指令实现。程序段如下: MOV AX,A AND AX,0FF0H MOV A,AX三、

拆字

将存储单元A中两个压缩BCD数拆成两个非压缩BCD数(高位BCD数放C单元中,低位BCD数放B单元中),然后分别转换为两个ASCII代码。分析:将A单元BCD数拆开可以采用移位,对高位BCD数可右移4位而成为非压缩数。低位BCD数,可用屏蔽其高4位而成为非压缩BCD数。然后分别与30H进行逻辑或运算而成为ASCII代码。程序段如下: MOV AL,A MOV CL,4 SHR AL,CL OR AL,30H MOV C,AL MOV AL,A AND AL,0FH OR AL,30H MOV B,AL四、查表程序设计平方表、立方表等可以使用查表指令来完成XLAT五、加减运算已知Z=(X+Y)-(W+Z),其中X,Y,Z,W均为字节存储单元,存放的数据均用压缩BCD码表示。编写完成上式的程序段。分析:这也是一种典型的顺序程序,在这里要注意是BCD数相加,要进行十进制调整。程序段如下: MOV AL,Z MOV BL,W ADD AL,BL DAA MOV BL,AL MOV AL,X MOV DL,Y ADD AL,DL DAA SUB AL,BL DAS MOV Z,AL六、乘法运算将寄存器BL内容进行乘10运算。分析:对一个数进行乘10运算,这在数值运算中是经常用到的。它可以直接使用乘法指令实现,程序段如下: MOV AL,10 MUL BL但执行过程至少需要70个时钟周期,所用时间太长。

如果利用移位操作,左移一位,相当于原数乘2,因此也可以用移位操作实现乘10运算。 MOV AL,BL MOV AH,0 SAL AX,1 MOV BX,AX SAL AX,1 SAL AX,1 ADD AX,BX使用上述程序段,只需15个时钟周期,虽然程序显得繁琐些,但执行时间比直接使用乘法指令要快得多。也可以使用加法实现乘10运算 MOV AL,BL MOV AH,0 ADD AX,AX MOV BX,AX ADD AX,AX ADD AX,AX ADD AX,BX 上述程序段所需时间为18个时钟周期。所以完成简单的乘法运算,还是使用移位或加法运算为快。七、

混合运算用顺序结构来编程实现求无符号数S=(X2+Y2)/Z的值,将最后结果放入RESULT单元保存。分析:本题中要定义四个变量,X、Y、Z是计算表达式涉及到的数据,RESULT单元是结果的存放单元。为方便数据的重复使用,采用寄存器来存放中间结果X2和Y2。源程序:DATA SEGMENT

X DB 5

Y DB 7 Z DB 2RESULT DB ?DATA ENDSCODE SEGMENT

ASSUMECS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX MOV AL,X MUL X MOV BX,AX MOV AL,Y MUL Y ADD AX,BX DIV Z MOV RESULT,AL MOV AH,4CH INT 21HCODE ENDS END START

八、求数的补码与反码将字变量A转换为补码和反码,分别存入字变量B和C中。分析:数据取反可以直接使用非逻辑指令;对数据求补码操作,应该先取反,末位再加1即可。 MOV AX,A NOT AX MOV B,AX INC AX MOV C,AX当然,取补操作也可以直接通过取补指令实现。 MOV AX,A NEG AX MOV C,AX DEC AX MOV B,AX5.2分支程序设计条件转移指令和无条件转移指令JMP用于实现程序的分支在条件转移指令前,通常需要安排算术运算指令、比较指令或测试指令等能够影响标志位的相关指令一、单分支程序设计编程实现将键盘输入的小写字母转换为大写字母显示出来。分析:从键盘接收数据后,在程序中要判断接收的是否是小写字母,是则进行转换,否则不予转换,这样就需要判断所输入字符是否在'a'和'z'的范围内,采用单分支结构即可实现。转换后结果的显示通过DOS功能调用的02号功能,将要显示字符的ASCII码放在DL中。参考程序如下:CODESEGMENT ASSUMECS:CODESTART:MOVAH,01H ;用DOS调用的01号

INT 21H ;功能,从键盘输入字符,AL

CMP AL,'a'

JB EXIT

CMP AL,'z'

JA EXIT

SUB AL,20H MOVDL,AL

MOVAH,02H INT 21HEXIT:MOVAH,4CH INT 21HCODEENDS END START

二、多分支程序设计多分支结构具有若干个条件,每个条件对应一个操作程序。程序必须判断那个条件成立,从而转去执行该条件对应的程序段。多分支程序可以采用用简单分支程序组合实现,也可以利用地址表、转移表的方法实现。1.简单分支程序组合实现编写程序,完成下面的分段函数的计算,给定X为带符号的字节数据。分析:这是三路分支的程序设计,根据题目要求X为内存中的一个带符号数。采用两重条件判断:首先判断X值的正负,若为负数,将-1送到Y中保存;若为正数,再判断X是否为0,如果为0,将0送到Y中保存,否则将1送到Y中保存。

1X>0

Y=0X=0

-1X<0源程序:DATA SEGMENT X DB-10 Y DB?DATA ENDSCODE SEGMENT ASSUMECS:CODE,DS:DATASTART: MOV AX,DATA

MOV DS,AX MOV AL,X CMP AL,0 JGE BIG MOV BL,-1

JMP EXITBIG: JE MIN MOV BL,1

JMP EXITMIN: MOV BL,0EXIT: MOV Y,BL MOV AH,4CH INT 21HCODE ENDS END START2.跳转表法多分支程序设计所谓跳转表法是指:把转移到各分支程序的入口地址集中存放在一张表中,如果是段内转移,则为16位地址;如果是段间转移,则为32位地址。这张表称为分支跳转表。把各分支转移程序的入口地址在表中的位置(离表首地址的位移量)作为条件。当进行多分支条件判断时,把当前条件,位移量加上表首地址作为转移地址,转到表的相应位置,取出所转向的子程序的人口地址,达到多分支的目的。根据AL中各位被置位情况,控制转移到8个子程序P1~P8之一中去。分析:对于这种程序关键要找出每种情况的转移地址,从图中可见表地址=表基地址+偏移量,而偏移量可由AL各位所在位置×2求得。源程序:DATA SEGMENTBASE DWSR0,SR1,SR2,SR3,SR4,SR5,SR6,SR7DATA ENDSCODE SEGMENT ASSUMECS:CODE,DS:DATA,ES:DATABEGIN:

PUSH DS XOR AX,AX PU

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论