微机原理程序设计考题-_第1页
微机原理程序设计考题-_第2页
微机原理程序设计考题-_第3页
微机原理程序设计考题-_第4页
微机原理程序设计考题-_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

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

文档简介

1、一.两个多位十进制数相加将两个多位十进制数相加,要求加数均以ASCII码形式各自顺序存放在以DATA1和DATA2为首的5个内存单元中(低位在前,结果送回DA TA1处。分析:整个程序分为4个部分:显示加数、转换、相加、输出结果。我们可以分别用子程序来完成各个部分的功能。1. 显示加数。可以利用DOS功能的显示单个字符的功能(02H,在主程序中让SI寄存器间指需要显示的内容。注意:在内存中存放的顺序是低位在前,而显示的时候要高位在前。子程序如下:DISPLAY PROCMOV CX , 5NEXT: MOV DL, SI ;取要显示的字符MOV AH, 02HINT 21HDEC SILOOP

2、 NEXTRETDISPLAY ENDP2. 转换。转换的目的是将以ASCII码形式表示的各位变成实际的大小。也就是将ASCII码的形式转换为BCD码的形式,一个字节表示一位。在主程序中让SI寄存器间指需要显示的内容。由于加数都是十进制的,所以只有数字09,因此只要让每个字符减去30H就得到了相应位的大小。子程序如下:CHANGE PROC ;转换子程序MOV CX , 5 ;取字符串长度放CX中NEXT1: MOV AL , SISUB AL , 30HMOV SI ,ALINC SILOOP NEXT1RETCHANGE ENDP3. 加法。可以利用带进位的加法ADC按位相加,再进行十进制

3、调整。注意从最低位开始加起。在主程序中让SI间指被加数,DI间指加数。子程序如下:ADDC PROCCLC ;清进位位MOV CX, 5 ;设置循环次数P1: MOV AL, SIADC AL, DIAAAMOV SI,AL ;保存结果INC SIINC DILOOP P1RETADDC ENDP4. 显示结果。结果在内存中是以BCD码的形式存放,在显示之前需要先转换成ASCII码,直接加上30H就可以,和显示加数一样,还是单个字符显示。注意先显示最高位.子程序如下:RESULT PROCMOV CX,5LEA SI, data1+4P2: MOV BL, SIADD BL, 30HMOV D

4、L, BLMOV AH, 02HINT 21HDEC SILOOP P2RETRESULT ENDP5. 主程序。在主程序中要定义数据段用以存放加数和结果;完成程序的初始化;调用各个子程序;等等。主程序如下:DA TA SEGMENTSTR1 DB 0DH,0AH,$;回车换行data1 DB 32H,34H,35H,36H,38H ;被加数86542data2 DB 35H,38H,34H,32H,31H ;加数12485code SEGMENTASSUME CS: CODE,DS:DATAstart: MOV AX, DA TA ;置缓冲区地址于DS:DXMOV DS, AXLEA SI,

5、 data1+4 ;从最高位开始显示CALL DISPLAY ;显示被加数MOV DL ,+;显示“+”号MOV AH ,02HINT 21HLEA SI, data2+4 ;显示加数CALL DISPLAYMOV DL ,=;显示“=”号MOV AH ,02HINT 21HLEA SI , data1 ;取被加数首址于SI中CALL CHANGE ;被加数转换为BCD码LEA SI , data2 ;取加数首址于SI中CALL CHANGE ;加数转换为BCD码LEA DX, STR1 ;回车换行MOV AH, 09HINT 21HLEA SI, data1 ;取被加数LEA DI,data

6、2 ;取加数CALL ADDC ;加CALL RESULT ;结果的转换和显示MOV AH, 4CH ;返回DOSINT 21H ;各个子程序code ENDSEND start ;程序结束上述程序只能实现对内存中的两个数的加法,可以修改一下,实现计算从键盘上输入两个数,求它们的和。DA TA SEGMENTSTR1 DB PLEASE INPUT THE FIRST ADDER,0DH,0AH, $STR2 DB PLEASE INPUT THE SECOND ADDER,0DH,0AH,$data1 DB 10,10 DUP(?data2 DB 10,10 DUP(?code SEGMEN

7、TASSUME CS: CODE,DS:DATAstart: MOV AX, DA TA ;置缓冲区地址于DS:DXMOV DS, AXLEA DX, STR1MOV AH, 09H;显示PLEASE INPUT THE FIRST ADDERINT 21HLEA DX , data1MOV AH , 0AHINT 21H ;输入被加数MOV CH , 0 二3求某个数据区内负数的个数设数据区的第一单元存放区内数据的个数,从第二单元开始存放数据,在区内最后一个单元存放结果。为统计数据区内负数的个数,需要逐个判断区内的每一个数据,然后将所有数据中凡是符号位为 1 的数据的个数累加起来,即得区内所

8、包含负数的个数。DATA SEGMENTSHU DB 88H,12H,82H,90H,22H,23HNUM EQU 6DATA ENDSSTACK SEGMENT PARA STACK STACKDB 100 DUP(?STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATAMAIN:MOV AX,DATAMOV DS,AXMOV DI,OFFSET SHUMOV CL,NUMMOV CH,0MOV BL,0LOOP1:MOV DL,DIAND DL,80HJZ GOINC BLGO:INC DIDEC CXJNZ LOOP1MOV AX,4C00HINT 21HCODE ENDSEND MAIN如何判断是负数我用了AND DL,80H和JZ,也就是判断最高位是

温馨提示

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

评论

0/150

提交评论