ImageVerifierCode 换一换
格式:DOCX , 页数:15 ,大小:172.90KB ,
资源ID:8135363      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8135363.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(汇编语言程序例题.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

汇编语言程序例题.docx

1、汇编语言程序例题【例5.1】试编写一程序计算以下表达式的值。 =(v-(*+-540)/x 式中x、v均为有符号字数据。 设、的值存放在字变量、V中,结果存放在双字变量之中,程序的流程图如图5.1所示。DATA SEGMENT X DW 200 Y DW 100 Z DW 3000 V DW 10000 W DW 2 DUP(?)DATA ENDSSTACK SEGMENT STACK DB 200 DUP(0)STACK ENDSCODE SEGMENT ASSUME DS:DATA,CS:CODE,SS:STACKSTART: MOV AX,DATA MOV DS,AX ;DATAAX M

2、OV AX,X IMUL Y ;(X)*(Y)DX:AX MOV CX,AX MOV BX,DX ;(DX:AX)(BX:CX) MOV AX,Z CWD ;(Z)符号扩展 ADD CX,AX ADC BX,DX ;(BX:CX)+(DX:AX)(BX:CX) SUB CX,540 SBB BX,0 ;(BX:CX)-540(BX:CX) MOV AX,V CWD ;(V)符号扩展 SUB AX,CX SBB DX,BX ;(DX:AX)-(BX:CX)(DX:AX) IDIV X ;(DX:AX)/X MOV W,AX ;商W MOV W+2,DX ;余数DXW+2 MOV AH,4CH I

3、NT 21HCODE ENDS ;退出DOS 状态 END START 【例5.2】已知某班学生的英语成绩按学号(从1开始)从小到大的顺序排列在TAB表中,要查的学生的学号放在变量NO中,查表结果放在变量ENGLISH中。编写程序如下:STACK SEGMENT STACK DB 200 DUP(0)STACK ENDSDATA SEGMENT TAB DB 80,85,86,71,79,96 DB 83,56,32,66,78,84 NO DB 10 ENGLIST DB ?DATA ENDSCODE SEGMENTASSUME DS:DATA,SS:STACK,CS:CODEBEGIN:M

4、OV AX,DATA MOV DS ,AX LEA BX,TAB MOV AL,NO DEL AL XLAT TAB MOV ENGLISH,AL MOV AH,4CH INT 21HCODE ENDS END BEGIN【例5.3】已知在存中有一个字节单元NUM,存有带符号数据,要求计算出它的绝对值后,放入RESULT单元中。 题目分析:根据数学中绝对值的概念知道,一个正数的绝对值是它本身,而一个负数的绝对值是它的相反数;要计算一个数的相反数,需要完成减法运算,即用0减去这个数。8086/8088指令系统中有专门的求相反数的指令NEG。DATA SEGMENT X DB -25 RESULT

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

6、EGMENT X DB -25 Y DB ?DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART:MOV AX,DATA MOV DS,AX ;初始化 MOV AL,X ;X取到AL中CMP AL,0 ;Al中容和0比较 JGE BIG ;大于等于0,转BIG MOV BL,-1 ;否则为负数,1送BL JMP EXIT ;转到结束位置BIG: JE EE ;Al中容是否为0,为0转EE MOV BL,1 ;否则为大于0,1送BL JMP EXIT ;转到结束位置EE:MOV BL,0 ;0送BLEXIT: MOV Y,BL ;BL中容送Y单元 M

7、OV AH,4CH INT 21H ;程序结束CODE ENDS END START ;汇编结束【例5.5】试编一程序,求三个带符号字数据中的最大值,并将最大值存入MAX字单元中。 设三个带符号数分别在三个字变量X、Y、Z中存储。程序流程图如下图所示 STACK SEGMENT STACK DB 200 DUP(0)STACK ENDSDATA SEGMENTX DW 00ABHY DW 5Z DW 200MAX DW ?DATA ENDSCODE SEGMENTASSUME DS:DATA,SS:STACK,CS:CODE START: MOV AX,DATA MOV DS,AX MOV A

8、X,X CMP AX,Y ;XY? JG L1 MOV AX,Y ;YZ? CMP AX,Z JG EXITL2: MOV AX,Z JMP EXITL1: CMP AX,Z ;XZ? JLE L2EXIT: MOV MAX,AX MOV AH,4CH INT 21HCODE ENDS END START【例5.6】设某程序有8路分支,试根据给定的N值(18),将程序的执行转移到其中的一路分支。程序流程如图下所示。DATA SEGMENTTAB DW P1,P2,P3,P4,P5,P6,P7,P8N DB 5DATA ENDSSTACK SEGMENT DB 200 DUP(0)STACK E

9、NDSCODE SEGMENT ASSUME DS:DATA,SS:STACK,CS:CODESTART: MOV AX,DATA MOV DS,AX MOV AL,N DEL AL ADD AL,AL MOV BL,AL MOV BH,0 JMP TABBXP1: JMP EXITP2: JMP EXITP2: JMP EXITP3: JMP EXIT P8: EXIT: MOV AH,4CH INT 21HCODE ENDS END START【例5.7】已知有几个元素存放在以BUF为首址的字节存贮区中,试统计其中正元素的个数。 显然,每个元素为一个8位有符号二进制数,统计其中正元素的个数

10、可用循环程序实现。其程序流程图如下图所示。例5.8】编写程序完成求123N的累加和,直到累加和超过1000为止。统计被累加的自然数的个数送CN单元,累加和送SUM。流程图如下图所示。 DATA SEGMENT SUM DW ? CN DW ?DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX ;初始化 MOV AX,0 ;0送AXMOV BX,0 ;0送BXLP: INC BX ;BX加1 ADD AX,BX ;求累加和 CMP AX,1000 ;比较 JBE LP ;1000转 MOV SUM,AX

11、 MOV CN,BX ;送结果 MOV AH,4CH INT 21H ;返回DOSCODE ENDS END START ;汇编结束【例5.9】在以BUF为首址的字存储区中存放有N个有符号数,现需将它们按大到小的顺序排列在BUF存储区中,试编写其程序。我们采用冒泡排序算法从第一个数开始依次对相邻两个数进行比较,如次序对,则不交换两数位置;如次序不对则使这两个数交换位置。可以看出,第一遍需比较(N-1)次,此时,最小的数已经放到了最后;第二遍比较只需考虑剩下的(N-1)个数,即只需比较(N-2)次;第三遍只需比较(N-3)次,整个排序过程最多需(N-1)遍。如下面的4个数即是采用冒泡排序比较的例

12、子。数 10 8 16 90 32第一遍 10 16 90 32 8第二遍 16 90 32 10 8第三遍 90 32 16 10 8程序流程图如图5.9所示。DATA SEGMENTBUF DW 3,-4,6,7,9,2,0,-8,-9,-10,20 N=(-BUF)/2DATA ENDSSTACK SEGNMENT STACK DB 200 DUP(0)STACK ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACKSTART: MOV AX,DATA MOV DS,AX MOV CX,N DEC CXLOOP1: MOV DX,CX MOV

13、BX,0LOOP2: MOV AX,BUFBX CMP AX,BUFBX+2 JGE L XCHG AX,BUFBX+2 MOV BUFBX,AXL: ADD BX,2 DEC CX JNE LOOP2 MOV CX,DX LOOP LOOP1 MOV AH,4CH INT 21HCODE ENDS END START程序运行后,BUF区中的容如下: 20,9,7,6,3,2,0,-4,-8,-9,-10若要对N个无符号数按由大到小的顺序排列,只需将指令“JGE L”改为“JAE L”即可。【例5.10】将一个给定的二进制数按位转换成相应的ASCII码字符串,送到指定的存储单元并显示。如二进制

14、数10010011转换成字符串为10010011。要求将转换过程写成子程序,且子程序应具有较好的通用性,而必须能实现对8倍和16倍二进制数的转换。入口参数: DX存放待转换的二进制数 CX存放待转换数的位数(8位或16位) DI存放ASCII码首地址出口参数: 转换后的字符串存放在以DI作指针的字节存贮区中程序清单:DATA SEGMENT NUM8 DB 93H NUM16 DW 0ABCDH ASCBUF DB 20 DUP(0)DATA ENDSCODE SEGMENT ASSUME DS:DATA,CS:CODE, SS:STACKSTART: MOV AX,DATA MOV DS,A

15、X MOV DX,0 MOV DL,NUM8 ;转换二进制数送DX MOV CX,8 ;置位数8 LEA DI,ASCBUF ;字符串首址DI CALL BTASC ;调用子程序BTASC MOV DI,BYTE PTR 0DH MOV DI+1,BYTE PTR 0AH MOV DI+2,BYTE PTR $ LEA DX,ASCBUF MOV AH,9 INT 21H MOV DX,NUM16 MOV CX,16 ;置位数16 LEA DI,ASCBUF CALL BTASC MOV DL,BYTE PTR 0DH MOV DL+1,BYTE PTR 0AH MOV DL+2,BYTE PTR ; 显示转换后的字符串 LEA DX, ASCBUF MOV AH,9 INT 21HBTASC PROC PUSH AX ;保存AX MOV AL,0 CMP CX,8 ;比较8位数 JNE L1 ;直接转换16位数 MOV DH,DL ;8位数转换送DHL1: ROL DX,,1 ;DX最高位移入CF RCL AL,1 ;CF移入AL最低位 ADD AL,30H MOV DI,AL INC DI LOOP L1 POP AX RETBTASC ENDPCODE ENDS END START

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1