1、第6章 汇编语言程序设计第6章 汇编语言程序设计6.1汇编语言程序设计基本方法和基本步骤汇编语言程序设计基本方法和基本步骤6.2顺序程序的结构形式和程序设计顺序程序的结构形式和程序设计6.3分支程序的结构形式和程序设计分支程序的结构形式和程序设计6.4循环程序的结构和程序设计循环程序的结构和程序设计6.5子程序结构与设计方法子程序结构与设计方法开开 始始第6章 汇编语言程序设计6.1汇编语言程序设计基本方法和基本步骤汇编语言程序设计基本方法和基本步骤6.1.1 汇编语言程序设计基本步骤汇编语言程序设计基本步骤 6.1.2 结构化程序的概念结构化程序的概念 6.1.3 流程图画法规定流程图画法规
2、定 返回本章首页返回本章首页第6章 汇编语言程序设计6.1.1 汇编语言程序设计的一般步骤汇编语言程序设计的一般步骤汇编语言程序设计一般有以下几个步骤:汇编语言程序设计一般有以下几个步骤:1分析问题,抽象出描述问题的数学模型分析问题,抽象出描述问题的数学模型 2确定解决问题的算法或解题思想确定解决问题的算法或解题思想3绘制流程图和结构图绘制流程图和结构图4分配存储空间和工作单元分配存储空间和工作单元5.编制程序编制程序6.程序静态检查程序静态检查 7.上机调试上机调试 返回本节返回本节第6章 汇编语言程序设计6.1.2结构化程序的概念结构化程序的概念 所所谓谓结结构构化化程程序序设设计计是是指
3、指程程序序的的设设计计、编编写写和和测测试试都都采采用用一一种种规规定定的的组组织织形形式式进进行行,而而不不是是想想怎怎么么写写就就怎怎么么写写。这这样样,可可使使编编制制的的程程序序结结构构清清晰晰,易易于于读读懂懂,易易于于调调试试和和修修改改,充充分分显显示示出出模模块块化化程程序序设设计计的优点。的优点。在在20世世纪纪70年年代代初初,由由Boehm和和Jacobi提提出出并并证证明明的的结结构构定定理理:即即任任何何程程序序都都可可以以由由3种种基基本本结结构构程程序序构构成成结结构构化化程程序序,这这3种种结结构构是是:顺顺序序结结构构、分分支支(条条件件选选择择)结结构构和和
4、循循环环结结构构。每每一一个个结结构构只只有有一一个个入入口口和和一一个个出出口口,3种种结结构构的的任任意意组组合合和和嵌嵌套套就就构构成了结构化的程序。成了结构化的程序。第6章 汇编语言程序设计1顺序结构顺序结构顺序结构是按照语句实现的先后次序执行顺序结构是按照语句实现的先后次序执行一系列的操作,它没有分支、循环和转移一系列的操作,它没有分支、循环和转移 2分支结构(条件选择结构)分支结构(条件选择结构)分支结构根据不同情况做出判断和选择,分支结构根据不同情况做出判断和选择,以便执行不同的程序段。分支的意思是在两个以便执行不同的程序段。分支的意思是在两个或多个不同的操作中选择其中的一个。分
5、为双或多个不同的操作中选择其中的一个。分为双分支结构和多分支结构分支结构和多分支结构 第6章 汇编语言程序设计3循环结构循环结构循环结构是重复执行一系列操作,直到循环结构是重复执行一系列操作,直到某个条件出现为止。循环实际上是分支结构某个条件出现为止。循环实际上是分支结构的一种扩展,循环是否继续是依靠条件判断的一种扩展,循环是否继续是依靠条件判断语句来完成的。按照条件判断的位置,可以语句来完成的。按照条件判断的位置,可以把循环分为把循环分为“当型循环当型循环”和和“直到型循环直到型循环”。第一种情况是先作条件判断,第二种情况是第一种情况是先作条件判断,第二种情况是先执行一次循环,然后判断是否继
6、续循环。先执行一次循环,然后判断是否继续循环。基本逻辑图下图所示。基本逻辑图下图所示。第6章 汇编语言程序设计第6章 汇编语言程序设计6.1.3 流程图画法规定流程图画法规定 1流程图的概念流程图的概念流流程程图图是是由由特特定定的的几几何何图图形形、指指向向线线、文文字字说说明明来来表表示示数数据据处处理理的的步步骤骤,形形象象描描述述逻逻辑辑控控制制结结构构以以及及数数据据流流程程的的示示意意图图。流流程程图图具具有有简简洁洁、明明了了、直观的特点。直观的特点。2流程图符号表示流程图符号表示(1)起止框:表示程序)起止框:表示程序的开始和结束。的开始和结束。起止框起止框第6章 汇编语言程序
7、设计(2)判断框)判断框(3)处理框)处理框(4)调用框)调用框 第6章 汇编语言程序设计(5)指向线)指向线(6)连接框)连接框 返回本节返回本节第6章 汇编语言程序设计6.2顺序程序设计顺序程序设计下面举例说明顺序程序的设计。下面举例说明顺序程序的设计。【例例6.1】试编写一程序计算以下表达式的值。试编写一程序计算以下表达式的值。=(v-(*+-540)/x式中式中x、v均为有符号字数据。均为有符号字数据。设设、的的值值存存放放在在字字变变量量、V中中,结结果果存存放放在在双双字字变变量量之之中中,程程序序的的流流程程图图如如图图6.1所示。所示。返回本章首页返回本章首页第6章 汇编语言程
8、序设计图图6 6.1 1 顺顺序序运运算算程程序序流流程程图图第6章 汇编语言程序设计源程序如下:源程序如下:DATASEGMENTXDW200YDW100ZDW3000VDW10000W DW2 DUP(?)(?)DATAENDSSTACK SEGMENT STACK DB 200 DUP(0)STACK ENDSCODESEGMENTASSUME DS:DATA,CS:CODE,SS:STACK第6章 汇编语言程序设计START:MOVAX,DATAMOV DS,AX;DATAAXMOV AX,X IMULY;(;(X)*(Y)DX:AXMOV CX,AXMOV BX,DX;(;(DX:A
9、X)(BX:CX)MOV AX,ZCWD;(;(Z)符号扩展)符号扩展ADD CX,AXADC BX,DX;(;(BX:CX)+(DX:AX)(BX:CX)SUB CX,540SBB BX,0;(;(BX:CX)-540(BX:CX)MOV AX,V 第6章 汇编语言程序设计CWD;(;(V)符号扩展)符号扩展SUBAX,CXSBBDX,BX;(DX:AX)-(BX:CX)(DX:AX)IDIV X;(;(DX:AX)/XMOVW,AX;商;商WMOVW+2,DX;余数;余数DXW+2MOVAH,4CHINT 21HCODE ENDS;退出;退出DOS 状态状态ENDSTART第6章 汇编语言
10、程序设计【例例6.2】【例例6.2】已已知知某某班班学学生生的的英英语语成成绩绩按按学学号号(从从1开开始始)从从小小到到大大的的顺顺序序排排列列在在TAB表表中中,要要查查的的学学生生的的学学号号放放在在变变量量NO中中,查查表表结结果果放放在变量在变量ENGLISH中。编写程序如下:中。编写程序如下:第6章 汇编语言程序设计STACK SEGMENT STACKDB 200 DUP(0)STACK ENDSDATASEGMENTTABDB 80,85,86,71,79,96 DB 83,56,32,66,78。84NO DB 10ENGLISTDB?DATAENDSCODE SEGMENT
11、第6章 汇编语言程序设计 ASSUME DS:DATA,SS:STACK,CS:CODEBEGIN:MOVAX,DATAMOV DS,AXLEA BX,TAB MOV AL,NODEL ALXLATTABMOV ENGLISH,ALMOV AH,4CHINT21HCODEENDSEND BEGIN第6章 汇编语言程序设计6.3分支程序的结构和程序设计分支程序的结构和程序设计6.3.1 分支程序的结构形式分支程序的结构形式6.3.2 分支结构的程序设计分支结构的程序设计返回本章首页返回本章首页第6章 汇编语言程序设计6.3.1 分支程序的结构形式分支程序的结构形式 8086/8088指指令令系系
12、统统具具有有许许多多种种条条件件转转移移指指令令,这这就就说说明明8086/8088计计算算机机系系统统具具有有很很强强的的逻逻辑辑判判断断能能力力,并并且且能能够够根根据据这这种种逻逻辑辑判判断断选选择择执执行行不不同同的的程程序序段段。也也就就是是说说,当当条条件件满满足足时时进进行行某某种种处处理理,当当条条件件不不满满足足时时又进行另外一种处理。又进行另外一种处理。分支程序的结构可以有两种形式:双分分支程序的结构可以有两种形式:双分支结构和多分支结构。支结构和多分支结构。流程图如下所示。流程图如下所示。第6章 汇编语言程序设计(1)双分支结构第6章 汇编语言程序设计(2)双分支结构第6
13、章 汇编语言程序设计(3)多分支结构程序设计第6章 汇编语言程序设计6.3.2 分支结构程序设计分支结构程序设计1简单的双分支程序设计简单的双分支程序设计【例例6.3】已知在内存中有一个字节单元已知在内存中有一个字节单元NUM,存有带,存有带符号数据,要求计算出它的绝对值后,放入符号数据,要求计算出它的绝对值后,放入RESULT单元中。单元中。题目分析:根据数学中绝对值的概念知道,一个题目分析:根据数学中绝对值的概念知道,一个正数的绝对值是它本身,而一个负数的绝对值是它的正数的绝对值是它本身,而一个负数的绝对值是它的相反数;要计算一个数的相反数,需要完成减法运算,相反数;要计算一个数的相反数,
14、需要完成减法运算,即用即用0减去这个数。减去这个数。8086/8088指令系统中有专门的指令系统中有专门的求相反数的指令求相反数的指令NEG。流程图如下:流程图如下:第6章 汇编语言程序设计第6章 汇编语言程序设计程序如下:程序如下:DATASEGMENT X DB -25 RESULT DB?DATAENDSCODESEGMENT ASSUME DS:DATA,CS:CODESTART:MOVAX,DATA MOVDS,AX;初始化 MOVAL,X ;X取到AL中第6章 汇编语言程序设计 TEST AL,80H;测试AL正负 JZ NEXT ;为正,转NEXT NEG AL ;否则AL求补N
15、EXT:MOV RESULT,AL;送结果 MOV AH,4CH INT 21H;返回DOSCODEENDS END START ;汇编结束第6章 汇编语言程序设计2多分支程序设计多分支程序设计多多分分支支结结构构是是有有若若干干个个条条件件,每每一一个个条条件件对对应应一一个个基基本本操操作作。分分支支程程序序就就是是判判断断产产生生的的条条件件,哪哪个个条条件件成成立立,就就执执行行哪哪个个条条件件对对应应操操作作的的程程序序段段。也也就就是是说说,从若干分支中选择一个分支执行。从若干分支中选择一个分支执行。多多分分支支结结构构实实现现的的方方法法有有:条条件件选选择择法法、转转移移表表法
16、和地址表法。法和地址表法。条件选择法条件选择法一个条件选择指令可实现两路分支,多个条件选一个条件选择指令可实现两路分支,多个条件选择指令就可以实现多路分支。这种方法适用于分支数较择指令就可以实现多路分支。这种方法适用于分支数较少的情况。少的情况。第6章 汇编语言程序设计用条件转移指令实现程序分支用条件转移指令实现程序分支【例例6.4】编写计算下面函数值的程序:编写计算下面函数值的程序:1X0Y=0X=0 -1X设设输输入入数数据据为为X、输输出出数数据据Y,且且皆皆为为字字节变量。程序流程图如下图所示。节变量。程序流程图如下图所示。第6章 汇编语言程序设计第6章 汇编语言程序设计程序如下:程序
17、如下:DATA SEGMENT X DB -25 Y DB?DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART:MOV AX,DATA MOV DS,AX ;初始化;初始化 MOV AL,X ;X取到取到AL中中第6章 汇编语言程序设计CMP AL,0 ;Al中内容和中内容和0比较比较JGE BIG ;大于等于;大于等于0,转,转BIGMOV BL,-1 ;否则为负数,;否则为负数,1送送BLJMP EXIT ;转到结束位置;转到结束位置BIG:JE EE ;Al中中内内容容是是否否为为0,为为0转转EEMOV BL,1 ;否则为大于;否则为大于
18、0,1送送BL JMP EXIT ;转转到到结结束束位位置置EE:MOV BL,0 ;0送送BL第6章 汇编语言程序设计 EXIT:MOV Y,BL ;BL中内容送中内容送Y单元单元 MOV AH,4CH INT 21H ;程序结束程序结束CODE ENDS END START;汇编结束汇编结束第6章 汇编语言程序设计【例例6.5】【例例6.5】试试编编一一程程序序,求求三三个个带带符符号号字字数数据据中中的的最最大大值值,并并将将最最大大值值存存入入MAX字字单单元元中。中。设三个带符号数分别在三个字变量设三个带符号数分别在三个字变量X、Y、Z中存储。程序流程图如下图中存储。程序流程图如下图
19、所示所示 第6章 汇编语言程序设计第6章 汇编语言程序设计程序如下:程序如下:STACSEGMENT STACK DB 200 DUP(0)STACK ENDSDATASEGMENTX DW 00ABHY DW 5Z DW 200MAXDW?DATAENDSCODE SEGMENT第6章 汇编语言程序设计 ASSUME DS:DATA,SS:STACK,CS:CODE START:MOV AX,DATA MOVDS,AX MOVAX,X CMPAX,Y;XY?JGL1 MOVAX,Y;YZ?CMPAX,Z JGEXITL2:MOVAX,Z JMPEXIT 第6章 汇编语言程序设计L1:CMPA
20、X,Z;XZ?JLE L2EXIT:MOVMAX,AX MOVAH,4CH INT 21HCODE ENDS ENDSTART返回本节返回本节第6章 汇编语言程序设计转移表法转移表法 转移方法实现多分支的设计思想如下:转移方法实现多分支的设计思想如下:把把转转移移到到各各分分支支程程序序段段的的转转移移指指令令依依次次放放在在一一张张表表中中,这这张张表表称称为为转转移移表表。把把离离表表首首单单元元的的偏偏移移量量作作为为条条件件来来判判断断各各分分支支转转移移指指令令在在表表中中的的位位置置。当当进进行行多多分分支支条条件件判判断断时时,把把当当前前的的条条件件偏偏移移量量加加上上表表首首
21、地地址址作作为为转转移移地地址址,转转移移到到表表中中的的相相应应位位置置,继继续续执行无条件转移指令,达到多分支的目的。执行无条件转移指令,达到多分支的目的。第6章 汇编语言程序设计【例例6.6】设设某某程程序序有有8路路分分支支,试试根根据据给给定定的的N值值(18),将将程程序序的的执执行行转转移移到到其其中中的的一一路路分支。分支。程序流程如图程序流程如图下下所示。所示。第6章 汇编语言程序设计第6章 汇编语言程序设计程序如下:程序如下:DATASEGMENTTABDW P1,P2,P3,P4,P5,P6,P7,P8N DB 5DATAENDSSTACK SEGMENT DB 200
22、DUP(0)STACK ENDSCODE SEGMENT ASSUME DS:DATA,SS:STACK,CS:CODE 第6章 汇编语言程序设计START:MOVAX,DATAMOVDS,AX MOVAL,NDELALADDAL,ALMOVBM,ALMOVBH,0JMPTABBX第6章 汇编语言程序设计P1:JMPEXITP2:JMPEXITP2:JMPEXITP3:第6章 汇编语言程序设计 JMP EXIT P8:EXIT:MOVAH,4CH INT 21HCODE ENDS ENDSTART上上述述程程序序中中的的无无条条件件转转移移指指令令的的转转移移地地址址采采用用的的是是变变址址寻
23、寻址址。同同理理,转转移移地地址址也也可可以以用用寄寄存存器器间间接接寻寻址或基址加变址寻址,读者可自行考虑。址或基址加变址寻址,读者可自行考虑。返回本节返回本节第6章 汇编语言程序设计6.4循环程序设计循环程序设计6.4.1 循环程序的结构循环程序的结构6.4.2 循环程序的设计方法循环程序的设计方法返回本章首页返回本章首页第6章 汇编语言程序设计6.4.1 循环程序的结构循环程序的结构1循环结构的组成循环结构的组成2循环程序的结构循环程序的结构3循环程序控制方法循环程序控制方法第6章 汇编语言程序设计1.循环程序的组成循环程序的组成(1)循环初始化部分)循环初始化部分(2)循环体)循环体(
24、3)循环参数修改部分)循环参数修改部分(4)循环控制部分)循环控制部分 第6章 汇编语言程序设计2循环程序的结构循环程序的结构 在程序设计中,常见的循环结构有两在程序设计中,常见的循环结构有两种:一种是先执行循环体,然后判断循环是种:一种是先执行循环体,然后判断循环是否继续进行;另一种是先判断是否符合循环否继续进行;另一种是先判断是否符合循环条件,符合则执行循环体,否则退出循环。条件,符合则执行循环体,否则退出循环。两种循环结构如下图所示。两种循环结构如下图所示。第6章 汇编语言程序设计第6章 汇编语言程序设计3.3.循环控制的方法循环控制的方法(1 1)计数控制法)计数控制法(2)条件控制法
25、条件控制法(3)混合控制法)混合控制法第6章 汇编语言程序设计6.4.2 循环程序设计方法循环程序设计方法1单循环程序设计单循环程序设计2多重循环程序设计多重循环程序设计第6章 汇编语言程序设计1单循环程序设计单循环程序设计【例例6.7】已已知知有有几几个个元元素素存存放放在在以以BUF为为首首址址的字节存贮区中,试统计其中正元素的个数。的字节存贮区中,试统计其中正元素的个数。显显然然,每每个个元元素素为为一一个个8位位有有符符号号二二进进制制数数,统统计计其其中中正正元元素素的的个个数数可可用用循循环环程程序序实实现现。其程序流程图如下图所示。其程序流程图如下图所示。第6章 汇编语言程序设计
26、第6章 汇编语言程序设计【例例6.8】【例例6.8】编编写写程程序序完完成成求求123N的的累累加加和和,直直到到累累加加和和超超过过1000为为止止。统统计计被被累累加加的的自自然然数数的的个个数数送送CN单单元元,累累加加和和送送SUM。流程图如下图所示。流程图如下图所示。第6章 汇编语言程序设计第6章 汇编语言程序设计程序如下:程序如下:DATA SEGMENT SUM DW?CN DW?DATA ENDSCODESEGMENT ASSUME CS:CODE,DS:DATASTART:MOV AX,DATA MOV DS,AX ;初始化;初始化 MOV AX,0 ;0送送AX第6章 汇编
27、语言程序设计 MOV BX,0 ;0送送BXLP:INC BX ;BX加加1 ADD AX,BX ;求累加和;求累加和 CMP AX,1000;比较;比较 JBE LP ;1000转转 MOV SUM,AX MOV CN,BX ;送结果;送结果 MOV AH,4CH INT 21H ;返回;返回DOS CODE ENDS END START ;汇编结束;汇编结束第6章 汇编语言程序设计2.多重循环程序设计多重循环程序设计【例例6.96.9】在在以以BUFBUF为为首首址址的的字字存存储储区区中中存存放放有有N N个个有有符符号号数数,现现需需将将它它们们按按大大到到小小的的顺顺序序排排列列在在
28、BUFBUF存存储储区区中中,试试编编写写其程序。其程序。我我们们采采用用冒冒泡泡排排序序算算法法从从第第一一个个数数开开始始依依次次对对相相邻邻两两个个数数进进行行比比较较,如如次次序序对对,则则不不交交换换两两数数位位置置;如如次次序序不不对对则则使使这这两两个个数数交交换换位位置置。可可以以看看出出,第第一一遍遍需需比比较较(N-N-1 1)次次,此此时时,最最小小的的数数已已经经放放到到了了最最后后;第第二二遍遍比比较较只只需需考考虑虑剩剩下下的的(N-1N-1)个个数数,即即只只需需比比较较(N-2N-2)次次;第第三三遍遍只只需需比比较较(N-3N-3)次次,整整个个排排序序过过程
29、程最最多多需需(N-1N-1)遍。如下面的遍。如下面的4 4个数即是采用冒泡排序比较的例子。个数即是采用冒泡排序比较的例子。第6章 汇编语言程序设计数数108169032第一遍第一遍101690328第二遍第二遍169032108第三遍第三遍903216108程序流程图如图程序流程图如图4.9所示。所示。第6章 汇编语言程序设计第6章 汇编语言程序设计程序如下:程序如下:DATASEGMENTBUFDW 3,-4,6,7,9,2,0,-8,-9,-10,20N=(-BUF)/2DATAENDSSTACKSEGNMENT STACKDB 200 DUP(0)STACKENDSCODESEGMEN
30、TASSUME CS:CODE,DS:DATA,SS:STACK第6章 汇编语言程序设计START:MOVAX,DATAMOVDS,AXMOVCX,NDECCXLOOP1:MOVDX,CXMOVBX,0LOOP2:MOVAX,BUFBXCMPAX,BUFBX+2JGELXCHGAX,BUFBX+2MOVBUFBX,AX第6章 汇编语言程序设计L:ADDBX,2DECCXJNELOOP2MOVCX,DXLOOPLOOP1MOVAH,4CHINT21HCODEENDSENDSTART第6章 汇编语言程序设计程序运行后,程序运行后,BUF区中的内容如下:区中的内容如下:20,9,7,6,3,2,0,
31、-4,-8,-9,-10若要对若要对N个无符号数按由大到小的顺序排列,个无符号数按由大到小的顺序排列,只需将指令只需将指令“JGE L”改为改为“JAE L”即可。即可。返回本节返回本节第6章 汇编语言程序设计6.4子程序结构与设计方法子程序结构与设计方法6.4.1 子程序的基本概念子程序的基本概念6.4.2 子程序的结构子程序的结构6.4.3 子程序的定义和参数传递子程序的定义和参数传递6.4.4 子程序应用举例子程序应用举例返回本章首页返回本章首页第6章 汇编语言程序设计6.4.1 子程序的概念子程序的概念在在程程序序设设计计中中,我我们们会会发发现现一一些些多多次次无无规规律律重重复复的
32、的程程序序段段或或语语句句序序列列。解解决决此此类类问问题题一一个个行行之之有有效效的的方方法法就就是是将将它它们们设设计计成成可可供供反反复复调调用用的的独独立立的的子子程程序序结结构构,以以便便在在需需要时调用。在汇编语言中,子程序又称过程。要时调用。在汇编语言中,子程序又称过程。调用子程序的程序称为主调程序或主程序。调用子程序的程序称为主调程序或主程序。返回本节返回本节第6章 汇编语言程序设计6.4.2 子程序的结构子程序的结构子程序的基本结构包括以下几个部分:子程序的基本结构包括以下几个部分:(1 1)子程序说明)子程序说明 (2 2)保护现场和恢复现场)保护现场和恢复现场 (3 3)
33、子程序体)子程序体 (4 4)子程序返回)子程序返回 返回本节返回本节第6章 汇编语言程序设计6.4.3 子程序的定义和参数传递子程序的定义和参数传递1.1.子程序的定义子程序的定义子子程程序序的的定定义义是是由由过过程程定定义义伪伪指指令令PROCPROC和和ENDPENDP来来完完成成的的。其格式如下:其格式如下:过程名过程名 PROC NEAR/FARPROC NEAR/FAR 过程名过程名 ENDPENDP其其中中PROCPROC表表示示过过程程定定义义开开始始,ENDPENDP表表示示过过程程定定义义结结束束。过程名是过程入口地址的符号表示。过程名是过程入口地址的符号表示。一般过程名
34、同标号一样,具有三种属性,即段属性、偏一般过程名同标号一样,具有三种属性,即段属性、偏移地址属性以及类型属性。移地址属性以及类型属性。第6章 汇编语言程序设计2主程序与子程序参数传递方式主程序与子程序参数传递方式(1)寄存器法)寄存器法(2)约定单元法)约定单元法(3)堆栈法)堆栈法返回本节返回本节第6章 汇编语言程序设计6.4.4 子程序应用举例子程序应用举例【例例6.10】将将一一个个给给定定的的二二进进制制数数按按位位转转换换成成相相应应的的ASCII码码字字符符串串,送送到到指指定定的的存存储储单单元元并并显显示示。如如二二进进制制数数10010011转转换换成成字字符符串串为为100
35、10011。要要求求将将转转换换过过程程写写成成子子程程序序,且且子子程程序序应应具具有有较较好好的的通通用用性性,而而必必须须能实现对能实现对8倍和倍和16倍二进制数的转换。倍二进制数的转换。第6章 汇编语言程序设计入口参数:入口参数:DX存放待转换的二进制数存放待转换的二进制数CX存放待转换数的位数(存放待转换数的位数(8位或位或16位)位)DI存放存放ASCII码首地址码首地址出口参数:转换后的字符串存放在以出口参数:转换后的字符串存放在以DI作指针的字节存贮区中作指针的字节存贮区中程序如下:程序如下:DATASEGMENTNUM8 DB93HNUM16 DW0ABCDHASCBUFDB
36、20DUP(0)DATAENDS第6章 汇编语言程序设计CODESEGMENTASSUME DS:DATA,CS:CODE,SS:STACKSTART:MOVAX,DATAMOVDS,AXMOVDX,0MOVDL,NUM8;转换二进制数送;转换二进制数送DXMOVCX,8;置位数;置位数8LEADI,ASCBUF;字符串首址;字符串首址DICALLBTASC;调用子程序;调用子程序BTASCMOVDI,BYTE PTR 0DHMOVDI+1,BYTE PTR 0AH第6章 汇编语言程序设计 MOVDI+2,BYTE PTR$LEA DX,ASCBUFMOV AH,9INT21HMOV DX,N
37、UM16MOV CX,16;置位数;置位数16LEA DI,ASCBUFCALLBTASC MOVDL,BYTE PTR 0DHMOV DL+1,BYTE PTR 0AHMOV DL+2,BYTE PTR ;显示转换后的字符串显示转换后的字符串LEA DX,ASCBUF MOV AH,9 INT21H第6章 汇编语言程序设计BTASCPROCPUSHAX;保存;保存AXMOVAL,0CMPCX,8;比较;比较8位数位数JNEL1;直接转换;直接转换16位数位数MOVDH,DL;8位数转换送位数转换送DHL1:ROLDX,,1;DX最高位移入最高位移入CFRCLAL,1;CF移入移入AL最低位最低位ADDAL,30HMOVDI,AL第6章 汇编语言程序设计INCDILOOP L1POPAXRETBTASCENDPCODEENDSENDSTART返回本节返回本节第6章 汇编语言程序设计Thank you very much!本章到此结束,谢谢您的光临本章到此结束,谢谢您的光临!返回本章首页返回本章首页结结 束束