微机原理与接口技术汇编子程序涉及
- 格式:doc
- 大小:199.50 KB
- 文档页数:12
炎黄技工学校《微机原理与接口技术》教学大纲理论课时36实践课时36总课时72考核形式考查编写时间2022-03编写人审核人机电信息工程系计算机技术教研室编《微机原理与接口技术》课程标准课程名称:微机原理与接口技术适用专业:计算机网络应用课程学分:4学分计划学时:72学时一、课程概述1、课程性质与任务本课《微机原理与接口技术》是计算机专业的一门重要的专业课,它的前续课程有《电子技术基础》、《电路原理》通过本课程的学习,为后续课程《微机控制技术》打下良好的基础。
同时与毕业设计密切相关,为它提供了硬件和软件的基础。
本课程介绍了微型计算机原理及组成结构、微机接口的有关基本知识和实用技术、常用微机接口芯片的使用方法。
2、课程基本理念结合我们学生的实际情况,在平时的教与学中主要遵循以下的理念:(1)将专业课的学习与基础理论衔接,指导学生有针对性地预习;(2)帮助学生形成强烈兴趣;(3)指导学生了解课程教学目的,教师结合教学大纲和自己对课程的把握情况,阐明《微机原理与接口技术》的课程特点;(4)培养学生良好的学习习惯。
3、课程设计思路1、总体设计原则与思路:按照“以能力为本位,以职业实践为主线,以项目课程为主体的模块化专业设计课程体系”的总体设计要求,该门课程以形成电机与变压器的原理与性能指标、运行调试及维护维修等能力为基本目标,彻底打破学科课程的设计思路,紧紧围铙工作任务完成的需求来选择和组织课程内容,突出工作任务与知识的联系,让学生在职业实践活动的基础上掌握知识,增强课程内容与职业岗位能力要求的相关性,提高学生的就业能力。
2课程设计依据与评价方法:学习项目选取的基本依据是该门课程涉及的工作领域和工作任务范围,但在具体设计过程中,以自动化专业学生的就业为向导,根据行业专家对自动化专业所涵盖的的岗位群体进行的任务和职业能力分析,同时遵循中等职业学校学生的认识规律,紧密集合职业资格证书中相关考核内容,确定本课程的工作任务模块和课程内容。
微机原理与接口技术汇编语言程序教案第一章:汇编语言概述1.1 汇编语言的概念让学生了解汇编语言的定义、特点和作用。
让学生掌握汇编语言的基本组成元素,如指令、寄存器、操作数等。
1.2 汇编语言的表示方法让学生了解汇编语言的指令格式和操作数表示方法。
让学生掌握汇编语言的助记符及其含义。
1.3 汇编语言与机器代码的关系让学生了解汇编语言与机器代码的转换过程。
让学生掌握汇编语言指令与机器代码之间的对应关系。
第二章:汇编语言的语法规则2.1 指令语句的语法结构让学生了解指令语句的构成,包括操作码、寄存器、操作数等。
让学生掌握不同类型指令的语法规则,如数据传输指令、算术运算指令等。
2.2 伪指令和宏指令让学生了解伪指令和宏指令的概念及其作用。
让学生掌握伪指令和宏指令的语法规则和使用方法。
2.3 汇编语言的程序结构让学生了解汇编语言程序的组成部分,如数据段、代码段、堆栈段等。
让学生掌握汇编语言程序的格式和编写规范。
第三章:汇编语言的编程技巧3.1 寄存器的使用让学生了解寄存器的作用和分类,如AX、BX、CX、DX等。
让学生掌握寄存器在汇编语言编程中的应用技巧。
3.2 数据传输指令让学生了解数据传输指令的用法,如MOV、PUSH、POP等。
让学生掌握数据传输指令在汇编语言编程中的应用技巧。
3.3 算术运算指令让学生了解算术运算指令的用法,如ADD、SUB、MUL、DIV等。
让学生掌握算术运算指令在汇编语言编程中的应用技巧。
第四章:汇编语言程序设计实例4.1 实例一:计算两个数的和让学生了解程序设计的基本步骤,如编写算法、选择寄存器等。
让学生掌握汇编语言编程的基本技巧,如数据传输、算术运算等。
4.2 实例二:排序算法(冒泡排序)让学生了解排序算法的原理和实现方法。
让学生掌握汇编语言编程中循环结构和条件判断的使用技巧。
4.3 实例三:字符串操作让学生了解字符串的基本操作,如字符串长度计算、字符串复制等。
让学生掌握汇编语言编程中字符串操作的相关指令和技巧。
《微机原理与接口技术》课程实验指导书实验内容EL-8086-III微机原理与接口技术教学实验系统简介使用说明及要求✧实验一实验系统及仪器仪表使用与汇编环境✧实验二简单程序设计实验✧实验三存储器读/写实验✧实验四简单I/0口扩展实验✧实验五8259A中断控制器实验✧实验六8253定时器/计数器实验✧实验七8255并行口实验✧实验八DMA实验✧实验九8250串口实验✧实验十A/D实验✧实验十一D/A实验✧实验十二8279显示器接口实验EL-8086-III微机原理与接口技术教学实验系统简介使用说明及要求EL-8086-III微机原理与接口技术教学实验系统是为微机原理与接口技术课程的教学实验而研制的,涵盖了目前流行教材的主要内容,该系统采用开放接口,并配有丰富的软硬件资源,可以形象生动地向学生展示8086及其相关接口的工作原理,其应用领域重点面向教学培训,同时也可作为8086的开发系统使用。
可供大学本科学习《微机原理与接口技术(8086)》,《单片机应用技术》等课程提供基本的实验条件,同时也可供计算机其它课程的教学和培训使用。
为配合使用EL型微机教学实验系统而开发的8086调试软件,可以在WINDOWS 2000/XP等多种操作系统下运行。
在使用本软件系统调试程序时,可以同时打开寄存器窗口、内存窗口、反汇编窗口、波形显示窗口等等,极大地方便了用户的程序调试。
该软件集源程序编辑、编译、链接、调试与一体,每项功能均为汉字下拉菜单,简明易学。
经常使用的功能均备有热键,这样可以提高程序的调试效率。
一、基本特点EL型微机教学实验系统是北京精仪达盛科技有限公司根据广大学者和许多高等院校实验需求,结合电子发展情况而研制的具有开发、应用、实验相结合的高科技实验设备。
旨在尽快提高我国电子科技发展水平,提高实验者的动手能力、分析解决问题能力。
系统具有以下特点:1、系统采用了模块化设计,实验系统功能齐全,涵盖了微机教学实验课程的大部分内容。
西安交通大学实验报告成绩第页共页课程微机原理与接口技术实验系别生物医学工程实验日期年月日专业班级组别交报告日期年月日姓名学号报告退发 (订正、重做) 同组者教师审批签字实验名称汇编语言程序设计一、实验目的1.掌握Lab6000p实验教学系统基本操作;2.掌握8088/8086汇编语言的基本语法结构;3.熟悉8088/8086汇编语言程序设计基本方法。
二、实验设备b6000p实验教学系统;2.IBM-PC机三、实验内容1.有一个10字节的数组,其值分别是80H,03H,5AH,FFH,97H,64H,BBH,7FH,0FH,D8H。
编程并显示结果:1)如果数组是无符号数,求出最大值,并显示;2)如果数组是有符号数,求出最大值,并显示。
2.将二进制数500H转换成二-十进制(BCD)码,并显示“500H的BCD是:”3.将二-十进制码(BCD)7693转换成ASCII码,并显示“BCD码7693的ASCII是:”4.两个长度均为100的内存块,先将内存块1全部写上88H,再将内存块1的内容移至内存块2。
在移动的过程中,显示移动次数1,2 ,3…0AH…64H(16进制-ASCII码并显示子程序)5.键盘输入一个小写字母(a~z),转换成大写字母显示:请输入一个小写字母(a~z):转换后的大写字母是:6.实现4字节无符号数加法程序,并显示结果,如99223344H + 99223344H= xxxxxxxxH四、实验结果1.有一个10字节的数组,其值分别是80H,03H,5AH,FFH,97H,64H,BBH,7FH,0FH,D8H。
编程并显示结果:(1)如果数组是无符号数,求出最大值,并显示;(2)如果数组是有符号数,求出最大值,并显示。
程序:(1)无符号数#make_COM#; COM file is loaded at CS:0100hORG 100hJMP STARTABC DB 80H,03H,5AH,0FFH,97H,64H,0BBH,7FH,0FH,0D8HMAIN PROC FARSTART: MOV SI,0MOV AL,ABC[SI]A1: INC SICMP SI,9JNC EXITMOV BL,ABC[SI]CMP AL,BLJC A2JMP A1A2: XCHG BL,ALJMP A1EXIT: MOV CL,16DIV CLMOV DX,AXMOV CL,9CMP DL,CLJA E1ADD DL,30HMOV AH,2INT 21HE1: ADD DL,37HMOV AH,2INT 21HMOV DL,DHCMP DL,9JA E2ADD DL,30HMOV AH,2INT 21HE2: ADD DL,37HMOV AH,2INT 21HMOV DL,'H'MOV AH,2INT 21HRETMAIN ENDPEND START结果:(2)有符号数#make_COM#; COM file is loaded at CS:0100hORG 100hJMP STARTSHUZU DB 80H,03H,5AH,0FFH,97H,64H,0BBH,7FH,0FH,0D8H MAIN PROC FARSTART: MOV SI,0MOV AL,SHUZU[SI]L1: INC SICMP SI,9JNC NEXTMOV BL,SHUZU[SI]CMP AL,BLJL L2 ;带符号数比较 JMP L1L2: XCHG BL,ALJMP L1NEXT: MOV CL,16DIV CLMOV DX,AXMOV CL,9CMP DL,CLJA L3 ;无符号数比较 ADD DL,30HMOV AH,2INT 21HJMP L4L3: ADD DL,37HMOV AH,2INT 21HL4: MOV DL,DH ;ASCII码转换 CMP DL,9JA L5ADD DL,30HMOV AH,2INT 21HJMP L5L5: ADD DL,37HMOV AH,2INT 21HL6: MOV DL,'H'MOV AH,2INT 21HHLTMAIN ENDPEND START2.将二进制数500H转换成二-十进制(BCD)码,并显示“500H的BCD是:”程序:#make_COM#; COM file is loaded at CS:0100hORG 100hJMP START;DATA SEGMENTSHUCHU DB 'BCD IS $'ABC DB 15 DUP(?);DATA ENDSMAIN PROC FARSTART: MOV DX,OFFSET SHUCHUMOV AH,9INT 21HMOV AX,OFFSET ABCMOV DX,AXMOV AX,500H ;分离出各位数,分别进行BCD码转换SUB DX,DXMOV CX,1000DIV CXXCHG DX,AX ;商在DX中,余数在AX中MOV BX,AXADD DL,30HMOV AH,2INT 21H ;千位转换并输出MOV AX,BXMOV CL,100DIV CLMOV DX,AXADD DL,30HMOV AH,2INT 21H ;百位转换并输出MOV AL,DHSUB AH,AHMOV CL,10DIV CLMOV BX,AXMOV DL,BLADD DL,30HMOV AH,2INT 21H ;个位转换并输出MOV DL,BHADD DL,30HMOV AH,2INT 21HRETMAIN ENDPEND START结果:3.将二-十进制码(BCD)7693转换成ASCII码,并显示“BCD码7693的ASCII 是:”程序:#make_COM#; COM file is loaded at CS:0100hORG 100hJMP START;DATA SEGMENTSHUCHU DB 'ASCII IS $'ABC DB 20 DUP(?);DATA ENDSMAIN PROC FARSTART: MOV DX,OFFSET SHUCHUMOV AH,9INT 21HMOV CH,4MOV AX,OFFSET ABCMOV DX,AXMOV BX,7693HEXIT: MOV CL,4ROL BX,CLMOV AL,BLAND AL,0FH ;与运算分离出最高位MOV AH,0ADD AL,30HMOV CL,16DIV CL ;分离出高位和低位MOV DH,AHMOV DL,ALADD DL,30HMOV AH,2INT 21HMOV DL,DHADD DL,30HMOV AH,2INT 21H ;分别输出高低位DEC CHJNZ EXIT ;进行循环HLTMAIN ENDPEND START结果:4.两个长度均为100的内存块,先将内存块1全部写上88H,再将内存块1的内容移至内存块2。
第1章微机运算基础习题和思考题1.请完成以下计算:174.66D=(10101110.10101)B=(AE. A8)H10101110101.01011B=(1397.344)D=(575.58)H4BCH=(010*********)B=()BCD2.设字长为8位,X=(2A)16,当X分别为原码、补码、反码和无符号数的时候,其真值是多少?答:当X表示原码时,其真值为:+101010当X表示补码时,其真值为:+101010当X表示反码时,其真值为:+101010当X表示无符号数数时,其真值为:001010103.设字长为8位,用补码形式完成下列计算,要求有运算结果并讨论是否发生溢出?120+18 -33-37-90-70 50+84答:120+18其补码形式分别为:(120)补=01111000 (18)补=0001001001111000+ 0001001010001010由于C s=0 ,C p=1,因此有溢出,结果错误-33-37其补码形式为:(-33)补=11011111 (-37)补=1101101111011111+1101101110111010由于C s=1, C p=1,所以没有溢出,结果正确-90-70其补码形式为:(-90)补=10011100 (-70)补=1011101010011100+1011101001010110由于C s=1, C p=0,所以有溢出,结果错误50+84其补码形式为:(50)补=00110010 (84)补=0101010000110010+0101010010000110由于C s=0, C p=1,所以有溢出,结果错误4.请写出下列字符串的ASCII码值。
My name is Zhang san.4D 79 6E 61 6D 65 69 73 5A 68 61 6E 67 73 61 6E 2E第2章 80X86微机系统习题与思考题1.微型计算机主要由哪些基本部件组成?各部件的主要功能是什么?答:微型计算机主要由输入设备、运算器、控制器、存储器和输出设备组成。
《微机原理与接口技术》课程总结本学期我们学习了《微型计算机原理与接口技术》,总的来说,我掌握的知识点可以说是少之又少,我感觉这门课的内容对我来说是比较难理解的。
这门课围绕微型计算机原理和应用主题,以Intel8086CPU为主线,系统介绍了微型计算机的基本知识、基本组成、体系结构、工作模式,介绍了8086CPU的指令系统、汇编语言及程序设计方法和技巧,存储器的组成和I/O接口扩展方法,微机的中断结构、工作过程,并系统介绍了微机中的常用接口原理和应用技术,包括七大接口芯片:并行接口8255A、串行接口8251A、计数器/定时器8253、中断控制器8259A、A/D(ADC0809)、D/A (DAC0832)、DMA(8237)、人机接口(键盘与显示器接口)的结构原理与应用。
在此基础上,对现代微机系统中涉及的总线技术、高速缓存技术、数据传输方法、高性能计算机的体系结构和主要技术作了简要介绍。
第一章:微型计算机概论(1)超、大、中、小型计算机阶段(1946年-1980年)采用计算机来代替人的脑力劳动,提高了工作效率,能够解决较复杂的数学计算和数据处理(2)微型计算机阶段(1981年-1990年)微型计算机大量普及,几乎应用于所有领域,对世界科技和经济的发展起到了重要的推动作用。
(3)计算机网络阶段(1991年至今)。
计算机的数值表示方法:二进制,八进制,十进制,十六进制。
要会各个进制之间的数制转换。
计算机网络为人类实现资源共享提供了有力的帮助,从而促进了信息化社会的到来,实现了遍及全球的信息资源共享。
第二章:80X86微处理器结构本章讲述了80X86微处理器的内部结构及他们的引脚信号和工作方式,重点讲述了8086微处理器的相关知识,从而为8086微处理器同存储器以及I/O设备的接口设计做了准备。
本章内容是本课程的重点部分。
第三章:80X86指令系统和汇编语言本章讲述了80X86微处理器指令的多种寻址方式,讲述了80X86指令系统中各指令的书写方式、指令含义及编程应用;讲述了汇编语言伪指令的书写格式和含义、汇编语言中语句的书写格式。
微机原理与接口技术汇编题目1、将数据段中2000H单元开始存放的10个数(8位数)传送到3000H开始的10个字节中。
2、将数据段DATA1中的10个字数据(16位数)传送到数据段DATA2中。
提示:1、指定数据的起始地址:(如果不指定起始地址,则起始地址为0000H)DATA SEGMENTORG 2000HDB 1,,2,3,4,5,6,7,8,9,10 ; DB 定义字节数据ORG 3000HDB 10 DUP(O); 预留10个单元存放结果,初值预定义为0DATA ENDS定义的内存单元为:2、定义字数据命令为:DWDATA1 SEGMENTDW 1 , ,2 , 3, 4, 5, 6, 7, 8, 9, 10 ; DW 定义字数据DATA1 ENDS一个字为两个字节,在内存中低位在前,高位在后。
1已知0~15的平方值表,查表求X ( X是0到15间任一数)的平方值,送到Y单元,用两种方法。
2、已知0~255的平方值表,查表求X的平方值,送到Y单元。
提示:0到15的平方表,每个平方值为一个字节;0到255的平方表,每个平方值为2个字节;调试程序,平方表中的数据定义几个就行,目的是程序正确即可。
一个字为两个字节,在内存中低位在前,高位在后。
1计算多字节数据788H与99AABBCCDDEEFF00H和。
2、计算8字节的BCD码十进制数788H与H的和3、计算10个字数据的和(数据自己定义)。
提示;1、多字节数据在内存中存放,低位在前,高位在后DAT1 DB 88H,77H,66H,55H,44H,33H,22H,11HDAT2 DB 00H,0FFH,0EEH,0DDH,0CCH,0BBH,0AAH,99H DAT3 DB 9 DUP(O)二进制加法指令:ADDBCD十进制加法:ADD(4 )计算表达式的值1计算表达式Z ((X Y)*7)/(Y 2)的值,已知X=10, 丫=5。
提示:X DB 10Y DB 5Z DB ?AL=X-YBL=7AX=AL*BLBH=Y+2AL=AX/BH 的商AH=AX/BH的余数' -NniL无符号数乘法•JAmi有符号数乗法・例W I 讥-AX <- AL*DL1MHL BX : DX AX <-AX*BXMI L BYTE PTR[SI|; AX < AL*(DS* 16+STj(5)找最大、最小数1、找出2040H单元和2041H单元的大数,并送2042H单元(数据自己定义)2、找出10个数(8位数)里的最大数(数据自己定义)1、找出10个数(8位数)里的正数个数(数据自己定义)2、找出10个数(16位数)里的负数个数(数据自己定义)(7)数据块比较1、分别在FARD1和FARD2单元开始存放了10个字节数据,编程比较是否一义)。
微机原理与接口技术(楼顺天第二版)习题解答第4章汇编语言程序设计4。
1、已知在BUF的起始处保存有N个字符的ASCII码,编写汇编语言程序实现,将这组字符串传送到缓冲区BUFR中,并且使字符串的顺序与原来的顺序相反。
答:BUF D B ”BONJOUR_BELLE"BUFR DB 100 DUP(?)MOV CX, NLEA SI, BUFLEA DI, BUFRADD DI,CXDEC DIL1:MOV AL,[SI]MOV [DI],ALINC SIDEC DILOOP L14。
2、利用移位、传送和相加指令实现AX的内容扩大10倍.答:将扩大后的结果放在DX:AX中,注意到10×AX=8×AX+2×AX。
XOR DX,DXSHL AX,1RCL DX,1MOV BX,AXMOV CX,DXSHL AX,1RCL DX, 1SHL AX, 1RCL DX, 1ADD AX, BXADC DX, CX4。
3、在缓冲区V AR中连续存放着3个16位的无符号数,编写程序实现将其按递增关系排列;如果V AR中保存的为有符号数,则再编写程序实现将其按递减关系排列。
答:V AR DW 1236,-432,3900XOR SI,,SIMOV AX,V AR[SI]CMP AX,V AR[SI+2]JAE L1XCHG AX,V AR[SI+2]L1:CMP AX, V AR[SI+4]JAE L2XCHG AX, V AR[SI+4]L2:MOV V AR[SI],AXMOV AX,V AR[SI+2]CMP AX,V AR[SI+4]JAE L3XCHG AX,V AR[SI+4]L3:MOV V AR[SI+2], AX4。
4、编写程序段实现将AL和BL中的每一位依次交叉,得到的16位字保存在DX中,例如(AL)=01100101B,(BL)=11011010B,则得到的(DX)=10110110 10011001B。
《微机原理与接口技术》课程实验教学大纲课程编号:课程性质:专业必修课学分/学时:30/1先修/后续课程:计算机导论/计算机系统结构开课对象:计算机科学与技术专业课程简介:《微机与汇编语言》课程是计算机科学与技术专业重要的专业基础课,是学生学习掌握计算机硬件和软件(汇编语言)的入门课程。
一、教学任务和目的掌握典型微处理器的指令系统和运用汇编语言进行程序设计基本方法,是计算机科学与技术专业的一门专业核心课程之一,是突出计算机软件与硬件紧密结合、理论与实践相结合的一门课程。
微机原理与接口技术实验是微机原理与接口技术课程的重要组成部分。
本实验课程的教学目的和要求是使学生通过实验手段掌握微机接口的设计及其应用编程方法,也使学生系统科学地受到分析问题和解决问题的训练。
通过实验使学生对课程中的8253定时器,8255并行口,8259中断控制器,RAM6116,8251串行接口芯片,AD0809,AD0832的理解,能熟练掌握8253、8255、8251的编程与应用,促进对微机原理与接口技术理论课的学习。
二、教学基本要求要求学生掌握微机系统中主要部件(CPU、内存、I/O接口电路和总线等)的功能及连接方法;微处理器指令及其操作数的寻址方法;微机系统与外设之间I/O信息交换的基本方法;并进一步掌握典型微处理器的指令系统和运用汇编语言进行程序设计基本方法;掌握常用(可编程)I/O接口电路的性能特点和编程应用方法;了解计算机系统与外部设备的接口技术。
三、实验内容实验一DOS常用命令及8088/8086指令使用实验目的(1) DOS命令:CD、DIR、DEL、RENAME和C0PY。
(2) 8088指令:MOV,ADD、ADC、SUB、SBB、DAA和XCHG。
(3) DEBUG命令:A、D、E、F、H、R、T和U。
(4) BCD码、ASCII码及用十六进制数表示二进制码的方法。
(5) 8088寄存器:AX、BX、CX、DX、F和IP。
微机原理与接口技术(钱晓捷版)课后习题答案“微机原理与接口技术”习题解答第1章微型计算机系统〔习题1.1〕简答题〔解答〕① 处理器每个单位时间可以处理的二进制数据位数称计算机字长。
② 总线信号分成三组,分别是数据总线、地址总线和控制总线。
③ PC机主存采用DRAM组成。
④ 高速缓冲存储器Cache是处理器与主存之间速度很快但容量较小的存储器。
⑤ ROM-BIOS是“基本输入输出系统”,操作系统通过对BIOS 的调用驱动各硬件设备,用户也可以在应用程序中调用BIOS中的许多功能。
⑥ 中断是CPU正常执行程序的流程被某种原因打断、并暂时停止,转向执行事先安排好的一段处理程序,待该处理程序结束后仍返回被中断的指令继续执行的过程。
⑦ 主板芯片组是主板的核心部件,它提供主板上的关键逻辑电路。
⑧ MASM是微软开发的宏汇编程序。
⑨ 指令的处理过程。
处理器的“取指—译码—执行周期” 是指处理器从主存储器读取指令(简称取指),翻译指令代码的功能(简称译码),然后执行指令所规定的操作(简称执行)的过程。
⑩ 机器语言层,即指令集结构。
(学生很多认为是:汇编语言层。
前4章主要涉及汇编语言,但本书还有很多处理器原理等内容)〔习题1.2〕判断题① 错② 错③ 对④ 错⑤ 对⑥ 错⑦ 错⑧ 对⑨ 错⑩ 错〔〔解答〕① Central Processing Unit,中央处理单元,处理器② 1MB,4GB ③ 216,64KB④ EXE,COM(BAT老师讲的)⑤ Instruction Set Architecture⑥ 目录⑦ MMX,SSE3 ⑧ 64⑨ IBM,DOS ⑩ PCI 〔习题1.4〕说明微型计算机系统的硬件组成及各部分作用。
〔解答〕CPU:CPU也称处理器,是微机的核心。
它采用大规模集成电路芯片,芯片内集成了控制器、运算器和若干高速存储单元(即寄存器)。
处理器及其支持电路构成了微机系统的控制中心,对系统的各个部件进行统一的协调和控制。
试验五汇编子程序设计一、试验目的(1)掌握汇编子程序设计的一般方法;(2)掌握汇编子程序的调试方法;(3)掌握递归子程序设计与调试方法。
二、输入输出子程序1、十进制数输入子程序decibin子程序名:decibin子程序功能:用户输入十进制数放在BX中入口参数:无出口参数:BX存放输入的十进制数受影响的寄存器:AX、BX、CX、DX和标志寄存器注意:①用户输入字符‘0’~‘9’,当输入非法字符时结束输入,如回车;②十进制数位数可以是1位、2位等,范围0~65535。
decibin proc nearmov bx , 0newchar: mov ah , 1int 21hmov dl , alsub al , 30hjl exit1cmp al , 9jg exit1cbwxchg ax , bxmov cx , 10mul cxxchg ax , bxadd bx , axjmp newcharexit1: retdecibin endp2、十六进制数输入子程序hexibin子程序名:hexibin子程序功能:用户输入十六进制数放在BX中入口参数:无出口参数:bx存放输入的十六进制数受影响的寄存器:ax、bx、cx和标志寄存器注意:①用户输入0ah~0fh的数字时,输入大写字母‘A’~‘F’,小写字母‘a’~‘f’无效;②子程序不能控制数的位数可能0位、1位、2位……等位数,如果输入位数大于4位,则以最新的4位十六进制数为准;③输入字符可以按回车结束,当输入任何非法字符时也能结束数据输入。
hexibin proc nearmov bx , 0newchar: mov ah , 1int 21hsub al , 30hjl exitcmp al , 10jl add_tosub al , 7cmp al , 0ahjl exitcmp al , 10hjge exitadd_to: mov cl , 4shl bx , clmov ah , 0add bx , axjmp newcharexit: rethexibin endp3、十进制数显示子程序binidec子程序名:binidec子程序功能:将bx寄存器存放的数以十进制的形式显示出来入口参数:bx存放要显示的数出口参数:无受影响的寄存器:ax、bx、cx、dx和标志寄存器binidecdec_div图5-1 子程序binidec模块层次图binidec proc nearmov cx , 10000call dec_divmov cx , 1000call dec_divmov cx , 100call dec_divmov cx , 10call dec_divmov cx , 1call dec_divretbinidec endpdec_div proc nearmov ax , bxmov dx , 0div cxmov bx , dxmov dl , aladd dl , 30hmov ah , 2int 21hretdec_div endp4、十六进制数显示子程序binihex子程序名:binihex子程序功能:将di寄存器存放的数以十六进制的形式显示出来入口参数:di存放要显示的数出口参数:无受影响的寄存器:ax、bx、cx、dx和标志寄存器注意:显示十六进制数用到字符‘0’~‘9’和字符‘A’~‘F’,没有用到字符‘a’~‘f’。
binihex proc nearmov bx , 4lp: mov cl , 4rol di , clmov dx , diand dl , 0fhcmp dl , 9jbe nextadd dl , 07hnext: add dl , 30hmov ah , 2int 21hdec bxjnz lpmov dl , 'h'mov ah , 2int 21hretbinihex endp5、二进制数显示子程序binshow子程序名:binshow子程序功能:将bx寄存器存放的数以二进制的形式显示出来入口参数:bx存放要显示的数出口参数:无受影响的寄存器:ax、bx、cx、dx和标志寄存器binshow proc nearmov ah , 2mov cl , 16Again: shl bx , 1jnc nextmov dl , '1'push axint 21hpop axjmp mmNext: mov dl , '0'push axint 21hpop axmm: dec cljnz againretbinshow endp三、示例例5.1 显示学生分数等级编制一程序,要求接收从键盘输入的一个班级的学生成绩,并存放在50字的grade数组中。
然后根据grade中的学生成绩给出不同分数等级的学生人数,从终端中显示出来。
输入成绩用十进制,显示统计结果也用十进制数。
input decibin crlf rankp binidecdec_div main图5-2 程序模块层次图模块说明1、分数输入子程序input子程序名:input子程序功能:用户输入若干十进制数,放在grade内存变量中入口参数:无出口参数:grade变量中存放输入若干数据;count变量中记录数据个数受影响的寄存器:ax、dx、si和标志寄存器注意:①由于数据存放在字单元中,范围0~65535,无符号数;②数据间用逗号隔开,如87,75,95,63,90……如果用户输入87,回车,则子程序会出错,变量count统计的数据个数不对,注意逗号后一定跟上数据;③若干数据输入以回车结束或非法字符结束,如果用户输入非法字符,给出'Input Error!'提示;④定义变量 grade dw 50 dup(?)count dw ?mess1 db 'Grade?','$'mess2 db 13,10,'Input Error!',13,10,'$'⑤输入数据个数最多50个。
inputdecibin crlf图5-3 子程序input模块层次图2、统计分数子程序rankp子程序名:rankp子程序功能:将内存中存放的分数按照<60、60∽69、70∽79、80∽89、90以上统计出来,存放在变量中入口参数:CX要统计分数的个数;BX指示统计分数的首地址出口参数:统计结果存放在变量s10、s9、s8、s7、s6、s5中受影响的寄存器:ax、bx、cx和标志寄存器注意:变量s10、s9、s8、s7、s6、s5的初值应为0编程思路根据题目的要求,程序可由三部分组成:(1)输入:以十进制的形式输入班级中的学生分数;(2)统计:根据不同的等级统计学生人数;(3)输出:显示统计结果,以十进制显示。
该例中明显的特色是子程序的调用,图5-2显示了子程序间嵌套调用的关系,一般复杂的程序都是由子程序嵌套调用完成的。
在设计每一个子程序中要明确子程序的功能、入口参数、出口参数,子程序运行时应该注意的细节,其中包括子程序实现中缺陷、程序结束的条件、数据输入的范围等。
外加还要清楚子程序中对寄存器的影响,必要的时候可以利用堆栈或者内存变量保存寄存器的值。
复杂的程序一般都由若干子程序嵌套调用,调用时的层次关系也应该好好设计。
调用子程序前一般要对入口参数进行设置,然后调用子程序。
在本例中,调用子程序rankp,完成对学生分数进行统计,入口参数bx指示存放学生分数变量grade 的首地址,变量cx为分数的个数,指令语句如下:lea bx , grademov cx , countcall rankp参考程序清单datarea segmentgrade dw 50 dup(?)count dw ?s10 dw 0s9 dw 0s8 dw 0s7 dw 0s6 dw 0s5 dw 0mess1 db 'Grade?','$'mess2 db 13,10,'Input Error!',13,10,'$' mess100 db 13,10,'100 mark number:$'mess90 db 13,10,'90 mark number:$'mess80 db 13,10,'80 mark number:$'mess70 db 13,10,'70 mark number:$'mess60 db 13,10,'60 mark number:$'mess50 db 13,10,'no pass number:$' datarea endsprognam segmentmain proc farassume cs: prognam,ds:datareastart:mov ax , datareamov ds , axcall inputlea bx , grademov cx , countcall rankplea dx , mess100mov ah , 09int 21hmov bx , s10call binideclea dx , mess90mov ah , 09int 21hmov bx , s9call binideclea dx , mess80mov ah , 09int 21hmov bx , s8call binideclea dx , mess70mov ah , 09int 21hmov bx , s7call binideclea dx , mess60mov ah , 09mov bx , s6call binideclea dx , mess50 mov ah , 09int 21hmov bx , s5call binidecmov ah , 4chint 21hmain endpbinidec proc nearmov cx , 10000 call dec_divmov cx , 1000 call dec_divmov cx , 100call dec_divmov cx , 10call dec_divmov cx , 1call dec_divretbinidec endpdec_div proc nearmov ax , bxmov dx , 0div cxmov bx , dxmov dl , aladd dl , 30hmov ah , 2int 21hretdec_div endpinput proc nearlea dx , mess1 mov ah , 09int 21hmov si , 0mov count , 0 enter: call decibininc countcmp dl , ','cmp dl , 13je exit2jne errorstore: mov grade[si] ,bxadd si , 2jmp entererror: lea dx , mess2 mov ah , 09int 21hexit2: mov grade[si] ,bxcall crlfretinput endpdecibin proc nearmov bx , 0 newchar: mov ah , 1int 21hmov dl , alsub al , 30h jl exit1cmp al , 9jg exit1cbwxchg ax , bxmov cx , 10mul cxxchg ax , bxadd bx , axjmp newcharexit1: retdecibin endprankp proc nearcompare: mov ax , [bx] cmp ax , 60jl fivecmp ax , 70jl sixcmp ax , 80jl sevencmp ax , 90jl eightcmp ax , 100 jne ninejmp change_addrnine: inc s9jmp change_addreight: inc s8jmp change_addrseven: inc s7jmp change_addrsix: inc s6jmp change_addrfive: inc s5change_addr: add bx , 2loop compareretrankp endpcrlf proc nearmov dl , 0ahmov ah , 02hint 21hmov dl , 0dhmov ah , 02hint 21hretcrlf endpprognam endsend start图5-4 程序运行结果程序调试我们说一说由子程序构成的程序的调试过程。