《第4章汇编语言程序设计整理ppt.ppt》由会员分享,可在线阅读,更多相关《第4章汇编语言程序设计整理ppt.ppt(38页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 计算机原理教程计算机原理教程第4章汇编语言程序设计整理ppt Still waters run deep.流静水深流静水深,人静心深人静心深 Where there is life,there is hope。有生命必有希望。有生命必有希望 计算机原理教程计算机原理教程按照指令执行的顺序,程序的结构可以划分成以下三种。按照指令执行的顺序,程序的结构可以划分成以下三种。顺序结构顺序结构:程序按照它编写的顺序执行,每条指令只执行一程序按照它编写的顺序执行,每条指令只执行一 次,这样的程序称为次,这样的程序称为“顺序结构顺序结构”的程序。的程序。循环结构:循环结构:一组指令被反复地执行,这样的程序
2、称为一组指令被反复地执行,这样的程序称为“循环循环结结 构构”或者或者“重复结构重复结构”的程序。的程序。选择结构:选择结构:根据某个条件,一部分指令被执行,另一部分指根据某个条件,一部分指令被执行,另一部分指 令没有被执行,这样的程序称为令没有被执行,这样的程序称为“选择结构选择结构”或者或者 “分支结构分支结构”的程序。的程序。一个实际运行的程序,常常是由以上三种结构的程序组一个实际运行的程序,常常是由以上三种结构的程序组合而成的,上面的三种结构称为程序的合而成的,上面的三种结构称为程序的“基本结构基本结构”。计算机原理教程计算机原理教程4.1 选择结构程序4.1.1 4.1.1 测试和转
3、移控制指令测试和转移控制指令 4.1.2 4.1.2 基本选择结构基本选择结构4.1.3 4.1.3 单分支选择结构单分支选择结构 4.1.4 4.1.4 复合选择结构复合选择结构 4.1.5 4.1.5 多分支选择结构多分支选择结构 计算机原理教程计算机原理教程 4.1.1 测试和转移控制指令测试和转移控制指令1.1.无条件转移指令无条件转移指令2.2.比较和测试指令比较和测试指令 3.3.条件转移指令条件转移指令 计算机原理教程计算机原理教程1、无条件转移指令、无条件转移指令 执行执行JMP指令后,程序转移到新的指令后,程序转移到新的“目的位置目的位置”执行。执行。按照转移目的位置的远近按
4、照转移目的位置的远近,JMP指令分为指令分为近程转移和远程转移近程转移和远程转移1)近程无条件转移指令近程无条件转移指令 转转移移的的目目的的位位置置与与出出发发点点在在同同一一个个段段里里,这这样样的的转转移移称称为为近近程转移,把目标位置的偏移地址置入程转移,把目标位置的偏移地址置入IP寄存器中寄存器中短转移、近程直接转移、近程间接转移短转移、近程直接转移、近程间接转移一般格式:一般格式:JMP 目的位置目的位置 计算机原理教程计算机原理教程2)远程无条件转移指令远程无条件转移指令 用用来来实实现现不不同同段段之之间间的的转转移移,执执行行该该指指令令时时,CPU把把目目的的段段的的段段基
5、基址装入址装入CS,目的位置的段内偏移地址装入,目的位置的段内偏移地址装入IP。远程直接转移远程直接转移JMP FAR PTR 远程标号远程标号指指令令中中的的远远程程标标号号位位于于另另一一个个代代码码段段中中。执执行行该该指指令令时时,把把该该标标号号所在段的段基址送入所在段的段基址送入CS,该标号的偏移地址送入,该标号的偏移地址送入IP。远程间接转移远程间接转移需需要要32位位的的目目的的地地址址,使使用用间间接接转转移移时时,需需要要把把32位位目目的的地地址址事事先先装入用装入用DD定义的存储单元。定义的存储单元。FAR_TGT DD TWO ;数据定义数据定义 JMP FAR PT
6、R TWO ;第一组,远程直接转移;第一组,远程直接转移LEA BX,FAR_TGTJMP DWORD PTRBX ;第二组,远程间接转移;第二组,远程间接转移JMP FAR_TGT ;第三组,远程间接转移;第三组,远程间接转移 计算机原理教程计算机原理教程2、比较和测试指令、比较和测试指令 该指令用来确定某个数据的特征,如是否小于该指令用来确定某个数据的特征,如是否小于0、是否为偶数。、是否为偶数。(1)CMP(Compare,比较)指令比较)指令指令格式指令格式:CMP目的操作数,源操作数目的操作数,源操作数目的操作数目的操作数:8位位/16位位/32位的寄存器位的寄存器/存储器操作数。存
7、储器操作数。源操作数源操作数:与目的操作数同类型的寄存器与目的操作数同类型的寄存器/存储器存储器/立即数。立即数。功能功能:目的操作数目的操作数-源操作数,保留运算产生的标志位,不保留源操作数,保留运算产生的标志位,不保留运算的差。用来比较两个有符号数或无符号数的大小。运算的差。用来比较两个有符号数或无符号数的大小。计算机原理教程计算机原理教程2)TEST(Test,测试)指令,测试)指令指令格式指令格式:TEST 目的操作数,源操作数目的操作数,源操作数目的操作数目的操作数:8位位/16位位/32位的寄存器位的寄存器/存储器操作数。存储器操作数。源操作数源操作数:与目的操作数同类型的寄存器与
8、目的操作数同类型的寄存器/存储器存储器/立即数。立即数。功能功能:TEST指令将目的操作数与源操作数进行逻辑乘运算,保指令将目的操作数与源操作数进行逻辑乘运算,保留运算产生的各标志位,但是不保留逻辑乘的结果。该留运算产生的各标志位,但是不保留逻辑乘的结果。该指令用来测试目的操作数中某几位二进制的特征。指令用来测试目的操作数中某几位二进制的特征。指令指令 TESTVAR,1 执行后:执行后:如果如果ZF=0,说明变量,说明变量VAR的的D0位为位为1,该数为奇数,该数为奇数如果如果ZF=1,说明变量,说明变量VAR的的D0位为位为0,该数为偶数,该数为偶数 计算机原理教程计算机原理教程3、条件转
9、移指令、条件转移指令 “J”是条件转移指令操作码的第一个字母是条件转移指令操作码的第一个字母 “cc”是代表转移条件的是代表转移条件的13个字母个字母 “label”是转移目的地的标号。是转移目的地的标号。条件转移指令格式:条件转移指令格式:Jcclabel 计算机原理教程计算机原理教程1)根据两个有符号数比较结果的条件转移指令)根据两个有符号数比较结果的条件转移指令 两个有符号数的比较结果通过两个有符号数的比较结果通过OF,SF,ZF反映出来,代表转反映出来,代表转移条件的字母有移条件的字母有G(greater),L(less),E(equal),N(not)。指令助记符指令助记符 指令功能
10、指令功能转移条件转移条件JG,JNLE大于(不小于等于)时转移大于(不小于等于)时转移OF SF=0且且ZF=0JGE,JNL大于等于(不小于)时转移大于等于(不小于)时转移OF SF=0JZ,JE为零(相等)时转移为零(相等)时转移ZF=1JNZ,JNE不为零(不相等)时转移不为零(不相等)时转移ZF=0JL,JNGE小于(不大于等于)时转移小于(不大于等于)时转移OF SF=1JLE,JNG小于等于(不大于)时转移小于等于(不大于)时转移OFSF=1或或ZF=1 计算机原理教程计算机原理教程2)根据两个无符号数比较结果的条件转移指令)根据两个无符号数比较结果的条件转移指令 两个有符号数的比
11、较结果通过两个有符号数的比较结果通过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低于等于(不高于)
12、时转移低于等于(不高于)时转移CF=1或或ZF=1 计算机原理教程计算机原理教程3)根据单个标志位的条件转移指令)根据单个标志位的条件转移指令 根据某一个标志位来决定程序的走向,其中一些在前面已出现根据某一个标志位来决定程序的走向,其中一些在前面已出现指令操作码助记符指令操作码助记符指令功能指令功能转移条件转移条件JC,JB,JNAE有进位时转移有进位时转移CF=1JNC,JNB,JAE无进位时转移无进位时转移CF=0JZ,JE为零(相等)时转移为零(相等)时转移ZF=1JNZ,JNE不为零(不相等)时转移不为零(不相等)时转移ZF=0JS为负时转移为负时转移SF=1JNS为正时转移为正时转移
13、SF=0JO溢出时转移溢出时转移OF=1JNO不溢出时转移不溢出时转移OF=0JP,JPE“1”的个数为偶数时转移的个数为偶数时转移PF=1JNP,JPO“1”的个数为奇数时转移的个数为奇数时转移PF=0 计算机原理教程计算机原理教程4.1.2 基本选择结构基本选择结构 根据不同的条件,需要进行不同的处理,在不同的程序间进行选择。根据不同的条件,需要进行不同的处理,在不同的程序间进行选择。逻辑流程逻辑流程 源程序代码源程序代码 正确的流程正确的流程 错误的流程错误的流程 计算机原理教程计算机原理教程4.1.3 分支选择结构分支选择结构 程序程序A或程序或程序B之一为空,即没有对应的处理过程。之
14、一为空,即没有对应的处理过程。计算计算AX|AX|的两种判断方法:的两种判断方法:计算机原理教程计算机原理教程4.1.4 复合选择结构复合选择结构 选择结构一个分支的程序中又出现了选择结构,这样的选择结构一个分支的程序中又出现了选择结构,这样的结构称为结构称为“复合选择结构复合选择结构”或者或者“嵌套选择结构嵌套选择结构”。4.1.5 多分支选择结构多分支选择结构在选择结构程序里,如果可供选择的程序块多于两个,如下图在选择结构程序里,如果可供选择的程序块多于两个,如下图(a)所示,所示,(b)是汇编语言程序的实现方法。是汇编语言程序的实现方法。计算机原理教程计算机原理教程INCLUDEYLIB
15、.H.CODEPROMPTDB0DH,0AH,“Input X(-10001000):$”X DB?OUT_MSG DB0DH,0AH,“Y=$”START:PUSHCSPOPDS;装载装载DSLEADX,PROMPT;输入提示信息;输入提示信息CALLREADINT;从键盘了输入;从键盘了输入X的值的值MOVX,AX;保存输入值;保存输入值例例4-1 对分段函数对分段函数 进行计算。进行计算。计算机原理教程计算机原理教程COMP:CMPX,3;比较比较,X3?JGGREATER;X3成立成立,转转“GREATER”CMPX,-3;比较比较,X3?JLGREATER;X3 的程序段的程序段OU
16、TPUT:LEADX,OUT_MSG;结果的前导文字结果的前导文字CALLWRITEINT;输出计算结果输出计算结果CALLCRLF;输出回车换行输出回车换行EXIT:MOVAX,4C00HINT21HENDSTART 计算机原理教程计算机原理教程例例4-2计算分段函数:计算分段函数:X的值从键盘输入,的值从键盘输入,Y的值送显示器输出。的值送显示器输出。INCLUDE YLIB.HINCLUDE YLIB.HDATADATASEGEMNTSEGEMNTMESS1 DB 0DH,0AH,Input value of X please:$MESS1 DB 0DH,0AH,Input value
17、of X please:$MESS2 DBMESS2 DB0DH,0AH,Y=:$0DH,0AH,Y=:$DATADATAENDSENDSCODECODESEGMENTSEGMENTASSUMEASSUMECS:CODE,DS:DATACS:CODE,DS:DATASTART:MOVSTART:MOVAX,DATAAX,DATAMOVMOVDS,AXDS,AXLEALEADX,MESS1DX,MESS1CALLCALLREADINTREADINT;输入;输入;输入;输入XX的值的值的值的值 计算机原理教程计算机原理教程CMPCMPAX,-2AX,-2JGEJGEL2L2L1:L1:SUBSUB
18、AX,3AX,3;AXX-3AXX-3JMPJMPDONEDONEL2:L2:CMPCMPAX,3AX,3JGJGL3L3MOVMOVBX,AXBX,AXADDADDAX,AXAX,AX;AX2XAX2XADDADDAX,AXAX,AX;AX4XAX4XADDADDAX,BXAX,BX;AX5XAX5XADDADDAX,6AX,6;AX5X+6AX5X+6JMPJMPDONEDONEL3:L3:MOVMOVAX,2AX,2;AX2AX2DONE:DONE:LEALEADX,MESS2DX,MESS2CALLCALLWRITEINTWRITEINT;输出;输出;输出;输出YY的值的值的值的值CA
19、LLCALLCRLFCRLFMOVMOVAX,4C00HAX,4C00HINTINT21H21HCODECODEENDSENDSENDENDSTARTSTART 计算机原理教程计算机原理教程DATASEGMENTPROMPTDB0DH,0AH,“Input a number(13):$”MSG1 DB0DH,0AH,“FUNCTION 1 EXECUTED.$”MSG2 DB0DH,0AH,“FUNCTION 2 EXECUTED.$”MSG3 DB0DH,0AH,“FUNCTION 3 EXECUTED.$”DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATAST
20、ART:MOVAX,DATAMOVDS,AX例例4-3 从键盘上输入数字从键盘上输入数字“1”到到“3”,根据输入选择对应,根据输入选择对应程序程序 块执行。块执行。计算机原理教程计算机原理教程INPUT:LEADX,PROMPTMOVAH,9INT21H;输出提示信息;输出提示信息MOVAH,1INT21H;输入一个数字;输入一个数字CMPAL,1JBINPUT;“0”或非数字,重新输入或非数字,重新输入JEF1;数字;数字“1”,转,转F1CMPAL,2JEF2;数字;数字“2”,转,转F2CMPAL,3JEF3;数字;数字“3”,转,转F3JMPINPUT;大于;大于“3”,重新输入,重
21、新输入 计算机原理教程计算机原理教程F1:LEADX,MSG1;F1程序块程序块JMPOUTPUTF2:LEADX,MSG2;F2程序块程序块JMPOUTPUTF3:LEADX,MSG3;F3程序块程序块JMPOUTPUTOUTPUT:MOVAH,9INT21HMOVAX,4C00HINT21HCODEENDSENDSTART 计算机原理教程计算机原理教程4.2 循环结构程序循环结构程序 循环结构也称为循环结构也称为“重复结构重复结构”,它使得一组指令重复地执行,它使得一组指令重复地执行,可以用有限长度的程序完成大量的处理任务,几乎所有的应用程可以用有限长度的程序完成大量的处理任务,几乎所有的
22、应用程序中都离不开循环结构。序中都离不开循环结构。循环一般由以下循环一般由以下4个部分组成:个部分组成:(1)初始化部分初始化部分:为循环做准备,如累加器清零,设置地址指:为循环做准备,如累加器清零,设置地址指针和计数器的初始值等。针和计数器的初始值等。(2)工作部分工作部分:实现循环的基本操作,也就是需要重复执行的:实现循环的基本操作,也就是需要重复执行的一段程序。一段程序。(3)修改部分修改部分:修改指针、计数器的值,为下一次循环做准备。:修改指针、计数器的值,为下一次循环做准备。(4)控制部分控制部分:判断循环条件,结束循环或继续循环。:判断循环条件,结束循环或继续循环。计算机原理教程计
23、算机原理教程计数循环计数循环:循环的次数事先已经知道,用一个变量记录循环的次数。循环的次数事先已经知道,用一个变量记录循环的次数。进行减法计数时,循环计数器的初值直接设为循环次数,每循环一次进行减法计数时,循环计数器的初值直接设为循环次数,每循环一次将计数器减将计数器减1,计数器减为,计数器减为0时,循环结束。时,循环结束。条件循环条件循环:循环的次数事先并不确定,每次循环开始时或结循环的次数事先并不确定,每次循环开始时或结束后测束后测试某个条件,根据这个条件是否满足来决定是否继续下一次循环。试某个条件,根据这个条件是否满足来决定是否继续下一次循环。按照循环结束的条件,有以下两类循环:按照循环
24、结束的条件,有以下两类循环:按照循环结束判断在循环中的位置,有以下两种结构的循环:按照循环结束判断在循环中的位置,有以下两种结构的循环:WHILEWHILE循环循环:进入循环后,先判断进入循环后,先判断循环结束条件循环结束条件,条件满足则退出,条件满足则退出循环,循环次数最少为循环,循环次数最少为0次。次。DO-WHILEDO-WHILE循环循环:进入循环后,先执行工作部分,然后判断进入循环后,先执行工作部分,然后判断循环继续循环继续的条件的条件,条件满足则转向工作部分继续循环,循环次数最少,条件满足则转向工作部分继续循环,循环次数最少1次。次。计算机原理教程计算机原理教程 计算机原理教程计算
25、机原理教程LOOPLabel;CXCX-1,若,若(CX)0,转移到,转移到LabelLOOPZ/LOOPE Label;CXCX-1,若,若(CX)0且且ZF=1,转移到,转移到LabelLOOPNZ/LOOPNELabel;CXCX-1,若,若(CX)0且且ZF=0,转移到,转移到Label 循环指令采用相对寻址方式,循环指令采用相对寻址方式,Label距离循环指令的下一距离循环指令的下一条指令必须在条指令必须在-128+127B之内。之内。1、循环指令、循环指令 计算机原理教程计算机原理教程2、计数循环、计数循环 计数循环是基本的循环组织方式,用循环计数器的值来计数循环是基本的循环组织方
26、式,用循环计数器的值来控制循环,有时候也可以结合其它条件共同控制。控制循环,有时候也可以结合其它条件共同控制。3、条件循环、条件循环 用条件控制循环具有普遍性,计数循环本质上是条件循用条件控制循环具有普遍性,计数循环本质上是条件循环的一种。环的一种。4、多重循环、多重循环 若一个循环的循环体内包含了另一个循环,称为多重循若一个循环的循环体内包含了另一个循环,称为多重循环,各层循环可以是计数循环也可以是条件循环。环,各层循环可以是计数循环也可以是条件循环。计算机原理教程计算机原理教程例例4.4 字符串字符串STRING以代码以代码0结束,求这个字符的长度(字符个数)结束,求这个字符的长度(字符个
27、数)DATADATASEGMENTSEGMENTSTRINGSTRING DB DB “A string for testing.”,0“A string for testing.”,0LENTHLENTH DW?DW?DATADATAENDSENDSCODECODESEGMENTSEGMENTASSUMEASSUMECS:CODE,DS:DATACS:CODE,DS:DATASTART:MOV START:MOV AX,DATAAX,DATA MOV MOV DS,AXDS,AXLEALEASI,STRINGSI,STRING;装载字符串指针;装载字符串指针;装载字符串指针;装载字符串指针M
28、OVMOVCX,0CX,0;设置计数器初值;设置计数器初值;设置计数器初值;设置计数器初值TST:TST:CMPCMPBYTE PTR SI,0 BYTE PTR SI,0;比较;比较;比较;比较JEJEDONEDONE;字符串结束;字符串结束;字符串结束;字符串结束,转向转向转向转向DONEDONEINCINCCX CX;计数;计数;计数;计数INCINCSISI;修改指针;修改指针;修改指针;修改指针JMPJMPTSTTST;转向;转向;转向;转向TSTTST,继续循环,继续循环,继续循环,继续循环DONE:DONE:MOVMOVLENTH,CXLENTH,CX;保存结果;保存结果;保存结
29、果;保存结果MOVMOVAX,4C00HAX,4C00HINTINT21H21HCODECODEENDSENDSENDENDSTARTSTART 计算机原理教程计算机原理教程例例4.5 一个有符号字数组以一个有符号字数组以0为结束标志,求这个数组的:最大值、为结束标志,求这个数组的:最大值、最小值、平均值。最小值、平均值。计算机原理教程计算机原理教程DATADATASEGEMNTSEGEMNTLISTLISTDWDW-56,+12,88,-126,-5,16,32,-99,72,-18,0-56,+12,88,-126,-5,16,32,-99,72,-18,0MINMINDWDW?MAXMA
30、XDWDW?AVGAVGDWDW?DATADATAENDSENDSCODECODESEGMENTSEGMENTASSUMEASSUMECS:CODE,DS:DATACS:CODE,DS:DATASTART:START:MOVMOVAX,DATAAX,DATAMOVMOVDS,AXDS,AXMOVMOVMIN,32767MIN,32767;将;将;将;将3276732767假设为最小的数假设为最小的数假设为最小的数假设为最小的数MOVMOVMAX,-32768MAX,-32768;将;将;将;将-32768-32768假设为最大的数假设为最大的数假设为最大的数假设为最大的数MOVMOVAVG,0
31、AVG,0;AVGAVG用作累加器,清零用作累加器,清零用作累加器,清零用作累加器,清零LEALEASI,LISTSI,LISTMOVMOVCX,0CX,0AGAIN:AGAIN:MOVMOVAX,SIAX,SICMPCMPAX,0AX,0JZJZDONEDONE;找到零元素,转;找到零元素,转;找到零元素,转;找到零元素,转DONEDONE结束处理结束处理结束处理结束处理 计算机原理教程计算机原理教程INCINCCXCX;纪录非零元素个数;纪录非零元素个数;纪录非零元素个数;纪录非零元素个数ADDADDAVG,AXAVG,AX;累加;累加;累加;累加CMPCMPAX,MINAX,MINJGE
32、JGESKIP1SKIP1MOVMOVMINMIN,AXAX;比预设最小值还小,保留;比预设最小值还小,保留;比预设最小值还小,保留;比预设最小值还小,保留SKIP1:SKIP1:CMPCMPAX,MAXAX,MAXJLEJLESKIP2SKIP2 MOVMOVMAX,AXMAX,AX;比预设最大值还大,保留;比预设最大值还大,保留;比预设最大值还大,保留;比预设最大值还大,保留SKIP2:SKIP2:ADDADDSI,2SI,2JMPJMPAGAINAGAINDONE:DONE:JCXZJCXZNULLNULL;元素个数为零,转;元素个数为零,转;元素个数为零,转;元素个数为零,转NULLN
33、ULL处理处理处理处理MOVMOVAX,AVGAX,AVGCWDCWDIDIVIDIVCXCXMOVMOVAVG,AXAVG,AX;计算平均值;计算平均值;计算平均值;计算平均值JMPJMPEXITEXIT NULL:NULL:MOVMOVMIN,0MIN,0;元素个数为;元素个数为;元素个数为;元素个数为00,将,将,将,将“最大值最大值最大值最大值”、“最小值最小值最小值最小值”MOVMOVMAX,0MAX,0;“平均值平均值平均值平均值”清零清零清零清零MOVMOVAVG,0AVG,0EXIT:EXIT:MOVMOVAX,4C00HAX,4C00HINTINT21H21HCODECODE
34、ENDSENDSENDENDSTARTSTART 计算机原理教程计算机原理教程DATASEGMENTPOSITIONDW?STRINGDB “This is a string for example.”,0DATAENDSCODESEGMENTASSUME DS:DATA,CS:CODESTART:MOVAX,DATAMOVDS,AX例例4-6 查找字母查找字母a在字符串在字符串STRING中第一次出现的位置,中第一次出现的位置,如果未出现,置位置值为如果未出现,置位置值为-1。计算机原理教程计算机原理教程MOVSI,-1;SI用作字符串字符指针用作字符串字符指针MOVCX,30;字符串长度;
35、字符串长度30L0:INCSI;修改指针;修改指针CMPSTRINGSI,a;一个字符与;一个字符与a进行比较进行比较LOOPNEL0;字符串未结束;字符串未结束,未找到未找到,继续继续JNENOTFOUND;未找到,转;未找到,转“NOTFOUND”MOVPOSITION,SI;保存位置值;保存位置值JMPEXITNOTFOUND:MOVPOSITION,-1;未找到,置位置值为;未找到,置位置值为-1EXIT:MOVAX,4C00HINT21HCODEENDSENDSTART 程序使用程序使用LOOPNE指令来控制循环,既有计数控制,又有条件控制。指令来控制循环,既有计数控制,又有条件控制
36、。计算机原理教程计算机原理教程例例4-7 编写程序,求编写程序,求10元素字数组元素字数组LIST中绝对值最小的数,存入中绝对值最小的数,存入MIN单元。单元。计算机原理教程计算机原理教程DATADATASEGEMNTSEGEMNTLISTLISTDWDW-56,+12,88,-126,-5,16,32,-99,72,-18-56,+12,88,-126,-5,16,32,-99,72,-18MINMINDWDW?MINABSMINABS DW DW?DATADATAENDSENDSCODECODESEGMENTSEGMENT ASSUME ASSUMECS:CODE,DS:DATACS:CO
37、DE,DS:DATASTART:START:MOVMOVAX,DATAAX,DATAMOVMOVDS,AXDS,AXMOVMOVAX,LISTAX,LISTMOVMOVMIN,AXMIN,AX ;将数组第一个元素假设为绝对值最小的数;将数组第一个元素假设为绝对值最小的数;将数组第一个元素假设为绝对值最小的数;将数组第一个元素假设为绝对值最小的数MOVMOVMINABS,32767MINABS,32767;最小的绝对值假设为;最小的绝对值假设为;最小的绝对值假设为;最小的绝对值假设为3276732767LEALEASI,LISTSI,LISTMOVMOVCX,10CX,10 计算机原理教程计算机
38、原理教程AGAIN:AGAIN:MOVMOVAX,SIAX,SICMPCMPAX,0AX,0JGEJGESKIP1SKIP1NEGNEGAXAX;求绝对值;求绝对值;求绝对值;求绝对值SKIP1:SKIP1:CMPCMPAX,MINABSAX,MINABS;绝对值与假设的最小绝对值比较;绝对值与假设的最小绝对值比较;绝对值与假设的最小绝对值比较;绝对值与假设的最小绝对值比较JGEJGESKIP2SKIP2;假设的绝对值较小,跳过;假设的绝对值较小,跳过;假设的绝对值较小,跳过;假设的绝对值较小,跳过MOVMOVMINABS,AXMINABS,AX;保存新的最小绝对值;保存新的最小绝对值;保存新
39、的最小绝对值;保存新的最小绝对值MOVMOVAX,SIAX,SI;取出新的绝对值最小的数;取出新的绝对值最小的数;取出新的绝对值最小的数;取出新的绝对值最小的数MOVMOVMIN,AXMIN,AX;保留新的绝对值最小的数;保留新的绝对值最小的数;保留新的绝对值最小的数;保留新的绝对值最小的数SKIP2:SKIP2:ADDADDSI,2SI,2LOOPLOOPAGAINAGAINMOVMOVAX,4C00HAX,4C00HINTINT21H21HCODECODEENDSENDSENDENDSTARTSTART说明:一定要预设最小的绝对值和绝对值最小的数,而且这个绝对值最小说明:一定要预设最小的绝
40、对值和绝对值最小的数,而且这个绝对值最小说明:一定要预设最小的绝对值和绝对值最小的数,而且这个绝对值最小说明:一定要预设最小的绝对值和绝对值最小的数,而且这个绝对值最小的数必须来自的数必须来自的数必须来自的数必须来自LISTLIST数组。数组。数组。数组。计算机原理教程计算机原理教程例例4-8 缓冲区缓冲区BUFFER中存放有字符串,以中存放有字符串,以0为结束标志。编写程为结束标志。编写程序,把字符串中的大写字母转换成小写字母。序,把字符串中的大写字母转换成小写字母。计算机原理教程计算机原理教程DATADATASEGEMNTSEGEMNTBUFFER DBBUFFER DBA String
41、for Test.,0A String for Test.,0DATADATAENDSENDSCODECODESEGMENTSEGMENTASSUMEASSUMECS:CODE,DS:DATACS:CODE,DS:DATASTART:START:MOVMOVAX,DATAAX,DATAMOVMOVDS,AXDS,AXLEALEABX,BUFFERBX,BUFFER;BUFFERBUFFER缓冲区指针缓冲区指针缓冲区指针缓冲区指针ONE:ONE:MOVMOVAL,BXAL,BX;从缓冲区取出一个字符;从缓冲区取出一个字符;从缓冲区取出一个字符;从缓冲区取出一个字符ANDANDAL,ALAL,ALJZJZQUITQUIT;为零,处理完成;为零,处理完成;为零,处理完成;为零,处理完成CMPCMPAL,AAL,AJBJBNEXTNEXTCMPCMPAL,ZAL,ZJAJANEXTNEXTADDADDAL,a-AAL,a-AMOVMOVBX,ALBX,ALNEXT:NEXT:INCINCBXBXJMPJMPONEONEQUIT:QUIT:MOVMOVAX,4C00HAX,4C00HINTINT21H21HCODECODEENDSENDSENDENDSTARTSTART