




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第三次上机实验报告时间:2013/4/26,18:30-21:30地点:南一楼803室实验人员:王涛一、题目输入一组有符号字数据。对该组数进行排序,按照从大到小的顺序以用户指定的进制形式输出排序后的结果。运行时:Pleaseinputnumbers:1230-100-5030025↙OutputFormat(1:decimal;2:hex;3:Octal):1↙300,123,25,0,-50,-100运行时:Pleaseinputnumbers:1230-100-5030025↙OutputFormat(1:decimal;2:hex;3:Octal):2↙12CH,7BH,19H,-32H,-64H二、要求:(1)画出程序流程图,给出寄存器、存储单元的分配方法,子程序的功能、入口参数及出口参数(对于各个子程序,也要说明其寄存器、存储单元的分配情况。在流程图中也列出相应子程序的名称)。(2)“数字串到字数据的转换”用子程序实现。要求:该子程序只实现一个数字串的转换。对于多个数字串,要多次调用该子程序。(可以借鉴教材中的示例,注意每个模块前都应该加上“.386”)。对于非数字串,以及超过一个字大小的数字串应给出提示。(3)“排序”使用子程序实现。(4)“数值数据到串的转换”用子程序实现。要求该子程序只实现一个数值数据的转换。(5)输入时,数字串之间的分割符可以是一个空格,也可以是一个标点符号(如逗号),数字串前可有一个正号或负号。输出时,数字串之间的分割符号为一个逗号加上一个空格。(6)观察执行CALL指令时,堆栈的变化,以及IP、CS的变化。(7)掌握跟踪进入子程序的方法。(8)定义宏并使用宏指令,观察宏扩展后的结果。(9)采用模块化程序的方法设计该程序。(10)写下必要的设计文档可以帮助我们理清思路,减少写程序时的错误;(11)同学们可以相互讨论算法思想,理清思路;(12)可以先不用子程序来实现程序的功能,然后再改写成子程序,最后拆分到不同模块;(13)在源程序中加上适当的注释。三、寄存器和存储单元分配和说明AX——中间寄存器。BX——往ARR字存储区送数指针,初值为ARR。CX——作以逗号分隔的一个十进制数字串长度计数器,初值为0。DX——按系统功能调用的规定使用。DI——往BUF字节存储区送输入的字符指针,初值为BUF。SI——调用F10T2子模块的入口参数,作从BUF区取字符指针。BUF——输入缓冲区首址。ARR——经转换得到的二进制数组存储区首址。COUNT——ARR存储区中数组元素个数计数器,初值为0。SIGN——输入字符串处理结束标志,1—处理结束,0—处理未结束。四、程序流程图子模块F2TN流程图返回NY恢复现场显示输出缓存区中的内容'$'[SI]RADIX[DI]EBX(SI)+1SI'-'[SI]EAX求补:返回NY恢复现场显示输出缓存区中的内容'$'[SI]RADIX[DI]EBX(SI)+1SI'-'[SI]EAX求补F2T10F2T10保护现场输出缓冲区首址BUFSI(EAX)>=0?保护现场输出缓冲区首址BUFSI(EAX)>=0?N开始0N开始0→ARR中数组元素个数计数器COUNTARR→BX,0→SIGNBUF→DI,0→CX输入一字符→AL是空格?调用F10T2子模块将BUF中的ASCII码转换为16位二进制数→AX(SI)=-1(AX)→ARR存储区,(COUNT)+1→COUNT(SIGN)=-1?调用QUEUE子模块将ARR存储区中的数从小到大排序→ARR区(AL)→BUF存储区(CX)+1→CX1→SIGN显示错误提示NYNNYY是回车符?调用F2TN子模块将ARR中的数转换为N进制ASCII码输出结束主模块流程图:NAME MAINEXTRN F10T2:NEAR,F2T10:NEAR,QUEUE:NEARIF1 INCLUDEMACRO.LIB ;将宏汇编在第一次扫描时加入一起回汇编ENDIF.386DATA SEGMENT USE16 PARA PUBLIC 'DATA'BUF DB 8 DUP(0) ;输入一个十进制数字串存储区ARR DB 32 DUP(0) ;转换后的二进制数组存储区SIGN DB 0 ;标记是否输入完0:未输完,1:输完COUNT DW 0 ;转换后的二进制数组元素个数计数器ERROR DB 'ISILLEGALDIGIT!$'INPUT1 DB 'PleaseInputNumbers:$'INPUT2 DB 'OutputFormat(1:decimal;2:hex;3:Octal):$'DATA ENDS STACK0 <200 DUP(0)>CODE SEGMENT USE16 PARA PUBLIC 'CODE' ASSUME DS:DATA,ES:DATA,CS:CODE,SS:STACKSTART: MOV AX, DATA MOV DS, AX MOV ES, AX LEA BX, ARR ;数组首址ARR->BX MOV COUNT, 0 MOV SIGN, 0 WRITE INPUT1BEG: LEA DI, BUF ;数字串存储区首址 MOV CX, 0NEXT0: MOV AH, 1 INT 21H CMP AL, '' ;输入数字用空格分隔 JE DIGIT CMP AL, 0DH ;判断是否为回车符 JNE P CMP COUNT, 0 JE EXIT INC SIGN ;已全部输完,标识置1 JMP DIGIT ;转digit调用F10T2子模块P: STOSB INC CX JMP NEXT0DIGIT: LEA SI, BUF MOV DX, 16 CALL F10T2 ;调用F10T2子模块 CMP SI, -1 ;判断是否有非法字符和溢出,转到ERR处 JE ERR MOV [BX], AX ADD BX, 2 INC COUNT CMP SIGN, 1 JE END0 JMP BEGEND0: MOV CX, COUNT LEA SI, ARR MOV BP, 1 ;对有符号数置1 CALL QUEUE ;调用QUEUE排序模块 CRLF ;换行 WRITE INPUT2 ;输出提示信息, MOV AH, 1 ;选择输出格式 INT 21H SUB AL, '1' XOR AH, AH MOV CX, AX CRLF ;换行 MOV BX, COUNT ; LEA SI, ARR ;待输出数组的首址送SIOUT2: MOV AX, [SI] ;取出一个待输出的数送到AX ADD SI, 2 MOV DX, 16 CALL F2TN ;调用F2TN子模块,将AX按用户指定格式输出 OUT1 '' ;输出用空格分隔 DEC BX JNE OUT2 ;未输完,转到OUT2继续 JMP EXIT ;输完,到EXIT结束ERR: CRLF WRITE ERROR ;对非法操作输出错误提示EXIT: MOV AH, 4CH INT 21HCODE ENDSEND STARTNAME F10T2;功能:将十进制ASCII码转换成有符号的二进制数AX/EAX,可转换的16位数范围是-32767~+32767;入口参数:; SI——指向待转换的十进制ASCII码存储区首址; CX——存放该十进制ASCII码串的长度;出口参数:; EBX——中间寄存器; SIGN——正负数标记PUBLIC F10T2.386DATA SEGMENT USE16 PARA PUBLIC 'DATA'SIGN DB ?DATA ENDSCODE SEGMENT USE16 PARA PUBLIC 'CODE' ASSUME CS:CODE, DS:DATAF10T2 PROC PUSH EBX MOV EAX, 0 MOV SIGN, 0 MOV BL, [SI] CMP BL, '+' JE F10 CMP BL, '-' JNE NEXT2 MOV SIGN, 1F10: DEC CX JZ ERRNEXT1: INC SI MOV BL, [SI]NEXT2: CMP BL, '0' JB ERR CMP BL, '9' JA ERR SUB BL, 30H MOVZX EBX, BL IMUL EAX, 10 JO ERR ADD EAX, EBX JO ERR JS ERR JC ERR DEC CX JNZ NEXT1 CMP DX, 16 JNE PP0 CMP EAX, 7FFFH JA ERRPP0: CMP SIGN, 1 JNE QQ NEG EAXQQ: POP EBX RETERR: MOV SI, -1 JMP QQF10T2 ENDPCODE ENDS ENDNAME F2TN;功能:将AX/EAX中有符号二进制数换成N进制数,N有用户指定;入口参数:; AX/EAX——存放待转换二进制数; CX——存放用户要求的进制数的序号;出口参数:; BUF——; FROMAT——存放对用户输入要求转换的进制数; EAX——存放待转换的二进制数; EBX——存放要转换的进制数; SI——存放待转换的N进制数ASCII码数字串的字节缓冲区首址; DI——存放各种进制数内容区的首址; CX——N进制数计数器(在RADIX子程序中使用); EDX——按除法指令和系统功能调用的规定使用PUBLIC F2TN .386DATA SEGMENT USE16 PARA PUBLIC 'DATA'BUF DB 12 DUP(?)FORMAT DB 10,16,8DATA ENDSCODE SEGMENT USE16 PARA PUBLIC 'CODE' ASSUME CS:CODE,DS:DATAF2TN PROC PUSH EBX PUSH SI PUSH DI LEA SI, BUF MOVSX EAX, AX OR EAX, EAX JNS PLUS NEG EAX MOV BYTE PTR [SI],'-' INC SIPLUS: LEA DI, OFFSETFORMAT ADD DI, CX MOV BL, [DI] MOVZX EBX, BL CALL RADIX MOV BYTE PTR [SI],'$' LEA DX, BUF MOV AH, 9 INT 21H POP DI POP SI POP EBX RETF2TN ENDPRADIX PROC PUSH CX PUSH EDX XOR CX, CXLOP1: XOR EDX, EDX DIV EBX PUSH DX INC CX OR EAX, EAX JNZ LOP1LOP2: POP AX CMP AL, 10 JB L1 ADD AL, 7L1: ADD AL, 30H MOV [SI], AL INC SI LOOP LOP2 POP EDX POP CX RETRADIX ENDP CODE ENDS ENDNAME QUEUE;功能:将一组16位的有或无符号二进制数按从大到小顺序排列后存储在原来的区域,用冒泡排序;入口参数:; SI——从数组存储区取数指针,初值为该存储区首址; CX——待排序的数组元素个数; BP——有无符号排序的标识(BP=1为有符号数排序);所用寄存器:; DI——中间寄存器; AX——存放待比较数; DX——内循环计数器,CX为外循环计数器PUBLIC QUEUECODE SEGMENT USE16 PARA PUBLIC 'CODE' ASSUME CS:CODEQUEUE PROC PUSH AX PUSH DX PUSH DI MOV DI, SI DEC CX ;外循环计数器QU1: MOV DX, CX ;内循环计数器 MOV SI, DIQU2: MOV AX, [SI] CMP BP, 0 JE NO CMP AX, [SI+2] ;如果前一个数大于后一个数,则不交换 JG NOXCHXCH: XCHG [SI+2], AX MOV [SI], AXNOXCH: ADD SI, 2 DEC DX JNE QU2 LOOP QU1 POP DI POP DX POP AX RETNO: CMP AX, [SI+2] JBE NOXCH JMP XCHQUEUE ENDPCODE ENDS END; MACRO.LIBWRITE MACRO A LEA DX,A MOV AH,9 INT 21H ENDMCRLF MACRO MOV AH,2 MOV DL,0A
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 湖南省邵阳市二中2024-2025年高一下入学考试语文试题含答案
- 2025年钢材:一级钢合作协议书
- 2025年春初中苏科版八年级下册物理8.3摩擦力说课稿
- 二零二五年度服装寄存与展会租赁服务合作协议
- 2025年度安全软件开发人工费用支付合同
- 康养项目的可行性研究报告
- 中医护理学(第5版)课件 第4章 病机
- 有机蔬菜种植技术大全
- 智能家居集成系统
- 政府机构信息化建设规划方案
- 建设工程安全生产管理习题库及答案
- 项目1 多旋翼无人机的组装与调试
- 供应链管理:高成本、高库存、重资产的解决方案 第2版
- 马克笔建筑快速表现
- 桥台锥坡工程量计算公式
- 日本夏日祭活动鉴赏
- 中国教育史笔记全
- 某工业锅炉安装工程监理作业指导书
- 名校《强基计划》初升高衔接数学讲义(上)
- GB/T 41028-2021航空航天流体系统液压软管、管道和接头组件的脉冲试验要求
- GB/T 41-2000六角螺母C级
评论
0/150
提交评论