微机原理与接口技术课程设计——数制转换
微机原理与接口技术课程设计——数制转换

目录1 任务分析 (2)1.1 进位计数制分析 (2)1.2 进制转换 (2)2 程序设计流程 (4)2.1程序流程图 (4)2.1设计思路 (5)3 程序设计 (6)3.1 堆栈段数据段程序设计 (6)3.2 主程序设计 (6)3.3换行子程序CRLF (8)3.4 输入二进制数子程序INBIN (8)3.5 输出八进制数子程序OUTOCT (9)3.6 输出十进制数子程序OUTDEC (10)3.7 输出十六进制数子程序OUTHEX (11)4 调试结果分析 (11)4.1 调试过程 (11)4.2 结果记录 (12)5 心得体会 (14)参考文献 (15)附件:源程序 (16)数制转换程序设计1 任务分析1.1 进位计数制分析进位计数制是人们利用符号来计数的方法。
一种进位计数制包含一组数码符号和两个基本因素。
数码是用不同的数字符号来表示一种数制的数值,这些数字符号位“数码”。
基是数制所使用的数码个数称为“基”。
权是某数制每一个所具有的值称为“权”。
二进制(Binary)是计算技术中广泛采用的一种数制。
二进制数据是用0和1两个数码来表示的数。
它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”,由18世纪德国数理哲学大师莱布尼兹发现。
当前的计算机系统使用的基本上是二进制系统。
八进制(Octal)逢八进一,基数为八,基本符号:0、1、2、3、4、5、6、7。
位权8∧i。
表示符号:O,并且开头一定要以数字0开头。
八进制的数较二进制的数书写方便,常应用在电子计算机的计算中。
十进制(Decimal)逢十进一,基本符号:0、1、2、3、4、5、6、7、8、9。
十六进制(Hexadecimal)是计算机中数据的一种表示方法.同我们日常中的十进制表示法不一样.它由0-9,A-F,组成.与10进制的对应关系是:0-9对应0-9;A-F对应10-15;N进制的数可以用0---(N-1)的数表示超过9的用字母A-F。
微型计算机原理与接口技术数制

表1-3 常用字符的ASCII码)
4小 结
1.了解计算机的系统结构,明确单片机是微机的一种。 2.计算机的基本数制是二进制,所有的信息都是以二进
制数的形式存放,为方便阅读,以十六进制表示,对 于二、十、十六几种进制之间的转换要求十分熟练。
3.计算机中的有符号数一律以补码表示,补码、原码。 真值之间的转换要求十分熟练。
设有原码机器数X, X>0, [X]补=[X]原 当 X<0, [X]补= 模-|X| 例如对于八位二进制数: x1=+4: [x1]补= 00000100=04H; x2= - 4: [x2]补 = 100H-4=FCH 对于16二进制位数: x2=+4: [x2]补= 0004H; x2= -4: [x2]补 = 10000H-4=FFFCH
表0-1 不同进位记数制对照表
二进制数和十六进制数间的相互转换 将二进制数从右(最低位)向左每4位为1组分
组,若最后一组不足4位,则在其左边添加0,以 凑成4位,每组用1位十六进制数表示。如:
1111111000111B→1 1111 1100 0111B→ 0001 1111 1100 0111B=1FC7H
求补得00001110+1=00001111B=15
③ 当数采用补码表示时,就可以把减法转换为加法。
例1:64-10=64+(-10)=54
[64]补=40H=0100 0000B
[10]补=0AH=0000 1010B
[-10]补=1111 0110B
做减法运算过程:
用补码相加过程
结果相同,其真值为36H(=54)。由于数的八位限制,最高位的进位 是自然丢失的(再计算机中。进位被存放在进位标志CY中的。)用补 码表示后,减法均可以用补码相加完成。因此,在微机中,凡是符号数 一律是用补码表示的。用加法器完成加、减运算,用加法器和移位寄存 器完成乘、除运算,简化计算机硬件结构。
微机原理-数码转换实验报告

微机原理-数码转换实验报告-CAL-FENGHAI.-(YICAI)-Company One1实验九数码转换一、实验目的1、掌握计算机常用数据编码之间的相互转换方法。
2、进一步熟悉DEBUG软件的使用方法。
二、实验内容1、ACSII码转换为非压缩型BCD码2、BCD码转换为二进制码3、十六进制数转换为ASCII码三、实验1、ACSII码转换为非压缩型BCD码DATA SEGMENT PARA 'DATA'DATA1 DB 8 DUP()DATA2 DB 8 DUP()DATA ENDSCODE SEGMENTASSUME CS:CODE, DS:DATASTART: MOV AX,SEG DATA1MOV DS,AXMOV DX,DATAMOV AH,0AHINT 21HLEA SI,DATA1MOV CL,[SI+1]LEA DI,DATA2ADD SI, 2CHK: MOV AL,[SI+2]CMP AL, '0'JB L01CMP AL, '9'JA L01SUB AL,30HMOV BL,ALMOV [DI], BLINC SIINC DIDEC CXJNZ CHKL01: MOV BL, 0FFHLOOP CHKMOV AH,4CH INT 21H CODE ENDSEND START2、BCD码转换为二进制码DATA SEGMENTBCD DB 1,2,3,4,5A DWDATA ENDSSTACK SEGMENT PARA STACK''STACK''STAPN DW 50 DUP()STACK ENDSCODE SEGMENTMAIN PROC FARASSUME DS:DATA,CS:CODE,SS:STACKSTART:MOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AXCALL CONVERTMOV A,BXRETMAIN ENDPCONVERT PROC NEARPUSH SIPUSH CXPUSH AXMOV SI,4L1:MOV AL,BCD[SI]CBWXCHG AX, BXMOV CX,10DMUL CXXCHG AX,BXADD BX,AXDEC SIJNZ L1POP AXPOP CXPOP SIEXIT:MOV AH,4CH INT 21H CONVERT ENDP CODE ENDSEND START3、十六进制数转换为ASCII码DATA SEGMENTDATA1 DW 2010HDATA2 DB 4 DUP()DATA ENDSSTACKS SEGMENT PARA STACK 'STACK'STACKS ENDSCODES SEGMENTASSUME SS:STACKS,CS:CODESASSUME DS:DATASSTART: MOV AX, DATAMOV DS, AXLEA SI, DATA1MOV AX, [SI]MOV CL, 12SHR AX, CLMOV BL, ALCALL ASCMOV DATA2, BLCALL XSMOV AX, [SI]MOV CL, 8SHR AX, CLAND AX, 000FHMOV BL, ALCALL ASCMOV DATA2+1, BLCALL XSMOV AX, [SI]MOV CL, 4SHR AX, CLAND AX, 000FHMOV BL, ALCALL ASCMOV DATA2+2, BLCALL XSMOV AX, [SI]AND AX, 000FHMOV BL, ALCALL ASCMOV DATA2+3, BLCALL XSMOV AH, 4CHINT 21HASC PROCCMP BL, 0AH JC LPADD BL, 07H LP: ADD BL, 30H RETASC ENDPXS PROCMOV DL, BL MOV AH, 02H INT 21HRETXS ENDPCODE ENDSEND START4、六进制数转换为十进制DATAS SEGMENTSTRING1 DB 0DH,0AH,'$'STRING2 DB 0DH,0AH,'$'DATAS ENDSSTACKS SEGMENTSTACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AXMOV DX,OFFSET STRING1MOV AH,9INT 21HMOV CL,10HMOV BX,0NEWCHAR:MOV AH,1INT 21HSUB AL,30HJB DISPCBWXCHG AX,BXMOV CH,0MUL CXXCHG AX,BXADD BX,AXJNC NEWCHARDISP:MOV DX,OFFSET STRING2MOV AH,9INT 21HMOV CX,10000AGAIN:MOV DX,0MOV AX,BXDIV CXMOV BX,DXMOV DL,ALADD DL,30HCMP DL,39HJLE NEXTADD DL,7H NEXT:MOV AH,2INT 21HMOV DX,0MOV AX,CXMOV CX,10DIV CXMOV CX,AXCMP CX,0JNZ AGAINMOV AH,4CH INT 21H CODES ENDS END START5、十进制转换成七段码DATA SEGMENTDATA1 DB 3,4TABLE DB 23H,56H,42H,75H,00H,24H,67H,39H,20H DATA2 DB 2 DUP()DATA ENDSCODE SEGMENTASSUME CS:CODE, DS:DATA ST: MOV DI, OFFSET BUFDAMOV CL, 80HMOV BX, OFFSET TABLE DISI: MOV BL, [DI+0]MOV AX, BXXLATMOV DX, PORTSEGOUT DX, ALMOV AL, CLMOV DX, PORTBITOUT DX, ALPUSH CXMOV CX, 30HDELAY: LOOP DELAYPOP CXCMP CL, 20HJZ QUITINC DISHR CL, 1JMP DISIQUITCODE ENDSEND ST。
微机原理数制转换报告

《微型计算机原理实验》报告学院:华工电子与信息学院专业班级:信息工程2班学号:姓名:实验名称:实验日期:2013/4/16一、实验内容:将ASCII码表示的十进制数转换为二进制数二、实验步骤1、从键盘输入五位的十进制数,保存在地址为3500H的存储单元2、把这个十进制数转换为十六进制数,所得结果保存在地址为3510H的存储单元中3、把这个十六进制的结果的每位取出来,转换为ACSII码值,存储在地址为3514H的存储单元中4、把以3514H为起始地址的字符串输出到屏幕,即可得到5位十进制数转换为二进制数的结果三、代码运算过程四、程序代码:DATA SEGMENT ORG 34FEH BUF DB 10 DB ?DB 10 DUP (?)ORG 3510HBBF DB 20 DUP (?),0DH,0AH,'$'IBF DB 'Please input one number:',0DH,0AH,'$'ICF DB 0DH,0AH,'The result is:',0DH,0AH,'$' DATA ENDSSTACK SEGMENT STACK 'STACK' STACK ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK START :MOV AX,DATA MOV DS,AX MOV DX,OFFSET IBF MOV AH,9 INT 21H MOV DX,0 MOV AH,0AH LEA DX,BUF INT 21H MOV SI,3500H MOV DX,0 MOV CX,04H MOV BX,000AH MOV AH,00HLOOP CIRCLEMOV AL,[SI] SUB AL,30H ADD AX,DX LEA SI,BBFMOV [SI],AX MOV DX,AX MOV CH,04H MOV CL,04H MOV BX,3514H NEXT:ROL AX,CL MOV DL,AL AND DL,0FH CMP DL,09H JBE PLADD DL,07H PL: ADD DL,30H MOV [BX],DL INC BX DEC CH JNZ NEXTMOV DX,OFFSET ICF MOV AH,9 INT 21H MOV AH,09HCIRCLE:MOV AL,[SI] SUB AL,30H ADD AX,DX MUL BX MOV DX,AX INC SI MOV AH,0五:实验2-5实验2:将从键盘输入的五位十进制数的ASCII 码已存在3500起始的内存单元中。
合肥工业大学电气与自动化专业实验中心 80X86微机原理及接口技术实验教程 1数制转换实验

1.2 数制转换实验1.2.1 实验目的1. 掌握不同进制数及编码相互转换的程序设计方法,加深对数制转换的理解。
2. 熟悉程序调试的方法。
1.2.2 实验设备PC 机一台,TD-PITE 实验装置一套。
1.2.3 实验内容及步骤计算机输入设备输入的信息一般是由ASCII 码或BCD 码表示的数据或字符,CPU 一般均用二进制数进行计算或其它信息处理,处理结果的输出又必须依照外设的要求变为ASCII 码、BCD 码或七段显示码等。
因此,在应用软件中,各类数制的转换是必不可少的。
计算机与外设间的数制转换关系如图1.11所示,数制对应关系如表1.1所示。
主机键 盘二进制光 电 机拨码开关数据开关CRT 显示打 印 机多段显示位 显 示二进制二进制ASCII 码BCD 码BCD 码ASCII 码ASCII 码ASCII 码图1.11 数制转换关系1. 将ASCII 码表示的十进制数转换为二进制数 十进制表示为:∑=--⨯=⨯+⋅⋅⋅+⨯+⨯ni ii01n 1n n n 10D 10D 10D 10D (1)D i 代表十进制数0,1,2,…,9; 上式转换为:012n 1n n ni iiD 10)D 10)D 10)D 10D (((10D +⨯+⋅⋅⋅+⨯+⨯+⨯⋅⋅⋅=⨯--=∑ (2)由式(2)可归纳十进制数转换为二进制数的方法:从十进制数的最高位D n 开始作乘10加次位的操作,依次类推,则可求出二进制数的结果。
表1.1 数制对应关系表十六进制BCD 码二进制机器码ASCII 码七段码 共阳 共阴 0 0000 0000 30H 40H 3FH 1 0001 0001 31H 79H 06H 2 0010 0010 32H 24H 5BH 3 0011 0011 33H 30H 4FH 4 0100 0100 34H 19H 66H 5 0101 0101 35H 12H 6DH 6 0110 0110 36H 02H 7DH 7 0111 0111 37H 78H 07H 8 1000 1000 38H 00H 7FH 9 1001 1001 39H 18H 67H A 1010 41H 08H 77H B101142H 03H7CHC 1100 43H 46H 39HD 1101 44H 21H 5EHE 1110 45H 06H 79HF 1111 46H 0EH 71H程序流程图如图1.12所示。
数制转换的课程设计报告

数制转换的课程设计报告一、教学目标本课程旨在让学生掌握数制转换的基本原理和方法,包括二进制、八进制、十进制和十六进制的相互转换。
学生应能够运用这些知识解决实际问题,提高他们在信息技术领域的应用能力。
通过本课程的学习,学生将能够:1.知识目标:理解数制转换的基本概念,掌握不同数制之间的转换规则和方法。
2.技能目标:能够运用所学的数制转换方法,进行不同进制之间的数值转换,并解决实际问题。
3.情感态度价值观目标:培养学生的逻辑思维能力,提高他们对信息技术领域的兴趣,培养他们积极探索和合作学习的精神。
二、教学内容本课程的教学内容主要包括数制转换的基本原理和方法。
具体包括:1.二进制与十进制的转换:理解二进制和十进制之间的关系,掌握二进制数转换为十进制数和十进制数转换为二进制数的方法。
2.二进制与八进制的转换:理解二进制和八进制之间的关系,掌握二进制数转换为八进制数和八进制数转换为二进制数的方法。
3.二进制与十六进制的转换:理解二进制和十六进制之间的关系,掌握二进制数转换为十六进制数和十六进制数转换为二进制数的方法。
4.八进制与十进制的转换:理解八进制和十进制之间的关系,掌握八进制数转换为十进制数和十进制数转换为八进制数的方法。
5.八进制与十六进制的转换:理解八进制和十六进制之间的关系,掌握八进制数转换为十六进制数和十六进制数转换为八进制数的方法。
6.十六进制与十进制的转换:理解十六进制和十进制之间的关系,掌握十六进制数转换为十进制数和十进制数转换为十六进制数的方法。
三、教学方法为了提高学生的学习兴趣和主动性,本课程将采用多种教学方法。
具体包括:1.讲授法:通过教师的讲解,让学生掌握数制转换的基本原理和方法。
2.讨论法:通过小组讨论,让学生深入理解数制转换的原理,并能够解决实际问题。
3.案例分析法:通过分析实际案例,让学生了解数制转换在信息技术领域的应用。
4.实验法:通过实际操作,让学生亲手进行数制转换的实验,加深对数制转换的理解。
数制转换c语言课程设计

数制转换c语言课程设计一、课程目标知识目标:1. 学生能理解数制的基本概念,掌握二进制、十进制、十六进制之间的转换方法;2. 学生能运用C语言编写程序实现数制转换,理解程序设计中的逻辑运算和位运算;3. 学生了解计算机中数值存储的方式,理解数制转换在计算机科学中的应用。
技能目标:1. 学生能够运用所学知识,独立编写和调试简单的数制转换C语言程序;2. 学生通过实际操作,提高编程解决问题的能力,培养逻辑思维和算法设计能力;3. 学生能够运用数制转换技能,解决实际问题,为后续学习计算机科学与技术打下基础。
情感态度价值观目标:1. 学生通过数制转换的学习,培养对计算机科学的兴趣和求知欲,激发学习积极性;2. 学生在小组合作学习过程中,培养团队协作精神和沟通能力;3. 学生在解决实际问题的过程中,树立正确的价值观,认识到科技对生活的影响,增强社会责任感。
课程性质:本课程为信息技术学科选修课程,以实践操作为主,结合理论讲解,培养学生的编程能力和逻辑思维。
学生特点:学生处于高中年级,具备一定的计算机操作基础,对编程有一定了解,好奇心强,喜欢动手实践。
教学要求:教师需关注学生的个体差异,提供个性化的指导,注重理论与实践相结合,提高学生的编程技能和解决问题的能力。
通过教学评估,确保学生达到课程目标,为后续学习打下坚实基础。
二、教学内容1. 数制基本概念:二进制、十进制、十六进制特点及表示方法;2. 数制转换原理:不同数制间的转换规则,重点讲解二进制与十进制的转换;3. C语言数制转换编程:位运算符的使用,逻辑运算符的应用,编写转换程序;4. 计算机中数值存储:了解计算机内部数值的存储方式,理解补码概念;5. 实践操作:分组讨论,编写和调试数制转换程序,进行案例分析;6. 知识拓展:数制转换在计算机中的应用,如IP地址转换、字符编码转换等。
教学内容安排:第一课时:数制基本概念及转换原理学习;第二课时:C语言数制转换编程方法讲解;第三课时:计算机中数值存储方式学习,实践操作指导;第四课时:分组讨论,编写和调试数制转换程序,进行案例分析;第五课时:知识拓展,了解数制转换在实际应用中的作用。
微机原理与接口技术课程设计课程设计

微机原理与接口技术课程设计一、课程设计目的本次课程设计旨在让学生通过实际操作掌握微机原理与接口技术的相关知识和技能,培养学生的实际操作能力和解决实际问题的能力。
二、课程设计内容本次课程设计主要分为两个部分:1.微机原理部分在微机原理课程部分,主要包括以下内容:–CPU原理–内存原理–总线结构–输入输出控制器–DMA原理–系统时钟2.接口技术部分在接口技术课程部分,主要包括以下内容:–并行接口–串行接口–USB接口–网络接口–图形接口–嵌入式接口三、课程设计流程1.阅读相关文献资料,了解课程设计的相关知识和理论。
2.设计并搭建硬件实验环境,包括计算机系统和各类接口设备。
3.学习并掌握各类接口的标准规范、通信协议和相关驱动程序。
4.设计并实现各类接口的应用程序,测试和调试各接口设备的正常工作。
5.针对常见的应用场景设计实际应用方案,并实现应用程序的开发和调试。
6.完成课程设计报告,记录整个课程设计的思路、方案和实现过程,并撰写总结和心得体会。
四、课程设计要求1.大家需要采用C语言、C++、VB等编程语言完成具体的编码工作。
2.上机实验前,要确保安全,防止电脑硬件因过流、过压等原因受损。
3.完成上机实验后,要及时清理实验环境,保持机房整洁有序。
4.报告要求规范、结构科学、语句通顺、内容完整。
五、参考书目1.电子工业出版社,《微型计算机接口技术》,2003年。
2.电子工业出版社,《微型计算机原理与应用》,2005年。
3.机械工业出版社,《接口技术原理与应用》,2007年。
4.清华大学出版社,《微处理器原理与接口技术》,2009年。
六、总结微机原理和接口技术是现代计算机科学技术中非常重要的两个方面。
在本次课程设计中,我们将理论知识和实际操作紧密结合起来,通过具体的实验操作和相关的编程工作,更好地理解和掌握了微机原理和接口技术的相关知识和技能,提高了我们的综合素质和专业技能水平。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
信息工程学院课程设计报告设计题目: 数制转换名称: 微机原理与接口课程设计班级: 通信姓名:学号:设计时间: 至指导教师:评语:评阅成绩: 评阅教师:目录1 任务分析 (2)1.1进位计数制分析 (2)1.2 进制转换 (2)2 程序设计流程 (3)2.1程序流程图 (3)2.2设计思路 (4)3 程序设计 (4)十六进制输入二进制输出程序设计 (4)4 结果记录 (11)5 心得体会 (12)参考文献 (13)1 任务分析1.1进位计数制分析进位计数制是人们利用符号来计数的方法。
一种进位计数制包含一组数码符号和两个基本因素。
数码是用不同的数字符号来表示一种数制的数值,这些数字符号位“数码”。
基是数制所使用的数码个数称为“基”。
权是某数制每一个所具有的值称为“权”。
二进制(Binary)是计算技术中广泛采用的一种数制。
二进制数据是用0和1两个数码来表示的数。
它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”,由18世纪德国数理哲学大师莱布尼兹发现。
当前的计算机系统使用的基本上是二进制系统。
十六进制(Hexadecimal)是计算机中数据的一种表示方法.同我们日常中的十进制表示法不一样.它由0-9,A-F,组成.与10进制的对应关系是:0-9对应0-9;A-F对应10-15;N进制的数可以用0---(N-1)的数表示超过9的用字母A-F。
在编程中十六进制数常用“0x”作为开头。
1.2 进制转换十六进制输入转换为与二进制输出4位二进制可以计16个数(0000,0001,0010,…,1111),正好与十六进制的基数16相等,基于这种关系,可以很容易地实现十六进制数与二进制数之间的转换。
将十六进制数转换为二进制数时,小数点位置不变,将每位十六进制数码依次用4为二进制数表示(0用0000表示,1用0001表示……F用1111表示)即可完成转换。
2 程序设计流程2.1程序流程图图1 主流程图2.2设计思路首先对原理进行分析,了解不同进制数之间是如何进行转换。
充分认识汇编语言的指令系统掌握各个汇编指令的功能及用法,了解各种程序结构(顺序。
分支。
循环和子程序)的特点。
首先定义堆栈段,再定义数据段,在数据段中输入MENUE中药显示的内容。
再建一个表TABLE,TABLE中的内容为L0、L1、L2、L3,然后根据题目要求设计简单的程序流程图,在根据流程图设计出每一个模块的汇编语言程序,然后再通过调用、跳转、转移等方法将各个程序连接在一起。
这样根据题目要求的汇编程序就初步完成看,本次用到的软件是Masm for Windows 集成实验环境,首先在Masm for Windows 集成实验环境下输入设计的汇编程序,然后编译、连接、运行。
3 程序设计十六进制输入二进制输出程序设计;程序功能:将四个16进制数(可以是数字以及A~F大小写均可以)转换成2进制数输出;程序举例:输入1234; 输出0001 0010 0011 0100;-----------数据段定义-------------DATAS SEGMENTDATA DB 10,?,10 DUP(?)RES DB 10 DUP(?) ;存放最后输入的4个数DATA0 DB'Please input Hexadecimal numbers :','$'DATA1 DB'The string is wrong,please input again:','$'DATA2 DB' ','$';这个字符串是为了输出空格DATA3 DB'The binary number you have input is:',0AH,0DH,'$'DATAS ENDS;-----------堆栈段-------------------STACK SEGMENTDW256 DUP(?)STACK ENDS;-----------代码段-------------------CODE SEGMENTASSUME DS:DATAS,SS:STACK,CS:CODESTART:MOV AX,DATASMOV DS,AXMOV DX,OFFSET DATA0 ;9号功能调用输出提示信息MOV AH,9INT 21HL0:MOV DX,OFFSET DATA ;输入16进制数(可以使1至9个)MOV AH,10INT 21HCALL INPUT ;函数调用CALL NEWLINECALL OUTPUTEXIT:MOV AH,4CHINT 21H;************将输入的字符串放到DX中***********INPUT P ROC NEARPUSH CXPUSH DXPUSH SIPUSH DICALL NEWLINEMOV DI,2MOV CX,0MOV CL,DATA[1] ;将输入的十六进制数个数存入CX;///////////////判断所有字符是否正确LOOP0:SUB DATA[DI],30H ;首先减去30H比较JL INAGAINCMP DATA[DI],9JLE COMPARESUB DATA[DI],07H ;若为A-F再减去7HJL INAGAINCMP DATA[DI],15JLE COMPARESUB DATA[DI],20H ;若为a-f再减去20HJL INAGAINCMP DATA[DI],15JLE COMPAREINAGAIN:CALL NEWLINE ;若输入不符合十六进制数规则,报错,从新输入CALL ERRORJMP L0COMPARE:INC DILOOP LOOP0JMP DEAL;////////////将后4位存入数组resDEAL:MOV DI,0 ;DI作为数组res的下标MOV CX,0MOV CL,DATA[1] ;将个数存入cl,再转到SI中CMP CX,4JAE NEXT0MOV SI,1 ;个数小于4时处理JMP REALNEXT0:MOV SI,CXSUB SI,3 ;将十六进制数个数中内容装换成对应下标MOV DX,0MOV CX,4 ;(改成更多要修改此处)cx为存入res中十六进制数个数REAL:INC SIMOV DL,DATA[SI] ;将输入的数字后4位存入res数组中MOV RES[DI],DLINC DILOOP REALPOP DIPOP SIPOP DXPOP CXRETINPUT ENDP;************将输入的数输出************OUTPUT PROC NEARPUSH AXPUSH BXPUSH DXPUSH CXPUSH DIMOV DX,OFFSET DATA3 ;提示信息MOV AH,9INT 21HCALL NEWLINE ;换行MOV DI,0MOV DX,0MOV CX,0 ;将cx清0便于后面计数MOV CL,DATA[1]CMP CL,4 ;改成更多要修改此处,将CX中放入输入的16进制数个数JL LOOP1MOV CX,4 ;如果CX>4就只要最后四个LOOP1:PUSH CX ;此时cx为将要输出数字个数MOV CX,4 ;此处cx赋值4是因为每一个16进制数占4个二进制位MOV DL,RES[DI]LOOP2:MOV BL,DLAND DL,01H ;保留最低位PUSH DXMOV DL,BLROR DL,1LOOP LOOP2MOV CX,4 ;此处cx赋值4是因为每一个16进制数占4个二进制位LOOP3:POP DXADD DL,30HMOV AH,2INT 21HLOOP LOOP3CALL SPACENEXT1:INC DIPOP CXLOOP LOOP1POP DIPOP DXPOP CXPOP BXPOP AXRETOUTPUT ENDP;************提示出错信息************ ERROR PROC NEARPUSH AXPUSH DXMOV DX,OFFSET DATA1MOV AH,9INT 21HPOP DXPOP AXRETERROR ENDP;************回车换行************ NEWLINE PROC NEARPUSH AXPUSH DXMOV DL,0AHMOV AH,2INT 21HMOV DL,0DHMOV AH,2INT 21HPOP DXPOP AXRETNEWLINE ENDP;************空格************ SPACE PROC NEARPUSH AXPUSH DXMOV DX,OFFSET DATA2MOV AH,9INT 21HPOP DXPOP AXRETSPACE ENDPCODE ENDSEND START4 结果记录经过多次调试、修改,测试结果胜利通过,符合要求。
在Masm for Windows 集成实验环境上输入该汇编程序,点击运行,这时弹出窗口,显示MENU,窗口如图2所示:图2运行结果图5 心得体会通过这次的课程设计,让我们对汇编有了更进一步的认识,加强了我们用汇编语言编程的能力。
汇编语言程序设计是一门很抽象的学科,学起来也比较乏味。
一开始学的时候感觉很难,也没什么兴趣。
但随着学习的推进,以及上机编程,逐渐感到轻松。
在这次课程设计中,让我们更加熟悉了汇编语言的一些基本的指令;掌握了汇编语言的一些基本的中断调用功能,可以用汇编语言调用各种中断调用功能。
在设计过程中,不断对程序进行修改、改进,增强了自己分析问题、解决问题的能力;在不断的调试中,也让自己发现了自己存在的一些错误以及一些调试时应注意的问题,同时也更深的理解了寄存器、存储器等工作原理以及一些指令执行后对它们的改变,例如INT指令会改变AL的值,在编程时应注意这方面的问题。
当设计一步步接近成功,每一个子程序的调试成功,都让自己感到喜悦,从中体会到了编程的乐趣,有一种成就感,也让自己树立了信心,增强了对汇编语言程序设计的兴趣。
这次的汇编课程设计,我们的题目是:数制转换程序设计,要求实现四位十六进制向二进制的转换。
虽然在设计过程中遇到了不少问题,比如运行界面出现乱码、不能得到相应的转换等等问题,但在不断的修改和尝试中慢慢地解决这些问题,心里也有一种莫名的喜悦之感,正是这种感觉,使我们对这门课产生了更加浓厚的兴趣,对本次课程设计更加用心和认真。
在编程过程中我们对汇编的一些工具进行了尝试,从MASM的EDIT,到WINDOWS的记事本,然后我们又尝试了“汇编语言集成编译器 1.0”和“VisulASM”,集成汇编运行环境,最终我们在“Masm for Windows 集成实验环境”软件下完成了编程工作,该软件可以标识汇编关键字,从而利于编写与调试。