汇编语言程序相关设计整理_第1页
汇编语言程序相关设计整理_第2页
汇编语言程序相关设计整理_第3页
汇编语言程序相关设计整理_第4页
汇编语言程序相关设计整理_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

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

文档简介

汇编语言程序相关设计整理按照指令执行的顺序,程序的结构可以划分成以下三种。

顺序结构:程序按照它编写的顺序执行,每条指令只执行一

次,这样的程序称为“顺序结构”的程序。

循环结构:一组指令被反复地执行,这样的程序称为“循环结

构”或者“重复结构”的程序。

选择结构:根据某个条件,一部分指令被执行,另一部分指

令没有被执行,这样的程序称为“选择结构”或者

“分支结构”的程序。一个实际运行的程序,常常是由以上三种结构的程序组合而成的,上面的三种结构称为程序的“基本结构”。4.1选择结构程序 4.1.1测试和转移控制指令

4.1.2基本选择结构

4.1.3单分支选择结构

4.1.4复合选择结构

4.1.5多分支选择结构

测试和转移控制指令1.无条件转移指令2.比较和测试指令3.条件转移指令1、无条件转移指令

执行JMP指令后,程序转移到新的“目的位置”执行。按照转移目的位置的远近,JMP指令分为近程转移和远程转移1)近程无条件转移指令转移的目的位置与出发点在同一个段里,这样的转移称为近程转移,把目标位置的偏移地址置入IP寄存器中 短转移、近程直接转移、近程间接转移一般格式:JMP 目的位置2)远程无条件转移指令用来实现不同段之间的转移,执行该指令时,CPU把目的段的段基址装入CS,目的位置的段内偏移地址装入IP。远程直接转移 JMPFARPTR远程标号 指令中的远程标号位于另一个代码段中。执行该指令时,把该标号所在段的段基址送入CS,该标号的偏移地址送入IP。 远程间接转移 需要32位的目的地址,使用间接转移时,需要把32位目的地址事先装入用DD定义的存储单元。FAR_TGTDDTWO;数据定义JMPFARPTRTWO;第一组,远程直接转移LEABX,FAR_TGTJMPDWORDPTR[BX];第二组,远程间接转移JMPFAR_TGT;第三组,远程间接转移2、比较和测试指令该指令用来确定某个数据的特征,如是否小于0、是否为偶数。(1)CMP(Compare,比较)指令指令格式:

CMP 目的操作数,源操作数目的操作数:8位/16位/32位的寄存器/存储器操作数。源操作数:与目的操作数同类型的寄存器/存储器/立即数。功能:目的操作数-源操作数,保留运算产生的标志位,不保留

运算的差。用来比较两个有符号数或无符号数的大小。2)TEST(Test,测试)指令指令格式:

TEST 目的操作数,源操作数目的操作数:8位/16位/32位的寄存器/存储器操作数。源操作数:与目的操作数同类型的寄存器/存储器/立即数。功能:TEST指令将目的操作数与源操作数进行逻辑乘运算,保

留运算产生的各标志位,但是不保留逻辑乘的结果。该

指令用来测试目的操作数中某几位二进制的特征。指令TEST VAR,1执行后:如果ZF=0,说明变量VAR的D0位为1,该数为奇数如果ZF=1,说明变量VAR的D0位为0,该数为偶数3、条件转移指令“J”是条件转移指令操作码的第一个字母“cc”是代表转移条件的1~3个字母“label”是转移目的地的标号。条件转移指令格式:Jcc label1)根据两个有符号数比较结果的条件转移指令两个有符号数的比较结果通过OF,SF,ZF反映出来,代表转移条件的字母有G(greater),L(less),E(equal),N(not)。指令助记符指令功能转移条件JG,JNLE大于(不小于等于)时转移OF⊕SF=0且ZF=0JGE,JNL大于等于(不小于)时转移OF⊕SF=0JZ,JE为零(相等)时转移ZF=1JNZ,JNE不为零(不相等)时转移ZF=0JL,JNGE小于(不大于等于)时转移OF⊕SF=1JLE,JNG小于等于(不大于)时转移OF⊕SF=1或ZF=12)根据两个无符号数比较结果的条件转移指令两个有符号数的比较结果通过CF,ZF反映出来,代表转移条件的字母有A(above),B(below),E(equal)。指令助记符指令功能转移条件JA,JNBE高于(不低于等于)时转移CF=0且ZF=0JAE,JNB,JNC高于等于(不低于)时转移CF=0JZ,JE为零(相等)时转移ZF=1JNZ,JNE不为零(不相等)时转移ZF=0JB,JNAE,JC低于(不高于等于)时转移CF=1JBE,JNA低于等于(不高于)时转移CF=1或ZF=13)根据单个标志位的条件转移指令根据某一个标志位来决定程序的走向,其中一些在前面已出现指令操作码助记符指令功能转移条件JC,JB,JNAE有进位时转移CF=1JNC,JNB,JAE无进位时转移CF=0JZ,JE为零(相等)时转移ZF=1JNZ,JNE不为零(不相等)时转移ZF=0JS为负时转移SF=1JNS为正时转移SF=0JO溢出时转移OF=1JNO不溢出时转移OF=0JP,JPE“1”的个数为偶数时转移PF=1JNP,JPO“1”的个数为奇数时转移PF=04.1.2基本选择结构根据不同的条件,需要进行不同的处理,在不同的程序间进行选择。

逻辑流程 源程序代码 正确的流程 错误的流程4.1.3分支选择结构

程序A或程序B之一为空,即没有对应的处理过程。计算AX←|AX|的两种判断方法:4.1.4复合选择结构

选择结构一个分支的程序中又出现了选择结构,这样的

结构称为“复合选择结构”或者“嵌套选择结构”。4.1.5多分支选择结构在选择结构程序里,如果可供选择的程序块多于两个,如下图(a)所示,(b)是汇编语言程序的实现方法。INCLUDE YLIB.H.CODEPROMPT DB 0DH,0AH,“InputX(-1000~1000):$”X DB ?OUT_MSG DB 0DH,0AH,“Y=$”START: PUSH CS POP DS ;装载DS LEA DX,PROMPT ;输入提示信息

CALL READINT ;从键盘了输入X的值

MOV X,AX ;保存输入值[例4-1]对分段函数进行计算。COMP: CMP X,3 ;比较,X>3? JG GREATER ;X>3成立,转“GREATER” CMP X,-3 ;比较,X<-3? JL GREATER ;X<-3成立,|转“GREATER”LESS: ;|X|≤3的程序段

MOV BX,AX ;BX←X SAL AX,1 ;AX←2X ADD AX,BX ;AX←2X+X SUB AX,5 ;AX←3X-5 JMP OUTPUT ;这条指令千万不能遗漏GREATER: MOV AX,6 ;|X|>3的程序段OUTPUT: LEA DX,OUT_MSG ;结果的前导文字

CALL WRITEINT ;输出计算结果

CALL CRLF ;输出回车换行EXIT: MOV AX,4C00H INT 21H END START[例4-2]计算分段函数:

X的值从键盘输入,Y的值送显示器输出。

INCLUDEYLIB.HDATA SEGEMNTMESS1DB0DH,0AH,‘InputvalueofXplease:$’ MESS2DB 0DH,0AH,‘Y=:$’DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART:MOV AX,DATA MOV DS,AX LEA DX,MESS1 CALL READINT ;输入X的值 CMP AX,-2 JGE L2L1: SUB AX,3 ;AX←X-3 JMP DONEL2: CMP AX,3 JG L3 MOV BX,AX ADD AX,AX ;AX←2X ADD AX,AX ;AX←4X ADD AX,BX ;AX←5X ADD AX,6 ;AX←5X+6 JMP DONEL3: MOV AX,2 ;AX←2DONE: LEA DX,MESS2 CALL WRITEINT ;输出Y的值

CALL CRLF MOV AX,4C00H INT 21HCODE ENDS END START

DATA SEGMENTPROMPT DB 0DH,0AH,“Inputanumber(1~3):$”MSG1 DB 0DH,0AH,“FUNCTION1EXECUTED.$”MSG2 DB 0DH,0AH,“FUNCTION2EXECUTED.$”MSG3 DB 0DH,0AH,“FUNCTION3EXECUTED.$”DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX[例4-3]从键盘上输入数字“1”到“3”,根据输入选择对应程序

块执行。INPUT: LEA DX,PROMPT MOV AH,9 INT 21H ;输出提示信息

MOV AH,1 INT 21H ;输入一个数字

CMP AL,‘1’ JB INPUT ;“0”或非数字,重新输入

JE F1 ;数字“1”,转F1 CMP AL,‘2’ JE F2 ;数字“2”,转F2 CMP AL,‘3’ JE F3 ;数字“3”,转F3 JMP INPUT ;大于“3”,重新输入F1: LEA DX,MSG1 ;F1程序块

JMP OUTPUTF2: LEA DX,MSG2 ;F2程序块

JMP OUTPUTF3: LEA DX,MSG3 ;F3程序块

JMP OUTPUTOUTPUT: MOV AH,9 INT 21H MOV AX,4C00H INT 21HCODE ENDS END START4.2循环结构程序

循环结构也称为“重复结构”,它使得一组指令重复地执行,可以用有限长度的程序完成大量的处理任务,几乎所有的应用程序中都离不开循环结构。循环一般由以下4个部分组成:(1)初始化部分:为循环做准备,如累加器清零,设置地址指

针和计数器的初始值等。(2)工作部分:实现循环的基本操作,也就是需要重复执行的

一段程序。(3)修改部分:修改指针、计数器的值,为下一次循环做准备。(4)控制部分:判断循环条件,结束循环或继续循环。计数循环:循环的次数事先已经知道,用一个变量记录循环的次数。进行减法计数时,循环计数器的初值直接设为循环次数,每循环一次将计数器减1,计数器减为0时,循环结束。条件循环:循环的次数事先并不确定,每次循环开始时或结 束后测试某个条件,根据这个条件是否满足来决定是否继续下一次循环。按照循环结束的条件,有以下两类循环:按照循环结束判断在循环中的位置,有以下两种结构的循环:WHILE循环:进入循环后,先判断循环结束条件,条件满足则退出循环,循环次数最少为0次。DO-WHILE循环:进入循环后,先执行工作部分,然后判断循环继续的条件,条件满足则转向工作部分继续循环,循环次数最少1次。LOOP Label ;CX←CX-1,若(CX)≠0,转移到LabelLOOPZ/LOOPELabel

;CX←CX-1,若(CX)≠0且ZF=1,转移到LabelLOOPNZ/LOOPNE Label

;CX←CX-1,若(CX)≠0且ZF=0,转移到Label

循环指令采用相对寻址方式,Label距离循环指令的下一条指令必须在-128~+127B之内。1、循环指令2、计数循环

计数循环是基本的循环组织方式,用循环计数器的值来控制循环,有时候也可以结合其它条件共同控制。3、条件循环

用条件控制循环具有普遍性,计数循环本质上是条件循环的一种。4、多重循环

若一个循环的循环体内包含了另一个循环,称为多重循环,各层循环可以是计数循环也可以是条件循环。例4.4字符串STRING以代码0结束,求这个字符的长度(字符个数)DATA SEGMENTSTRING DB “Astringfortesting.”,0LENTH DW?DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATA MOV DS,AX LEA SI,STRING ;装载字符串指针

MOV CX,0 ;设置计数器初值TST: CMP BYTEPTR[SI],0;比较

JE DONE ;字符串结束,转向DONE INC CX ;计数

INC SI ;修改指针

JMP TST ;转向TST,继续循环DONE: MOV LENTH,CX ;保存结果

MOV AX,4C00H INT 21HCODE ENDS END START例4.5一个有符号字数组以0为结束标志,求这个数组的:最大值、最小值、平均值。

DATA SEGEMNT LIST DW -56,+12,88,-126,-5,16,32,-99,72,-18,0 MIN DW ? MAX DW ? AVG DW ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX MOV MIN,32767 ;将32767假设为最小的数

MOV MAX,-32768 ;将-32768假设为最大的数

MOV AVG,0 ;AVG用作累加器,清零

LEA SI,LIST MOV CX,0AGAIN: MOV AX,[SI] CMP AX,0 JZ DONE ;找到零元素,转DONE结束处理 INC CX ;纪录非零元素个数

ADD AVG,AX ;累加

CMP AX,MIN JGE SKIP1 MOV MIN,AX ;比预设最小值还小,保留

SKIP1: CMP AX,MAX JLE SKIP2 MOV MAX,AX ;比预设最大值还大,保留

SKIP2: ADD SI,2 JMP AGAIN DONE: JCXZ NULL ;元素个数为零,转NULL处理

MOV AX,AVG CWD IDIV CX MOV AVG,AX ;计算平均值

JMP EXIT NULL: MOV MIN,0 ;元素个数为0,将“最大值”、“最小值”

MOV MAX,0 ;“平均值”清零

MOV AVG,0 EXIT: MOV AX,4C00H INT 21H CODE ENDS END STARTDATA SEGMENTPOSITION DW ?STRING DB “Thisisastringforexample.”,0DATA ENDSCODE SEGMENTASSUME DS:DATA,CS:CODESTART: MOV AX,DATA MOV DS,AX[例4-

温馨提示

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

评论

0/150

提交评论