




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精选优质文档-倾情为你奉上实 验 报 告课程名称 微机原理与汇编语言 学院 计算机工程学院 班级 11计3Z 学号 姓名 王祖陆 2013年05月27日设计一个汇编语言程序,具体内容如下:一、功能:(1) 从键盘输入N个带符号数(N的值也从键盘输入,N<=65535);带符号数为16位二进制数范围);(2) 找出这N个数中的最大值和最小值,并且显示出来;(3) 计算这N个数的平均值,并且显示出来。二、程序分析:(1) 需要对程序进行N的值的输入,来确定循环的次数,决定了循环的次数就可以确定数组元素的个数,为下一步数组元素的值的输入做准备。(2) 由(1)中确定N的值来决定循环的次数,每一
2、次的循环,指针向后移两位,因为我们定义的时候是字大小,占用2个字节的空间,每一次的循环调用一次输入函数,以确定数组中每个元素的值。(3) 调用清屏语句将屏幕上的输入的痕迹清除,同时用循环调用输出函数,将用户之前输入的值按一定的格式输出到屏幕上。(4) 判断最大数最小数,用循环遍历数组中的每一个元素,同时与最大数最小数进行比较,如果该数比最大数大,则将其保存到最大数中,如果该数比最小数小,则将其保存到最小数中。(注:最大数和最小数需要开辟内存空间来保存,同时在进入循环之前应该给其一个值,这里我给的是数组中第一个元素的值)(5) 计算平均数,同样用循环将其累加的和除以N的值即得到最终的结果三、程序
3、相关说明:(1) 程序中,COUNT保存的是循环的次数,即数组的个数N(2) ARRAY为定义的数组,MAXAY,MINAY分别对应的是最大数,最小数,WTEMP为临时变量(3) MESS系列保存的内容为输入输出时的提示信息无实际作用(4) INPUT子函数为输入N的值,READ函数为输入一个-32768+32767的数,WRITE为输出函数,即将数组中某一元素的值输出,IFMAX函数为判断最小值最大值函数,MEAN函数为求平均值函数(5) DPCRLF、NDPCRLF子函数为输出格式控制函数四、程序流程图主程序流程图 INPUT函数流程图READ函数流程图 WRITE函数流程图IFMAX函数
4、流程图 MEAN函数流程图五、源程序列表文件内容:Microsoft (R) Macro Assembler Version 5.00 5/27/13 18:44:33 Page 1-1 0000DSEG SEGMENT;数据段 0000 50 6C 65 61 73 65 20MESS1DB'Please input N "N<=65535":','$' 69 6E 70 75 74 20 4E 20 22 4E 3C 3D 36 35 35 33 35 22 3A 24 001B 50 6C 65 61 73 65 20MESS2D
5、B'Please input a number:','$' 69 6E 70 75 74 20 61 20 6E 75 6D 62 65 72 3A 24 0032 59 6F 75 72 20 69 6EMESS3 DB 'Your input is as follows:',0AH,0DH,'$' 70 75 74 20 69 73 20 61 73 20 66 6F 6C 6C 6F 77 73 3A 0A 0D 24 004E 0A 0D 4D 41 58 3A 24MESS4DB0AH,0DH,'MAX:'
6、;,'$' 0055 0A 0D 4D 49 4E 3A 24MESS5DB0AH,0DH,'MIN:','$' 005C 0A 0D 41 56 45 52 41MESS6DB0AH,0DH,'AVERAGE:','$',0AH,0DH 47 45 3A 24 0A 0D 0069 03E8ARRAY DW1000DUP(0) 0000 0839 ?COUNTDW? 083B ?WTEMPDW? 083D ?MAXAY DW? 083F ?MINAY DW ? 0841DSEG ENDS 0000SSEGSEGM
7、ENT STACK ;堆栈段 0000 0080DB80HDUP(0) 00 0080SSEG ENDS 0000CSEGSEGMENT ;代码段ASSUMEDS:DSEG,SS:SSEG,CS:CSEG 0000 B8 - RSTART:MOVAX,DSEG 0003 8E D8MOVDS,AX 0005 BA 0000 RMOV DX,OFFSET MESS1 0008 B4 09MOV AH,09H 000A CD 21INT 21H 000C E8 009F RCALLINPUT ;调用INPUT函数 000F 8B 0E 0839 RMOVCX,COUNT 0013 BB 0069
8、RMOV BX,OFFSET ARRAY 0016 BA 001B RAGAIN1:MOVDX,OFFSET MESS2 0019 B4 09MOVAH,9H 001B CD 21INT 21H 001D E8 00AB RCALLREAD ;调用READ函数 0020 89 07MOV BX,AX Microsoft (R) Macro Assembler Version 5.00 5/27/13 18:44:33 Page 1-2 0022 83 C3 02ADDBX,2 0025 E8 0185 RCALLDPCRLF;循环COUNT次 0028 E2 ECLOOPAGAIN1 002A
9、 B0 03MOVAL,3H 002C CD 10INT10H 002E 8B 0E 0839 RMOVCX,COUNT 0032 BB 0069 RMOV BX,OFFSET ARRAY 0035 BA 0032 RMOVDX,OFFSET MESS3 0038 B4 09MOVAH,9H 003A CD 21INT21H 003C 8B 07AGAIN2: MOV AX,BX 003E A3 083B RMOV WTEMP,AX 0041 E8 00EC RCALL WRITE ;调用WRITE函数 0044 83 C3 02ADD BX,2 0047 E8 0196 RCALL NDPC
10、RLF ;调用NDPCRLE函数 004A E2 F0LOOP AGAIN2 ;执行COUNT次循环 004C B4 02MOVAH,2 004E B2 0DMOV DL,0DH 0050 CD 21INT 21H 0052 B2 0AMOVDL,0AH 0054 CD 21INT21H 0056 8B 0E 0839 RMOVCX,COUNT 005A B8 0069 RMOVAX,OFFSET ARRAY 005D E8 0130 RCALLIFMAX ;调用IFMAX函数 0060 BA 004E RMOV DX,OFFSET MESS4 0063 B4 09MOV AH,09H 006
11、5 CD 21INT 21H 0067 A1 083D RMOV AX,MAXAY 006A A3 083B RMOV WTEMP,AX 006D E8 00EC RCALLWRITE ;调用WRITE函数输出MAXAY 0070 BA 0055 RMOVDX,OFFSET MESS5 0073 B4 09MOVAH,09H 0075 CD 21INT21H 0077 A1 083F RMOVAX,MINAY 007A A3 083B RMOVWTEMP,AX 007D E8 00EC RCALLWRITE ;调用WRITE函数输出MINAY 0080 BA 005C RMOV DX,OFFS
12、ET MESS6 0083 B4 09MOV AH,09H 0085 CD 21INT 21H 0087 A1 0839 RMOV AX,COUNT 008A 50PUSH AX 008B B8 0069 RMOV AX,OFFSET ARRAY 008E 50PUSH AX 008F E8 0157 RCALL MEAN 0092 83 C4 04ADD SP,4 0095 A3 083B RMOV WTEMP,AX 0098 E8 00EC RCALL WRITE ;调用WRITE函数输出平均值 Microsoft (R) Macro Assembler Version 5.00 5/27
13、/13 18:44:33 Page 1-3 009B B4 4CMOVAH,4CH 009D CD 21INT 21H 009FINPUTPROC 009F 50PUSH AX 00A0 E8 00AB RCALLREAD 00A3 A3 0839 RMOVCOUNT,AX 00A6 E8 0185 RCALLDPCRLF 00A9 58POP AX 00AA C3RET 00ABINPUTENDP 00ABREADPROC 00AB 53PUSHBX 00AC 51PUSHCX 00AD 52PUSHDX 00AE 33 DBXORBX,BX ;寄存器BX,CX清零 00B0 33 C9XO
14、RCX,CX 00B2 B4 01MOVAH,1H 00B4 CD 21INT 21H 00B6 3C 2BCMPAL,'+' ;是“+”,继续输入字符 00B8 74 07JZREAD1 00BA 3C 2DCMPAL,'-' ;是“-”,设置-1标志 00BC 75 07JNZREAD2 00BE B9 FFFFMOVCX,-1 00C1 B4 01READ1:MOVAH,1H ;继续输入字符 00C3 CD 21INT 21H 00C5 3C 30READ2:CMPAL,'0' ;不是0-9之间的字符,则输入结束 00C7 72 16JBR
15、EAD3 00C9 3C 39CMPAL,'9' 00CB 77 12JAREAD3 00CD 2C 30SUBAL,30H ;是0-9之间的字符,则转换为二进制数,利用移位指令,实现数值乘10 00CF D1 E3SHLBX,1 00D1 8B D3MOVDX,BX 00D3 D1 E3SHLBX,1 00D5 D1 E3SHLBX,1 00D7 03 DAADDBX,DX 00D9 B4 00MOVAH,0H 00DB 03 D8ADDBX,AX ;已输入数值乘10后,与新输入数值相加 00DD EB E2JMPREAD1 00DF 83 F9 00READ3:CMPCX,
16、0 00E2 74 02JZREAD4 00E4 F7 DBNEGBX ;是负数,进行求补 00E6 8B C3READ4:MOVAX,BX 00E8 5APOPDX 00E9 59POPCX 00EA 5BPOPBX 00EB C3RET 00ECREAD ENDP 00ECWRITEPROC 00EC 50PUSHAX Microsoft (R) Macro Assembler Version 5.00 5/27/13 18:44:33 Page 1-4 00ED 53PUSHBX 00EE 52PUSHDX 00EF A1 083B RMOVAX,WTEMP ;列出显示数据 00F2 8
17、5 C0TESTAX,AX ;判断数据是零、正数或负数 00F4 75 09JNZ WRITE1 00F6 B2 30MOV DL,'0' ;是零,显示0后退出 00F8 B4 02MOV AH,2 00FA CD 21INT 21H 00FC EB 2E 90JMP WRITE5 00FF 79 0CWRITE1: JNS WRITE2 ;是负数,显示- 0101 8B D8MOV BX,AX 0103 B2 2DMOVDL,'-' 0105 B4 02MOV AH,2 0107 CD 21INT21H 0109 8B C3MOV AX,BX 010B F7
18、D8NEG AX ;数据求补 010D BB 000AWRITE2:MOV BX,10 0110 53PUSHBX 0111 3D 0000WRITE3:CMP AX,0 0114 74 0AJZWRITE4 0116 2B D2SUBDX,DX 0118 F7 F3DIVBX 011A 80 C2 30ADDDL,30H ;余数转换为ASCII码 011D 52PUSHDX 011E EB F1JMPWRITE3 0120 5AWRITE4:POP DX 0121 80 FA 0ACMP DL,10 0124 74 06JE WRITE5 0126 B4 02MOV AH,2 0128 CD
19、 21INT 21H ;进行显示 012A EB F4JMP WRITE4 012C 5AWRITE5:POP DX 012D 5BPOP BX 012E 58POP AX 012F C3RET 0130WRITE ENDP 0130IFMAXPROC 0130 56PUSHSI 0131 53PUSHBX 0132 8B F0MOVSI,AX 0134 49DECCX 0135 8B 04MOVAX,SI 0137 8B D8MOV BX,AX 0139 83 C6 02MAXCK:ADD SI,2 013C 39 04CMP SI,AX 013E 7E 05JLE MINCK 0140 8
20、B 04MOV AX,SI ;如果AX<SI则将SI值存入AX 0142 EB 07 90JMP NEXT 0145 39 1CMINCK:CMP SI,BX 0147 7D 02JGE NEXT 0149 8B 1CMOV BX,SI ;如果BX>SI则将SI值存入BX 014B E2 ECNEXT:LOOP MAXCK Microsoft (R) Macro Assembler Version 5.00 5/27/13 18:44:33 Page 1-5 014D A3 083D RMOV MAXAY,AX 0150 89 1E 083F RMOV MINAY,BX 0154
21、5BPOPBX 0155 5EPOPSI 0156 C3RET 0157IFMAXENDP 0157MEANPROC 0157 55PUSHBP 0158 8B ECMOVBP,SP 015A 53PUSHBX ;保护寄存器 015B 51PUSHCX 015C 52PUSHDX 015D 56PUSHSI 015E 57PUSHDI 015F 8B 5E 04MOVBX,BP+4 ;从堆栈中取出缓冲区偏移地址存入BX 0162 8B 4E 06MOV CX,BP+6 ;从堆栈中取出数据个数存入CX中 0165 33 F6XORSI,SI ;SI清零,保存求和低16位 0167 8B FEMO
22、VDI,SI ;DI 保存求和高16位 0169 8B 07MEAN1:MOVAX,BX 016B 99CWD ;符号扩展 DX 016C 03 F0ADDSI,AX 016E 13 FAADC DI,DX 0170 83 C3 02ADD BX,2H 0173 E2 F4LOOPMEAN1 0175 8B C6MOV AX,SI 0177 8B D7MOV DX,DI 0179 8B 4E 06MOV CX,BP+6 017C F7 F9IDIVCX ;有符号数除法,求的平均值在AX中 017E 5FPOP DI ;恢复寄存器 017F 5EPOP SI 0180 5APOP DX 0181
23、 59POP CX 0182 5BPOPBX 0183 5DPOP BP 0184 C3RET 0185MEAN ENDP 0185DPCRLF PROC 0185 50PUSHAX 0186 52PUSHDX 0187 B4 02MOVAH,2 0189 B2 0DMOV DL,0DH 018B CD 21INT 21H 018D B4 02MOVAH,2 018F B2 0AMOVDL,0AH 0191 CD 21INT21H 0193 5APOPDX 0194 58POPAX 0195 C3RET 0196DPCRLF ENDP Microsoft (R) Macro Assembler
24、 Version 5.00 5/27/13 18:44:33 Page 1-6 0196NDPCRLF PROC 0196 50PUSHAX 0197 52PUSHDX 0198 B4 02MOVAH,2 019A B2 09MOV DL,9H 019C CD 21INT 21H 019E 5APOPDX 019F 58POPAX 01A0 C3RET 01A1NDPCRLF ENDP 01A1CSEGENDS END START Microsoft (R) Macro Assembler Version 5.00 5/27/13 18:44:33 Symbols-1Segments and
25、Groups: N a m e Length AlignCombine ClassCSEG . . . . . . . . . . . . . . 01A1PARANONEDSEG . . . . . . . . . . . . . . 0841PARANONESSEG . . . . . . . . . . . . . . 0080PARASTACKSymbols: N a m e Type Value AttrAGAIN1 . . . . . . . . . . . . . L NEAR0016CSEGAGAIN2 . . . . . . . . . . . . . L NEAR003CC
26、SEGARRAY . . . . . . . . . . . . . L WORD0069DSEGLength = 03E8COUNT . . . . . . . . . . . . . L WORD0839DSEGDPCRLF . . . . . . . . . . . . . N PROC0185CSEGLength = 0011IFMAX . . . . . . . . . . . . . N PROC0130CSEGLength = 0027INPUT . . . . . . . . . . . . . N PROC009FCSEGLength = 000CMAXAY . . . .
27、. . . . . . . . . L WORD083DDSEGMAXCK . . . . . . . . . . . . . L NEAR0139CSEGMEAN . . . . . . . . . . . . . . N PROC0157CSEGLength = 002EMEAN1 . . . . . . . . . . . . . L NEAR0169CSEGMESS1 . . . . . . . . . . . . . L BYTE0000DSEGMESS2 . . . . . . . . . . . . . L BYTE001BDSEGMESS3 . . . . . . . . .
28、. . . . L BYTE0032DSEGMESS4 . . . . . . . . . . . . . L BYTE004EDSEGMESS5 . . . . . . . . . . . . . L BYTE0055DSEGMESS6 . . . . . . . . . . . . . L BYTE005CDSEGMINAY . . . . . . . . . . . . . L WORD083FDSEGMINCK . . . . . . . . . . . . . L NEAR0145CSEGNDPCRLF . . . . . . . . . . . . N PROC0196CSEGLe
29、ngth = 000BNEXT . . . . . . . . . . . . . . L NEAR014BCSEGREAD . . . . . . . . . . . . . . N PROC00ABCSEGLength = 0041READ1 . . . . . . . . . . . . . L NEAR00C1CSEGREAD2 . . . . . . . . . . . . . L NEAR00C5CSEGREAD3 . . . . . . . . . . . . . L NEAR00DFCSEGREAD4 . . . . . . . . . . . . . L NEAR00E6CS
30、EGSTART . . . . . . . . . . . . . L NEAR0000CSEGWRITE . . . . . . . . . . . . . N PROC00ECCSEGLength = 0044WRITE1 . . . . . . . . . . . . . L NEAR00FFCSEGWRITE2 . . . . . . . . . . . . . L NEAR010DCSEGWRITE3 . . . . . . . . . . . . . L NEAR0111CSEGWRITE4 . . . . . . . . . . . . . L NEAR0120CSEGWRITE5 . . . . . . . . . . . . . L NEAR012CCSEGWTEMP . . . . . . . . . . . . . L WORD083BDSEGMicrosoft (R) Macro Assembler Version 5.00 5/27/13 18:44:33 Symbols-2FI
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 药物研发成本控制-深度研究
- 片上系统能效建模-深度研究
- 肤色护理产品的用户体验研究-深度研究
- 注册安全工程师考试安全生产法律法规(初级)新考纲试题集精析
- 2025年度网络安全防护工程师个人劳动合同书
- 二零二五年度车辆抵押贷款合同财务报告约定
- 2025年度酒吧特色酒吧街房屋租赁与品牌孵化合同
- 二零二五年度环境合规审计委托合同
- 2025年度酒吧租赁与餐饮服务合同
- 2025年度短期劳务合同(酒店行业客房管理)
- 安全风险分级管控和隐患排查治理双重预防机制建设管理制度
- 2025年深圳市高三语文一模“饥饿感缺失是好事吗”作文分析
- 2025-2030年中国新型交通运输材料行业运行状况及发展趋势分析报告
- 2025年常德科技职业技术学院单招职业适应性测试题库带答案
- 温州2025年浙江温州市生态环境科学研究院招聘笔试历年参考题库附带答案详解
- 2025年湖南省中职《计算机应用基础》普测核心考点试题库500题(重点)
- 全国计算机等级考试《二级MySQL数据库程序设计》专用教材【考纲分析+考点精讲+真题演练+强化习题】
- 特色天麻种源基地建设实施方案
- 2024年镇江市高等专科学校高职单招语文历年参考题库含答案解析
- 北京市青年宫招考工作人员高频重点提升(共500题)附带答案详解
- 《钻井安全培训材料》课件
评论
0/150
提交评论