收藏 分享(赏)

汇编语言程序例题.doc

上传人:HR专家 文档编号:11403183 上传时间:2020-04-16 格式:DOC 页数:12 大小:2.35MB
下载 相关 举报
汇编语言程序例题.doc_第1页
第1页 / 共12页
汇编语言程序例题.doc_第2页
第2页 / 共12页
汇编语言程序例题.doc_第3页
第3页 / 共12页
汇编语言程序例题.doc_第4页
第4页 / 共12页
汇编语言程序例题.doc_第5页
第5页 / 共12页
点击查看更多>>
资源描述

1、【例5.1】试编写一程序计算以下表达式的值。=(v-(*+-540)/x 式中x、v均为有符号字数据。 设、的值存放在字变量、V中,结果存放在双字变量之中,程序的流程图如图5.1所示。DATA SEGMENTXDW200YDW100ZDW3000VDW10000WDW2 DUP(?)DATA ENDSSTACK SEGMENT STACK DB 200 DUP(0)STACK ENDSCODE SEGMENTASSUME DS:DATA,CS:CODE,SS:STACKSTART:MOVAX,DATAMOVDS,AX;DATAAXMOVAX,X IMUL Y;(X)*(Y)DX:AXMOVCX

2、,AXMOVBX,DX;(DX:AX)(BX:CX)MOVAX,ZCWD;(Z)符号扩展ADDCX,AXADCBX,DX;(BX:CX)+(DX:AX)(BX:CX)SUBCX,540SBBBX,0;(BX:CX)-540(BX:CX)MOVAX,V CWD;(V)符号扩展SUB AX,CXSBB DX,BX;(DX:AX)-(BX:CX)(DX:AX)IDIV X;(DX:AX)/XMOV W,AX;商WMOV W+2,DX;余数DXW+2MOV AH,4CHINT 21HCODE ENDS;退出DOS 状态END START 【例5.2】已知某班学生的英语成绩按学号(从1开始)从小到大的顺

3、序排列在TAB表中,要查的学生的学号放在变量NO中,查表结果放在变量ENGLISH中。编写程序如下:STACK SEGMENT STACKDB200 DUP(0)STACK ENDSDATA SEGMENTTABDB 80,85,86,71,79,96 DB 83,56,32,66,78,84NODB 10ENGLISTDB ?DATA ENDSCODE SEGMENTASSUME DS:DATA,SS:STACK,CS:CODEBEGIN:MOVAX,DATAMOVDS ,AXLEABX,TAB MOVAL,NODELALXLATTABMOVENGLISH,ALMOVAH,4CHINT21H

4、CODE ENDSENDBEGIN【例5.3】已知在内存中有一个字节单元NUM,存有带符号数据,要求计算出它的绝对值后,放入RESULT单元中。 题目分析:根据数学中绝对值的概念知道,一个正数的绝对值是它本身,而一个负数的绝对值是它的相反数;要计算一个数的相反数,需要完成减法运算,即用0减去这个数。8086/8088指令系统中有专门的求相反数的指令NEG。DATASEGMENT X DB -25 RESULT DB ?DATAENDSCODESEGMENT ASSUME DS:DATA,CS:CODESTART:MOVAX,DATA MOVDS,AX ;初始化 MOVAL,X ;X取到AL中T

5、EST AL,80H ;测试AL正负 JZ NEXT ;为正,转NEXT NEG AL ;否则AL求补NEXT:MOV RESULT,AL;送结果 MOV AH,4CH INT 21H ;返回DOSCODEENDS END START【例5.4】编写计算下面函数值的程序: 1X0Y=0X=0 -1X0 设输入数据为X、输出数据Y,且皆为字节变量。程序流程图如下图所示。DATA SEGMENT X DB -25 Y DB ?DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART:MOV AX,DATA MOV DS,AX ;初始化 MOV AL,X ;

6、X取到AL中CMPAL,0;Al中内容和0比较JGEBIG;大于等于0,转BIGMOVBL,-1;否则为负数,1送BLJMPEXIT;转到结束位置BIG: JEEE;Al中内容是否为0,为0转EEMOVBL,1;否则为大于0,1送BLJMPEXIT;转到结束位置EE:MOVBL,0;0送BLEXIT: MOV Y,BL;BL中内容送Y单元 MOV AH,4CH INT 21H;程序结束CODE ENDS END START;汇编结束【例5.5】试编一程序,求三个带符号字数据中的最大值,并将最大值存入MAX字单元中。设三个带符号数分别在三个字变量X、Y、Z中存储。程序流程图如下图所示STACKS

7、EGMENT STACK DB 200 DUP(0)STACKENDSDATASEGMENTX DW 00ABHY DW 5Z DW 200MAXDW ?DATAENDSCODESEGMENTASSUME DS:DATA,SS:STACK,CS:CODE START:MOVAX,DATA MOVDS,AX MOVAX,X CMPAX,Y;XY? JGL1 MOVAX,Y;YZ? CMPAX,Z JGEXITL2: MOVAX,Z JMPEXITL1:CMPAX,Z;XZ?JLEL2EXIT:MOVMAX,AX MOVAH,4CH INT21HCODEENDSENDSTART【例5.6】设某程序

8、有8路分支,试根据给定的N值(18),将程序的执行转移到其中的一路分支。程序流程如图下所示。DATASEGMENTTABDW P1,P2,P3,P4,P5,P6,P7,P8N DB 5DATAENDSSTACKSEGMENT DB 200 DUP(0)STACKENDSCODESEGMENT ASSUME DS:DATA,SS:STACK,CS:CODESTART:MOVAX,DATAMOVDS,AXMOVAL,NDELALADDAL,ALMOVBL,ALMOVBH,0JMPTABBXP1:JMPEXITP2:JMPEXITP2:JMPEXITP3: JMPEXITP8:EXIT:MOVAH,

9、4CH INT21HCODEENDS ENDSTART【例5.7】已知有几个元素存放在以BUF为首址的字节存贮区中,试统计其中正元素的个数。显然,每个元素为一个8位有符号二进制数,统计其中正元素的个数可用循环程序实现。其程序流程图如下图所示。例5.8】编写程序完成求123N的累加和,直到累加和超过1000为止。统计被累加的自然数的个数送CN单元,累加和送SUM。流程图如下图所示。DATA SEGMENT SUM DW ? CN DW ?DATAENDSCODESEGMENT ASSUME CS:CODE,DS:DATASTART:MOV AX,DATA MOV DS,AX ;初始化 MOV A

10、X,0 ;0送AXMOV 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 ;返回DOSCODE ENDS END START ;汇编结束【例5.9】在以BUF为首址的字存储区中存放有N个有符号数,现需将它们按大到小的顺序排列在BUF存储区中,试编写其程序。我们采用冒泡排序算法从第一个数开始依次对相邻两个数进行比较,如次序对,则不交换两数位置;如次序不对则使这两个数交换位置。可以看出,第一遍需比较(N-1)次,此

11、时,最小的数已经放到了最后;第二遍比较只需考虑剩下的(N-1)个数,即只需比较(N-2)次;第三遍只需比较(N-3)次,整个排序过程最多需(N-1)遍。如下面的4个数即是采用冒泡排序比较的例子。数108169032第一遍101690328第二遍169032108第三遍903216108程序流程图如图5.9所示。DATASEGMENTBUFDW 3,-4,6,7,9,2,0,-8,-9,-10,20N=(-BUF)/2DATAENDSSTACKSEGNMENT STACKDB 200 DUP(0)STACKENDSCODESEGMENTASSUME CS:CODE,DS:DATA,SS:STAC

12、KSTART:MOVAX,DATAMOVDS,AXMOVCX,NDECCXLOOP1:MOVDX,CXMOVBX,0LOOP2:MOVAX,BUFBXCMPAX,BUFBX+2JGELXCHGAX,BUFBX+2MOVBUFBX,AXL:ADDBX,2DECCXJNELOOP2MOVCX,DXLOOPLOOP1MOVAH,4CHINT21HCODEENDSENDSTART程序运行后,BUF区中的内容如下: 20,9,7,6,3,2,0,-4,-8,-9,-10若要对N个无符号数按由大到小的顺序排列,只需将指令“JGE L”改为“JAE L”即可。【例5.10】将一个给定的二进制数按位转换成相应

13、的ASCII码字符串,送到指定的存储单元并显示。如二进制数10010011转换成字符串为10010011。要求将转换过程写成子程序,且子程序应具有较好的通用性,而必须能实现对8倍和16倍二进制数的转换。入口参数:DX存放待转换的二进制数CX存放待转换数的位数(8位或16位)DI存放ASCII码首地址出口参数:转换后的字符串存放在以DI作指针的字节存贮区中程序清单:DATASEGMENTNUM8DB93HNUM16DW0ABCDHASCBUFDB20DUP(0)DATAENDSCODESEGMENTASSUME DS:DATA,CS:CODE, SS:STACKSTART:MOVAX,DATAM

14、OVDS,AXMOVDX,0MOVDL,NUM8;转换二进制数送DXMOVCX,8;置位数8LEADI,ASCBUF;字符串首址DICALLBTASC;调用子程序BTASCMOVDI,BYTE PTR 0DHMOVDI+1,BYTE PTR 0AH MOVDI+2,BYTE PTR $LEADX,ASCBUFMOVAH,9INT21HMOVDX,NUM16MOVCX,16;置位数16LEADI,ASCBUFCALLBTASC MOVDL,BYTE PTR 0DHMOVDL+1,BYTE PTR 0AHMOVDL+2,BYTE PTR ; 显示转换后的字符串LEADX, ASCBUF MOVAH,9 INT21HBTASCPROCPUSHAX;保存AXMOVAL,0CMPCX,8;比较8位数JNEL1;直接转换16位数MOVDH,DL;8位数转换送DHL1:ROLDX,,1;DX最高位移入CFRCLAL,1;CF移入AL最低位ADDAL,30HMOVDI,AL INCDILOOPL1POPAXRETBTASCENDPCODEENDSENDSTART

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 网络科技 > 计算机原理

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报