微机原理实验六 从键盘输入数据并显示
- 格式:doc
- 大小:43.00 KB
- 文档页数:6
一、 实验名称:键盘扫描及显示设计实验 二、 实验目的1. 学习按键扫描的原理及电路接法; 2 .掌握利用8255完成按键扫描及显示。
三、 实验内容及步骤1.实验内容编写程序完成按键扫描功能,并将读到的按键值依次显示在数码管上。
实验机的按 键及显示模块电路如图 1所示。
按图2连线。
Γ≡≡If *—I〔01S冥Pπ图1键盘及显示电路2. 实验步骤 (1) 按图1接线;(2) 键入:CheCk 命令,记录分配的I/O 空间; (3) 利用查出的地址编写程序,然后编译链接; (4) 运行程序,观察数码管显示是否正确。
四、流程图22LZjXD2汽XDrXXDir d √I IWirI ⅝IOR A .■[QYO Λ :07 PBfl D⅛ PBl般唯* C4PB3PBl •皿 PBi 71 PB6 DO E55PB7FA.Q AlPAJAO 吨!PA5 I WR PCo 7 RD PCI ∙÷ CS PΩ I PCI图2实验连线>Cχ⅛ 7H *J J XXXXt- ⅛r√ *JJ <⅛i YYYY开始五、源程序是KeySCa n. asm;键盘扫描及数码管显示实验 根据CHECKE 置信息修改下列符号值 *******************的A 口地址的B 口地址 的C 口地址 的控制寄存器地址STACKI SEGMENT STACKDW 256 DUP(?) STACKI ENDS DATA SEGMENT DTABLE3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H DATA ENDS ; 键值表,0〜F 对应的7段数码管的段位值CODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AX MOV SI,3000H ; 建立缓冲区,存放要显示的键值 MOV AL,00H ;先初始化键值为 0MOV [SI],AL MOV [SI+1],AL MOV [SI+2],AL MOV [SI+3],AL MOV DI,3003H初始化8255工作方式方式0, A 口、B 口输出,C 口低4位输入・ *************** IoYo EQU 9800H 片选IOYO 对应的端口始地址 MY8255_ _A EQU IOY0+00H*4 ;8255 MY8255__B EQU IOY0+01H*4 ;8255MY8255__C EQU IOY0+02H*4 ;8255 DBMOV DX,MY8255_MODE MOV AL,81H;・***************************************************************** MY8255_MODE EQU IOY0+03H*4 ;8255OUT DX,AL BEGIN:CALL DIS ; CALL CLEAR ; CALL CCSCAN ; 显示刷新清屏扫描按键JNZ GETKEY1 ; 有键按下则跳置GETKEY1MOV AH,1 ; INT 16HJZ BEGIN ; QUIT: 判断PC键盘是否有按键按下无按键则跳回继续循环,有则退出MOV AX,4C00H ;INT 21H返回到DOSGETKEY1:CALL DIS ;CALL DALLYCALL DALLYCALL CCSCAN ;JNZ GETKEY2 ; JMPBEGIN ; 显示刷新再次扫描按键有键按下则跳置GETKEY2 否则跳回开始继续循环GETKEY2:MOV CH,0FEHMOV CL,00H ;COLUM:设置当前检测的是第几列MOV AL,CH ; MOV DX,MY8255_AOUT DX,ALMOV DX,MY8255_C ;IN AL,DX 选取一列,将X1〜X4中一个置O读Y1〜Y4,用于判断是哪一行按键闭合L1:TEST AL,O1H ; JNZ L2 ; MOV AL,OOH ;JMP KCODE 是否为第1 行不是则继续判断设置第1 行第1 列的对应的键值L2:TEST AL,O2H ; JNZ L3 ; 是否为第2 行不是则继续判断MOV AL,04HJMP KCODEL3:TEST AL,04H JNZ L4MOV AL,08HJMP KCODEL4:TEST AL,08H JNZ NEXTMOV AL,0CHKCODE:ADD AL,CLCALL PUTBUFPUSH AX KON:CALL DISCALL CLEARCALL CCSCANJNZ KON POPAXNEXT:INC CL MOVAL,CH TESTAL,08H JZKERRROL AL,1 MOVCH,AL JMPCOLUM KERR:JMP BEGIN 设置第2 行第1 列的对应的键值是否为第3 行不是则继续判断设置第3 行第1 列的对应的键值是否为第4 行不是则继续判断设置第4 行第1 列的对应的键值将第1 列的值加上当前列数,确定按键值保存按键值显示刷新清屏扫描按键,判断按键是否弹起未弹起则继续循环等待弹起当前检测的列数递增检测是否扫描到第4 列是则跳回到开始处没检测到第4 列则准备检测下一列CCSCAN PROC NEAR MOV AL,00HMOV DX,MY8255_AOUT DX,AL 扫描是否有按键闭合子程序将4列全选通,X1〜X4置OMOV DX,MY8255_CIN AL,DXNOT ALAND AL,0FH RET CCSCAN ENDPCLEAR PROC NEARMOV DX,MY8255_BMOV AL,00H OUTDX,AL清除数码管显示子程序段位置0 即可清除数码管显示RET CLEAR ENDPDIS PROC NEAR ; PUSH AX ;MOV SI,3000HMOV DL,0F7HMOV AL,DLAGAIN:显示键值子程序以缓冲区存放的键值为键值表偏移找到键值并显示PUSH DXMOV DX,MY8255_A OUT DX,AL ;MOV AL,[SI] ; MOV BX,OFFSET DTABLE AND AX,00FFHADD BX,AXMOV AL,[BX] ; MOV DX,MY8255_BOUT DX,AL ;CALL DALLY INC SI ; POP DXMOV AL,DLTEST AL,01H ;JZ OUT1 ;ROR AL,1MOV DL,ALJMP AGAIN ; OUT1: 设置X1〜X4,选通一个数码管取出缓冲区中存放键值将键值作为偏移和键值基地址相加得到相应的键值写入数码管A〜Dp取下一个键值判断是否显示完?显示完,返回未显示完,跳回继续POP AXRET DIS ENDP 读Y1〜Y4取出Y1〜Y4的反值PUTBUF PROC NEAR ; 保存键值子程序MOV SI,DIMOV [SI],ALDEC DICMP DI,2FFFHJNZ GOBACKMOV DI,3003HGOBACK: RETPUTBUF ENDPDALLY PROC NEAR ; 软件延时子程序PUSH CXMOV CX,00FFHD1: MOV AX,00FFHD2: DEC AXJNZ D2LOOP D1POP CXRETDALLY ENDPCODE ENDSEND START六、体会和感想通过这次的实验我了解到自己还有很多的不足,比如做实验的速度很慢,效率很低,思维不集中导致最后老师验收的时候没有来的及交,对书本的了解不是很透彻,也因此我决定下次实验的时候一定要好好地去思考,尽量在课外把实验看懂!。
实验报告实验六从键盘输入数据并显示
实验目的:
1.掌握接收键盘数据以及输入数据转换为ASCII码显示输出的基本方法。
2.熟悉COM文件的编写。
3.进一步熟悉子程序的应用。
实验内容:
编写COM文件格式程序,完成如下功能:
1.从键盘接收4位十六进制数据
2.将接收的数据转换为二进制形式,在屏幕上显示输出
实验步骤和要求:
1.分析问题,画出算法框图。
写实验预习报告。
2.编写COM格式汇编语言程序。
3.在DOS下编辑、汇编、连接程序。
4.用Debug调试程序。
5.在DOS下运行并分析结果。
6.填写实验报告。
算法框图
B_TO_A子程序
汇编源程序:
DOS下运行并分析结果
在DOS下编辑、汇编、连接程序
输入: AF57
结果是:1010 1111 0101 0111正确执行
总结。
专业:电气工程及其自动化姓名: _________实验报告学号: _______日期: ___ _____地点: ____ ________课程名称: ________微机原理(实验)___________指导老师: ____徐习东 _______成绩:__________________实验名称: ______ 键盘控制与显示_______实验类型: _____软件实验 ______同组学生姓名:__________一、实验目的和要求(必填)二、实验内容和原理(必填)三、主要仪器设备(必填)四、操作方法和实验步骤五、实验数据记录和处理六、实验结果与分析(必填)七、讨论、心得【实验目的】1.通过实验掌握 TMS320F2812 通用输入 / 输出管脚直接控制外围设备的方法2.了解发光二极管的控制编程方法。
3.了解 SPI 的使用。
4.了解如何使用 GpioA 口进行数据的锁存5.通过实验掌握 TMS320F2812 的扩展端口接收外围设备信息的方法6.了解键盘的使用原理及编程方法【实验内容】1.按键显示程序,对按键记录次数,以二进制显示在16 个 LED 上。
2.定时器编程,并用按键控制各位时分秒,使其能完成加减操作【实验仪器】TMS320F2812数字信号处理器与学生用集成板。
【实验步骤】1.撰写代码2.调试代码3.实现功能【实验代码】一、定时器①宏定义和全局变量定义然后同时定义了全局变量,包括时、分、分析:这段代码是初始宏定义,用于定义按键对应的编码与地址,秒,按键编码, LED 编码和控制位。
②共阳字形码分析:由于这次实验要用到数码管,所以我们要定义一个数码管共阳端字形码,使每一个代码对应一种显示状态。
③SPI 初始化子程序分析:这一段是本次实验的重点,就是SPI 初始化。
1 )SPICCR :用于控制SPI 的状态,上下降沿发送,还有几位的数据。
其中第7 位,即 SPICCR.6 是控制SPI 在上下沿发送, 1 代表下降沿,2 代表上升沿;第8 位,即 SPICCR.7 是控制复位的,0 代表为复位状态;低 4 位控制数据长度,长度等于n+1 。
实验一编程实现键盘输入和显示**************************************************************************************一、题目内容**************************************************************************************❖循环提示由键盘输入一个字符,若为自己姓的首字母(大小写均可),则显示‘My name is:XXX(自己的姓名拼音);若为自己学号的末位数字,则显示’ My ID number is:XXX(自己的学号);若输入其他字符则退出程序。
(三种情况都要验证至少一次截图附在实验报告中。
)❖以电科2班张弛同学1207071201242为例,运行程序后显示:▪Please input a character: z▪My name is: Zhang Chi▪Please input a character: 2▪My ID number is: 1207071201242▪Please input a character:a▪Quit the program.**************************************************************************************二、流程图****************************************************************************************************************************************************************************三、程序代码************************************************************************************** stack segment stack 'stack'dw 32 dup(0) ;定义32字空间stack endsdata segmentOBUF DB 'Please input a key',0DH,0AH,'$' ;定义字符串MSG1 DB 20H,'My name is:Zeng HongQing',0DH,0AH,0AH,'$' ;定义字符串MSG2 DB 20H,'My ID number is:2',0DH,0AH,0AH,'$' ;定义字符串data endscode s egmentbegin proc farassume ss:stack, cs:code, ds:datapush dssub ax,axpush axmov ax,datamov ds,axAGAIN: MOV DX,OFFSET OBUF;调用9号功能,输出字符串“Please input a character:”MOV AH,9INT 21HMOV AH,1;1号功能调用,等待输入一个字符INT 21HCMP AL,'z';将输入的字符与“z”比较是否一样JZ NAM ;如果为零即输入字符为z则跳转至NAMJMP ID ;如果不为零即输入字符非z则跳转至IDNAM: MOV DX,OFFSET MSG1;9号功能调用,输出“My name is:Zeng HongQing”MOV AH,9INT 21HJMP AGAINID: CMP AL,32H ;将输入的字符与2的ASSCII码比较是否相等JNZ OTHER ;如果不为零即输入不为2则跳转至OTHERMOV DX,OFFSET MSG2 ;为零即输入为2则调用9号功能输出“My ID number is:2”MOV AH,9INT 21HJMP AGAINOTHER: M OV AH,4CH;若输入的是其他字符,调用中断21h的4ch号功能,退出程序INT 21Hretbegin endpcode e ndsend begin**************************************************************************************四、操作截图****************************************************************************************************************************************************************************五、实验分析或经验总结************************************************************************************** 1、编译汇编文件:先在记事本里输入代码后,再用汇编编译器编译。
微机原理实验一、实验目的:1、应用学过的汇编语言编写简单程序,将汇编语言在编程中实际应用。
2、掌握汇编语言的编辑、汇编、连接、调试等基本方法。
3、灵活应用各种语句实现要求的程序功能。
4、在实验中进一步掌握并熟练应用汇编语言,理解常用指令、伪指令及存储空间分配等二、实验内容:从键盘取得一串字符显示在屏幕上,然后将这串字符以输入的反序再显示一遍,并统计这字符串中‘A’的个数,显示在屏幕上。
附加要求:可以从键盘输入需要统计的字符,并统计这字符串中这个字符的个数,显示在屏幕上。
三、流程图:四、实验程序:DA TAS SEGMENTPASS DB 20 ;预留20个字节的空间存放输入的字符BLK1 DB 'SHU RU ZI FU CHUAN: $' ;在屏幕上要显示的提示语句BLK2 DB 'SHU RU ZI FU : $'BLK3 DB 'SHU LIANG SHI: $'BLK4 DB 'FAN ZHUAN HOU: $'DA TAS ENDS;********以上是数据段定义,下面开始代码段************CODES SEGMENTASSUME CS:CODES,DS:DA TASSTART: MOV AX,DA TASMOV DS,AX ;实现ASSUME中的承诺;****************************************************MOV AH,09H ;字符串输出功能09HLEA DX,BLK1INT 21H;**********显示第一句提示语*************************MOV AH,0AH ;字符串输入功能0AHLEA DX,PASSINT 21H;********以上完成字符串输入并显示出来***************MOV AH,2MOV DL,0DHINT 21HMOV DL,0AHINT 21H;*********以上实现回车换行***************************MOV AH,09HLEA DX,BLK4INT 21H;*******输出BLK4中定义的内容,提示为反转后字符串***************MOV CL,PASS+1 ;PASS+1处是实际输入的字符个数MOV CH,0 ;CH置0,CX为循环的次数也就是输入的字符个数MOV DL,PASS+1MOV DH,0 ;DX同样是字符个数,用于后面的加法运算LEA SI,PASS+2 ;PASS+2处为实际输入字符的开始位置;S0: DEC SI ;SI不断减1,指针指向地址不断前移,也就反向了输出刚才输入的字符串MOV AH,02H ;显示输出功能02HMOV DL,[SI] ;输出指针所指向单元中的内容INT 21HLOOP S0;**********以上用循实现了字符串的反转后输出功能***************MOV AH,2MOV DL,0DHINT 21HMOV DL,0AHINT 21H;***********回车换行*******************MOV AH,09HLEA DX,BLK2INT 21H;**********显示提示语BLK2输入要查找的字符的提示语输出************************MOV AH,01H ; 有回显的输入,显示的是输入的要查找字符INT 21HMOV CL,PASS+1XOR CH,CHLEA SI,PASS+2XOR DL,DL ;和前面相同CX设置了循环次数,SI指向第一个字符S1: CMP AL,[SI] ;进行字符比较,是和Al比较,若相同则计数加1,不同则比较下一个JNZ NEXTINC DL ;DL记录的是比较过程中相同的字符数NEXT: INC SI ;指向下一个字符LOOP S1MOV BL,DL ;DL记录的数量给BL后面语句输出之前要用到DL;*******通过以上循环将所有字符比较一遍得到数量******************************* MOV AH,02HMOV DL,0DHINT 21HMOV DL,0AHINT 21H;*******************回车换行**************************MOV AH,09HLEA DX,BLK3INT 21H;*****输出提示语BLK3相同字符的数量**************************MOV DL,BLADD DL,30H ;计数加30H是为了转换成ASC码输出。
微机原理实验实验名称:编程实现键盘输入和显示将自己的姓名拼音和9位学号定义在数据段循环提示由键盘输入一个数字,若为奇数,则显示自己的姓名拼音;若为偶数和0,则显示自己的学号;若输入其他字符则退出程序返回DOS 。
(三种情况都要有实验结果。
)▪ Please input a number:7▪ My name is:卢丽霞▪ Please input a number:8▪ My ID number is: 110703220.▪ Please input a number:q▪ Quit the program.YNYNNY代码:stack segment stack 'stack'dw 32 dup(0) 开始 输入mingzi 和num 调用1号系统功能,将输入的符号的ASCII 码值放入AL 中AL<’0’ AL>’9’a 是奇数 输出学号输出姓名 输出”Quit the program ” 结束stack endsdata segmentbuf1 db 'Please input a number:$'buf2 db 'My name is:$'buf3 db 'Please input a number:$'buf4 db 'My ID number is: $'buf5 db 'please input a number:$'buf6 db 'Quit the program$'mingzi db 'My name is:lulixia$'num db 'My ID number is:110703220$' data endscode segmentbegin proc farassume ss: stack, cs: code, ds: data push dssub ax, axpush axmov ax, datamov ds, axmov ax,datamov ds,axmov dx,offset buf1mov ah,9int 21hmov ah,01int 21hcmp al,'0'jb stopcmp al,'9'ja stopxor ah,ahmov bl,2div blcmp ah,0jz idmov ah,9mov dx,offset mingzi int 21hjmp beginid:mov ah,9mov dx,offset numint 21hjmp beginstop:mov ah,9mov dx,offset buf6int 21hmov ah,4chint 21hretbegin endpcode endsend begin程序结果:实验分析:本实验预先设置好的结果按需要显示,并运用科各种系统功能的调用,还用了比较cmp判断,还通过判断除法余数是否为零判断被除数的奇偶。
实验六从键盘输入数据并显示1要求:编写程序,将键盘接收到的四位十六进制数转换为等值的二进制数,并显示在屏幕上。
若输入的不是0—F间的数字,则显示出错信息,并要求重新输入。
2目的:掌握接收键盘数据的方法,并了解将键盘数据显示时须转换为ASCII码的原理。
实验程序CRLF MACROMOV AH,02HMOV DL,0DHINT 21HMOV AH,02HMOV DL,0AHINT 21HENDMDATA SEGMENTMARK DB?MESS DB'please input the number(H),press inter,ture into number(B).press space end.',0DH,0AH,'$'ERROR DB 0DH,0AH, 'input error',0DH,0AH,'$'DATA ENDSSTACK SEGMENTSTA DW32 DUP(?)TOP DW?STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACKSTART: MOV AX,DATAMOV DS,AXMOV ES,AXMOV SP,TOPHEAD: CRLFMOV MARK,0MOV AH,09HLEA DX,MESSINT 21H ;显示提示输入的信息CALL GETNUM ;接收键入数值送DXCMP MARK,01HJE HEADMOV CX,0010H ;16位MOV BX,DXTTT: ROL BX,1 ;循环左移1位MOV DL,BLAND DL,01H ;屏蔽掉高7位ADD DL,30HMOV AH,02HINT 21H ;显示二进制位对应的ASCII字符LOOP TTTJMP HEADFINI: MOV AX,4C00HINT 21H ;返回DOSGETNUM PROC NEAR ;子程序,接收键入数值送DX PUSH CXXOR DX,DXGGG: MOV AH,01HINT 21HCMP AL,0DH ;输入为回车,则进行转换JE PPPCMP AL,20H ;输入为空格,则退回DOSJE FINICMP AL,30HJB KKKSUB AL,30HCMP AL,0AHJB GETSCMP AL,11HJB KKKSUB AL,07HCMP AL,0FHJBE GETSCMP AL,2AHJB KKKCMP AL,2FHJA KKKSUB AL,20HGETS: MOV CL,04SHL DX,CLXOR AH,AHADD DX,AXJMP GGGKKK: MOV AH,09HMOV DX,OFFSET ERRORINT 21HMOV MARK,01HPPP: PUSH DXCRLFPOP DXPOP CXRETGETNUM ENDPCODE ENDSEND START。
东南大学《微机实验及课程设计》实验报告实验五8253 计数器/定时器实验六8255 并行输入输出姓名:学号:08011专业:自动化实验室:计算机硬件技术实验时间:2012年04月27日报告时间:2013年05月15日评定成绩:审阅教师:一. 实验目的实验五:1)掌握计数器/定时器8253 的基本工作原理和编程应用方法;2)了解掌握8253 的计数器/定时器典型应用方法实验六:1)掌握8255方式0的工作原理及使用方法,利用直接输入输出进行控制显示;2)掌握8段数码管的动态刷新显示控制;3)分析掌握8255工作方式1时的使用及编程,进一步掌握中断处理程序的编写。
二. 实验内容实验五:必做:5-1 将计数器0设置为方式0,计数初值为N(小于等于0FH),用手动的方式逐个输入单脉冲,编程使计数值在屏幕上显示,并同时用逻辑笔观察OUT0电平变化。
(参考程序p63)5-2 将计数器0、1分别设置在方式3,计数初值设为1000,用逻辑笔观察OUT0电平的变化。
(参考程序p64)实验六:(1)8255方式 0:简单输入输出实验电路如图一,8255C口输入接逻辑电平开关K0~K7,编程A口输出接 LED显示电路L0~L7;用指令从 C口输入数据,再从A口输出。
图一 8255简单输入输出(2)编程将A口 L0-L7控制成流水灯,流水间隔时间由软件产生;流水方向由K0键在线控制,随时可切换;流水间隔时间也可由K4~K7键编码控制,如 0000对应停止,0001对应 1秒,1111对应 15秒,大键盘输入 ESC键退出。
(3)8段数码管静态显示:按图二连接好电路,将 8255的 A口PA0~PA6分别与七段数码管的段码驱动输入端a~g相连,位码驱动输入端 S1接+5V(选中),S0、dp接地(关闭)。
编程从键盘输入一位十进制数字(0~9),在七段数码管上显示出来。
图二单管静态显示(4) 8段数码管动态显示:按图三连接好电路,七段数码管段码连接不变,位码驱动输入端S1、S0 接8255 C口的PC1、PC0。
微机原理实验(含解答程序)-CAL-FENGHAI-(2020YEAR-YICAI)_JINGBIAN微机原理实验课题(共16个内容,附解答程序)(汇编程序可以使用MASM FOR WINDOWS)1.将偏移地址为2000h开始的100个单元依次设置为0~99。
2.将两个64位的二进制数相加,记录相加的和以及各个状态标志的值。
3. 编写程序,在屏幕上分行显示自己的姓名、学号。
4. 编写程序,通过键盘输入0——9之间的一个数字,利用查表法计算其平方。
在DEBUG下查看执行结果。
5. 用分支结构设计程序实现符号函数100010xy xx>⎧⎪==⎨⎪-<⎩,要求x和y存放在内存单元中,并将判断的结果在屏幕上显示输出。
6. 在键盘上输入一个字符,判断是否为小写字母,若不是,显示错误信息,若是,则将其转换为大写字母并显示。
7. 在键盘上输入一个字符,判断它是一个数字、大写字母还是小写字母,若为数字,则显示digital,若为字母,显示letter,否则,显示other。
8. 将字节型变量x的低四位(一位十六进制数)以十六进制数的形式显示。
9. 编制程序计算S=1+2·3+3·4+4·5+……+N(N+1)+……直到N (N+1)大于200为止,并将结果由屏幕上显示出来。
10. 将字形变量x以二进制数的形式在屏幕上显示输出。
11. 将字形变量x以十六进制数的形式在屏幕上显示输出。
12. 将内存单元缓冲区中的符号数(20个)按从小到大的顺序排列,并以十六进制数的形式显示。
13. 编制程序计算S=1+2+3+……+N,并将结果由屏幕上显示出来。
(要求:在屏幕上显示提示信息,提示输入N,N用十六进制表示,且N小于0FH,用子程序实现(段内),将输入的结果用十六进制数输出显示,显示结果的程序用子程序是实现(段间))。
14.要求在键盘上输入一个小于四位的十进制数,将其转换为二进制数存放,并讲转换后的结果以十六进制数的形式在屏幕上显示出来。
实验一数据传送实验目的:1.熟悉8086指令系统的数据传送指令及8086的寻址方式。
2.利用TurboDebugger调试工具来调试汇编语言程序。
实验任务:1.通过下述程序段的输入和执行来熟悉TurboDebugger的使用,并通过显示器屏幕观察程序的执行情况。
练习程序段如下:MOVBL,08HMOVCL,BLMOVAX,03FFHMOVBX,AXMOVDS:[0020H],BX2.用以下程序段将一组数据压入(PUSH)堆栈区,然后通过不同的出栈顺序出栈,观察出栈后数据的变化情况。
压栈程序段如下:MOVAX,0102HMOVBX,0304HMOVCX,0506HMOVDX,0708HPUSHAXPUSHBXPUSHCXPUSHDX出栈程序段请自行编写(用不同的出栈顺序)。
3.指出下列指令的错误并加以改正,上机验证之。
(1)MOV[BX],[SI](2)MOVAH,BX(3)MOVAX,[SI][DI](4)MOVBYTEPTR[BX],2000H(5)MOVCS,AX(6)MOVDS,2000H4.设置各寄存器及存储单元的内容如下:(BX)=0010H,(SI)=0001H(10010H)=12H,(10011H)=34H,(10012H)=56H,(10013H)=78H(10120H)=0ABH,(10121H)=0CDH,(10122H)=0EFH说明下列各条指令执行完后AX寄存器中的内容,并上机验证。
(1)MOVAX,1200H(2)MOVAX,BX(3)MOVAX,[0120H](4)MOVAX,[BX](5)MOVAX,0110H[BX](6)MOVAX,[BX][SI](7)MOVAX,0110H[BX][SI]5.将DS:1000H字节存储单元中的内容送到DS:2020H单元中存放。
试分别用8086的直接寻址、寄存器间接寻址、变址寻址、寄存器相对寻址传送指令编写程序段,并上机验证结果。
实验9键盘扫描及显示实验
实验时间2019年12月18日
实验类型■验证性□设计性□综合性
1.实验目的
了解键盘扫描及数码显示的基本原理,熟悉8255的编程。
2.实验内容及过程(主要内容、操作步骤)
将8255单元与键盘及数码管显示单元连接,编写实验程序,扫描键盘输入,并将扫描结果送数码管显示。
键盘采用4X4键盘,每个数码管显示值可为0~F 共16个数。
实验具体内容如下:将键盘进行编号,记作0~F,当按下其中-一个按键时,将该按键对应的编号在一个数码管上显示出来,当再按下一个按键时,便将这个按键的编号在下一个数码管上显示出来,数码管上可以显示最近4次按下的按键编号。
3.测试数据及实验结果
4.实验分析及总结(主要考察内容)
通过本次实验,我理解了键盘扫描及数码显示的基本原理,通过理解分析程序,自己对程序进行了一些总结和修改,并进行了验证,进一步掌握了微机接口的学习方法。
教师评阅
评价指标:实验目的、操作步骤、设计、算法、程序结构、实验结果、实验分析、实验总结
1/ 1。
微机原理课程设计题目: 键盘录入数据的转换与显示初始条件:从键盘读入二个五位十进制数(1位符号位+4位数值位),并将这二个十进制数,分别转换为二进制数,然后求其和,再将和以十进制形式进行显示。
按Q退出程序。
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)(1)设计任务及要求分析(2)方案比较及认证说明(3)系统原理阐述(4)硬件设计课题需要说明:硬件原理,电路图,采用器件的功能说明(5)软件设计课题需要说明:软件思想,流程图,源程序及程序注释(6)调试记录及结果分析(7)总结(8)参考资料(9)附录:芯片资料或程序清单,软件演示屏幕拷贝图或硬件实物图摘要:本文所设计的程序是运行于硬件和DOS操作系统下的,本程序通过调用DOS下的基本输入输出中断,实现数据的输入和输出。
程序中有两个子程序,输入的两个五位的十进制数通过调用一个叫ASC_TO_BIN的子程序可以将其转换成二进制数,然后求两个二进制数的和,求和完成后,再调用一个叫BIN_TO_ASCII的子程序将二进制和转换成相应的ASCII码,调用DOS输出中断显示在屏幕上,最后看用户是否输入的是Q或者q,若是则程序结束,若不是则程序循环。
关键字:8086;DOS系统;ASCII码;中断目录1设计任务及要求分析 (1)1.1设计任务 (1)1.2要求分析 (1)2方案比较及认证说明 (2)3系统原理阐述 (3)3.1统设计的软硬件环境 (3)3.2统设计中用到的DOS调用 (3)4软件设计说明 (5)4.1 ASCII码转换成二进制算法实现 (5)4.2二进制转换成ASCII码算法实现 (5)4.3主程序结构分析 (5)4.4子程序结构分析 (6)4.5中断程序的结构分析 (8)5调试记录及结果分析 (9)5.1调试记录 (9)5.2调试结果分析 (9)总结和心得体会 (10)参考文献 (11)附录一源程序和程序注释 (12)附录二程序运行结果截图 (16)附录三本科生课程设计成绩评定表 (17)附录四评定项目表 (18)键盘录入数据的转换与显示1设计任务及要求分析1.1设计任务从键盘读入二个五位十进制数(1位符号位+4位数值位),并将这二个十进制数,分别转换为二进制数,然后求其和,再将和以十进制形式进行显示。
微机原理键盘控制与显⽰实验报告专业:电⽓⼯程及其⾃动化姓名: _________实验报告学号: _______⽇期: ___ _____地点: ____ ________课程名称: ________微机原理(实验)___________指导⽼师: ____徐习东 _______成绩:__________________实验名称: ______ 键盘控制与显⽰_______实验类型: _____软件实验 ______同组学⽣姓名:__________⼀、实验⽬的和要求(必填)⼆、实验内容和原理(必填)三、主要仪器设备(必填)四、操作⽅法和实验步骤五、实验数据记录和处理六、实验结果与分析(必填)七、讨论、⼼得【实验⽬的】1.通过实验掌握 TMS320F2812 通⽤输⼊ / 输出管脚直接控制外围设备的⽅法2.了解发光⼆极管的控制编程⽅法。
3.了解 SPI 的使⽤。
4.了解如何使⽤ GpioA ⼝进⾏数据的锁存5.通过实验掌握 TMS320F2812 的扩展端⼝接收外围设备信息的⽅法6.了解键盘的使⽤原理及编程⽅法【实验内容】1.按键显⽰程序,对按键记录次数,以⼆进制显⽰在16 个 LED 上。
2.定时器编程,并⽤按键控制各位时分秒,使其能完成加减操作【实验仪器】TMS320F2812数字信号处理器与学⽣⽤集成板。
【实验步骤】1.撰写代码2.调试代码3.实现功能【实验代码】⼀、定时器①宏定义和全局变量定义然后同时定义了全局变量,包括时、分、分析:这段代码是初始宏定义,⽤于定义按键对应的编码与地址,秒,按键编码, LED 编码和控制位。
②共阳字形码分析:由于这次实验要⽤到数码管,所以我们要定义⼀个数码管共阳端字形码,使每⼀个代码对应⼀种显③SPI 初始化⼦程序分析:这⼀段是本次实验的重点,就是SPI 初始化。
1 )SPICCR :⽤于控制SPI 的状态,上下降沿发送,还有⼏位的数据。
其中第7 位,即 SPICCR.6 是控制SPI 在上下沿发送, 1 代表下降沿,2 代表上升沿;第8 位,即 SPICCR.7 是控制复位的,0 代表为复位状态;低 4 位控制数据长度,长度等于n+1 。
微机原理实验报告西安电⼦科技⼤学实验报告班级:1303018学号:130********姓名:李胜东地点: EII-312批次:第批时间: 2015.11-2015.12实验⼀汇编语⾔编程实现1.实验⽬的(1)掌握汇编语⾔的编程⽅法(2)掌握DOS功能调⽤的使⽤⽅法(3)掌握汇编语⾔程序的调试运⾏过程2.实验内容(1)将指定数据区的字符串数据以ASCII码形式显⽰在屏幕上,并通过DOS功能调⽤完成必要提⽰信息的显⽰。
(2)在屏幕上显⽰⾃⼰的学号姓名信息。
(3)循环从键盘读⼊字符并回显在屏幕上,然后显⽰出对应字符的ASCII码,直到输⼊”Q”或“q”时结束。
实验中使⽤的DOS功能调⽤: INT 21H3.实验步骤及原理(1)运⾏QTHPCI软件,根据实验内容编写程序,参考程序流程如下图所⽰。
(2)使⽤“项⽬”菜单中的“编译”或“编译连接”命令对实验程序进⾏编译、连接。
(3)“调试”菜单中的“进⾏调试”命令进⼊Debug调试,观察调试过程中数据传输指令执⾏后各寄存器及数据区的内容。
按F9连续运⾏。
(4)更改数据区的数据,考察程序的正确性。
4.实验源代码DATA SEGMENTNUMBER DB 'SNO:130********',0AH,'NAME:lishengdong',0DH,0AH,'$';0DH (回车))0AH(换⾏)24H($)结束MSG1 DB 0AH,0DH,'If you want to leave,please input: q or Q ',0AH,0DH,'$'MSG2 DB 0AH,0DH,0AH,0DH,'Input: $'RESULT DB 0AH,0DH,'ASCII is: $'SD DB ' 'DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV SI,OFFSET DATAMOV CX,5A:MOV AL,DS:[SI]AND AL,0F0HCMP AL,0A0HJB A1ADD AL,07HA1:SHR AL,1SHR AL,1SHR AL,1SHR AL,1OR AL,30HMOV AH,02HMOV DL,ALINT 21HMOV AL,DS:[SI]AND AL,0FHCMP AL,0AHJB A2ADD AL,07HA2:OR AL,30HMOV AH,02HMOV DL,ALINT 21HINC SILOOP AMOV AX,DATAMOV DS,AXMOV DX,OFFSET NUMBERMOV AH,09HINT 21HMOV DX,OFFSET MSG1 MOV AH,09H INT 21HC1: MOV DX,OFFSET MSG2 MOV AH,09H INT 21HMOV AH,01HINT 21HCMP AL,'Q'JZ EXITCMP AL,'q'JZ EXITMOV SD,ALMOV DX,OFFSET RESULTMOV AH,09HINT 21HMOV SI,OFFSET SDMOV AL,DS:[SI]AND AL,0F0HMOV CL,4SHR AL,CLCMP AL,0AHJB C2ADD AL,07HC2: ADD AL,30HMOV DL,ALMOV AH,02HINT 21HMOV AL,DS:[SI]AND AL,0FHCMP AL,0AHJB C3ADD AL,07HC3: ADD AL,30HMOV DL,ALMOV AH,02HINT 21Hloop C1EXIT: MOV AX,4C00HINT 21HCODE ENDSEND START实验⼆数码转换实验1.实验⽬的(1)掌握不同进制数及编码相互转换的程序设计⽅法。
实验一显示程序实验一、实验目的1. 掌握在PC机上以十六进制形式显示数据的方法;2. 掌握部分DOS功能调用使用方法;3. 熟悉Tddebug调试环境和Turbo Debugger的使用。
二、实验所用设备1. PC微机一台。
三、实验内容一般来说,程序需要显示输出提示运行的状况和结果,有的还需要将数据区中的内容显示在屏幕上。
本实验要求将指定数据区的数据以十六进制数形式显示在屏幕上,并通过DOS功能调用完成一些提示信息的显示。
实验中可使用DOS功能调用(INT21H)。
(1) 显示单个字符输出入口:AH=02H调用参数:DL=输出字符(2) 显示字符串入口:AH=09H调用参数:DS:DX=串地址,’$’为结束字符(3) 键盘输入并回显入口:AH=01H返回参数:AL=输出字符(4) 返回DOS系统入口:AH=4CH调用参数:AL=返回码四、实验步骤1.运行Tddebug软件,选择Edit菜单,根据实验内容的描述编写实验程序,本实验显示部分参考实验流程如图1-1示;2.使用Compile菜单中的Compile和Link对实验程序进行汇编、连接;3.使用Rmrun菜单中的Run,运行程序,观察运行结果;4.使用Rmrun菜单中的Debug,调试程序,观察调试过程中,数据传输指令执行后,各寄存器及数据区的内容;5.更改数据区中的数据,考察程序的正确性。
图1-1 显示程序实验流程图五、参考程序清单六、实验报告内容及要求写出程序调试过程及运行情况。
1.将参考程序写入轻松汇编编辑框。
2.点击保存,然后编译,结果框显示编译成功。
3.点击生成,显示链接成功。
4.点击运行,显示如图:实验二数据传送实验一、实验目的1. 熟悉Tddebug调试环境和Turbo Debugger的使用;2. 掌握与数据有关的不同寻址方式。
二、实验所用设备1. PC微机一台。
三、实验内容将数据段中的一个字符串传送到附加段中,并输出附加段中的目标字符串到屏幕上。
微机综合实验课程设计报告书姓名:班级:08级电信班学号:成绩:设计题目分析:通过课程设计使学生更进一步了解掌握微机原理及应用课程的有关知识,提高应用微机解决问题的能力,加深对微机应用的理解。
通过查阅资料,结合所学的知识进行软、硬件的设计,使学生初步掌握应用微机解决问题的步骤及方法用汇编语言设计一数字时钟程序,基于8086微型计算机,利用汇编设计系统时间显示,该设计为软件设计,旨在锻炼同学们编程能力和加深对汇编程序的理解。
要求:(1)实现年月日时分秒的计时,并显示于屏幕中央(2)软件设计1.功能简介2.流程图3.程序(3)显示界面设计步骤详细介绍:本课程设计任务要求在运行时,屏幕分时显示“年、月、日”的形式来显示本机的系统的日期,在按大写字母D时。
由此可知,首先定义光标显示界面,然后调用BIOS中断,读取系统日期,并将调用的二进制表示的日期转换成ASCLL码,并将日期数存入显存区,最后将存在系统内存区的时间用字符串的形式显示出来。
在按下T之后,屏幕将以“时:分:秒”的形式显示本机的系统的时间,首先定义光标显示界面,然后调用BIOS中断,读取系统时间,然后将调用的二进制转换成ASCLL码,最后在系统的内存区以字符串的形式显示,由于获取了的系统时间不会自动的刷新,所以我们要设计成循环的方式来不断获取系统的时间,这样就形成了会跳动的电子钟了。
程序一旦进入运行,就将不间断的在显示屏显示时间,要想程序停止运行,按esc即可退出。
关键技术分析:设计中遇到的问题和解决的步骤、方法:设计结果:可以显示日期和时间调用转换子程序将年份数值转换成相应的ASCII 码字符调用系统日期 MOV AH,2AH INT 21H CX年号DH月份DL日期BXDBUFFER 的偏移地址 ALCHAH00H调用显示月份子程序调用显示日期子程序调用显示分子程序开 始调用转换子程序将月份数值转换成相应的ASCII 码字符调用转换子程序将日数值转换成相应的ASCII 码字符调用系统时间MOV AH,2CHINT 21H CH小时CL分钟 DH 秒数BXDBUFFER1的偏移地址调用显示小时子程序调用显示年份子程序调用显示秒子程序调用转换子程序将小时转换成相应的ASCII 码字符调用转换子程序将分钟数值转换成相应的ASCII 码字符调用转换子程序将秒数值转换成相应的ASCII 码字符用9号功能显示日期用9号功能显示时间是否有输入Y结束ANA调用转换子程序将年份数值转换成相应的ASCII 码字符调用系统日期 MOV AH,2AH INT 21H CX年号DH 月份DL 日期BX DBUFFER 的偏移地址 AL CHAH00H调用显示月份子程序调用显示日期子程序调用显示分子程序开 始调用转换子程序将月份数值转换成相应的ASCII 码字符调用转换子程序将日数值转换成相应的ASCII 码字符调用系统时间MOV AH,2CHINT 21H CH 小时CL分钟DH秒数BXDBUFFER1的偏移地址调用显示小时子程序调用显示年份子程序调用显示秒子程序调用转换子程序将小时转换成相应的ASCII 码字符调用转换子程序将分钟数值转换成相应的ASCII 码字符调用转换子程序将秒数值转换成相应的ASCII 码字符用9号功能显示日期用9号功能显示时间是否有输入YANA附录1:程序运行截图(2张)日期显示:时间显示:附录2:源程序列表(带注释)STACK SEGMENT STACKDW 200 DUP (?)STACK ENDSDATA SEGMENTSPACE DB 1000 DUP (' ')PATTERN DB 6 DUP (' '),0C9H,26 DUP (0CDH),0BBH,6 DUP (' ')DB 6 DUP (' '),0BAH,26 DUP (20H),0BAH,6 DUP (' ')DB 6 DUP (' '),0C8H,26 DUP (0CDH),0BCH,6 DUP (' ')DBUFFER DB 8 DUP (':'),12 DUP (' ')DBUFFER1 DB 20 DUP (' ')STR DB 0DH,0AH, 'PLEASE INPUT DATE(D) OR TIME(T) OR QUIT(Q): $' DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACKSTART: MOV AX,0001H ;设置显示方式为40*25彩色文本方式INT 10HMOV AX,DATAMOV DS,AXMOV ES,AXMOV BP,OFFSET SPACEMOV DX,0B00HMOV CX,1000MOV BX,0040HMOV AX,1300HINT 10HMOV BP,OFFSET PATTERN ;显示矩形条MOV DX,0B00HMOV CX,120MOV BX,004EHMOV AX,1301HINT 10HLEA DX,STR ;显示提示信息MOV AH,9INT 21HMOV AH,1 ;从键盘输入单个字符INT 21HCMP AL,44H ;AL='D'?JNE ACALL DATE ;显示系统日期A: CMP AL,54H ;AL='T'?JNE BCALL TIME ;显示系统时间B: CMP AL,51H ;AL='Q'?JNE STARTMOV AH,4CH ;返回dos状态INT 21HDATE PROC NEAR ;显示日期子程序DISPLAY:MOV AH,2AH ;取日期INT 21HMOV SI,0MOV AX,CXMOV BX,100DIV BLMOV BL,AHCALL BCDASC1 ;日期数值转换成相应的ASCII码字符MOV AL,BLCALL BCDASC1INC SIMOV AL,DHCALL BCDASC1INC SIMOV AL,DLCALL BCDASC1MOV BP,OFFSET DBUFFER1MOV DX,0C0DHMOV CX,20MOV BX,004EHMOV AX,1301HINT 10HMOV AH,02H ;设置光标位置MOV BH,0INT 10HMOV BX,0018HREPEA: MOV CX,0FFFFH ;延时REPEAT:LOOP REPEATDEC BXJNZ REPEAMOV AH,01H ;读键盘缓冲区字符到AL寄存器INT 16HJE DISPLAYJMP STARTMOV AX,4C00HINT 21HRETDATE ENDPTIME PROC NEAR ;显示时间子程序DISPLAY1:MOV SI,0MOV BX,100DIV BLMOV AH,2CH ;取时间INT 21HMOV AL,CHCALL BCDASC ;将时间数值转换成ASCII码字符INC SIMOV AL,CLCALL BCDASCINC SIMOV AL,DHCALL BCDASCMOV BP,OFFSET DBUFFERMOV DX,0C0DHMOV CX,20MOV BX,004EHMOV AX,1301HINT 10HMOV AH,02HMOV DX,0300HMOV BH,0INT 10HMOV BX,0018HRE: MOV CX,0FFFFHREA: LOOP READEC BXJNZ REINT 16HJE DISPLAY1JMP STARTMOV AX,4C00HINT 21HRETTIME ENDPBCDASC PROC NEAR ;时间数值转换成ASCII码字符子程序PUSH BXCBWMOV BL,10DIV BLADD AL,'0'MOV DBUFFER[SI],ALINC SIADD AH,'0'MOV DBUFFER[SI],AHINC SIPOP BXRETBCDASC ENDPBCDASC1 PROC NEAR ;日期数值转换成ASCII码字符子程序PUSH BXCBWMOV BL,10DIV BLADD AL,'0'MOV DBUFFER1[SI],ALINC SIADD AH,'0'MOV DBUFFER1[SI],AHINC SIPOP BXRETBCDASC1 ENDPCODE ENDSEND START。
课程名称: __________ 微机原理(实验) _________________ 指导老师: _徐习东 _______________ 成绩: _______________________ 实验名称: _________ 键盘控制与显示 ___________ 实验类型: _______ 软件实验 __________ 同组学生姓名: _______________ 七、讨论、心得【实验目的】1. 通过实验掌握TMS320F2812 通用输入/输出管脚直接控制外围设备的方法2. 了解发光二极管的控制编程方法。
3. 了解SPI 的使用。
4. 了解如何使用GpioA 口进行数据的锁存5. 通过实验掌握TMS320F2812 的扩展端口接收外围设备信息的方法6.了解键盘的使用原理及编程方法【实验内容】1. 按键显示程序,对按键记录次数,以二进制显示在16个LED 上。
2.定时器编程,并用按键控制各位时分秒,使其能完成加减操作【实验仪器】TMS320F2812 数字信号处理器与学生用集成板。
【实验步骤】1. 撰写代码2. 调试代码3.实现功能別f 尹丿占实验报告专业: 姓名:学号: 日期: 地点:电气工程及其自动化 一、实验目的和要求(必填) 三、主要仪器设备(必填) 五、实验数据记录和处理 二、实验内容和原理(必填) 四、操作方法和实验步骤 六、实验结果与分析(必填)【实验代码】 、疋时器① 宏定义和全局变量定义R 犍蛊控制曲钟nclude "DSP281x_De (vic« .h" 卍枝键对应值Uint16 LEEReg;UintlS KeyReg 1:Uitit321 = 0;Uint16Ctrl ; int 16Sec=0;1 Tltl6M IL =0;int 16 Hor-Cl ; UintlSLight[3];秒,按键编码,LED 编码和控制位。
② 共阳字形码O K jOOO.Oxf 900, OxA4OO J .0iBDOO,0x9900,0x5200, OMfl^OD^OxFSOD, O K B000y0x9000.0zBBOO,Oz3300,OxcEDO,Oxa IDO,OxB&OD^OssEciOO , 0x5G (J0,Uxbf DU,Osa7UQ,OzffOa,0x4000,CK79Da,DM240D r Dx^ 000, 0 itl900, O K ISOQ, 0s DEOO,Oz 7000,030000,0x1000);分析:由于这次实验要用到数码管,所以我们要定义一个数码管共阳端字形码,使每一个代码对应一种显 示状态。
实验六从键盘输入数据并显示1要求:编写程序,将键盘接收到的四位十六进制数转换为等值的二进制数,并显示在屏幕上。
若输入的不是0—F间的数字,则显示出错信息,并要求重新输入。
2目的:掌握接收键盘数据的方法,并了解将键盘数据显示时须转换为ASCII码的原理。
实验程序CRLF MACROMOV AH,02H ;换行MOV DL,0DHINT 21HMOV AH,02H ;回车MOV DL,0AHINT 21HENDM ;宏定义结束DATA SEGMENT ;数据段MARK DB?MESS DB'please input the number(H),press inter,ture intonumber(B).press space end.',0DH,0AH,'$'ERROR DB 0DH,0AH, 'input error',0DH,0AH,'$'DATA ENDS ;数据段结束STACK SEGMENT ;堆栈段STA DW 5 DUP(?)TOP DW?STACK ENDS ;堆栈段结束CODE SEGMENT ;代码段ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACKSTART: MOV AX,DATAMOV DS,AXMOV ES,AXMOV SP,TOP ;SP指向堆栈段段尾HEAD: CRLF ;输出换行符MOV MARK,0MOV AH,09H ;显示9号功能,即字符串显示LEA DX,MESSINT 21H ;显示提示输入的信息CALL GETNUM ;接收键入数值送DXCMP MARK,01H ;比较两者大小JE HEAD ;如果相等则跳转MOV CX,0010H ;16位MOV BX,DXTTT: ROL BX,1 ;循环左移1位MOV DL,BLAND DL,01H ;屏蔽掉高7位ADD DL,30HMOV AH,02H ;字符输出INT 21H ;显示二进制位对应的ASCII字符 LOOP TTT ;循环跳转tttJMP HEADFINI: MOV AX,4C00H ;最后结束语句INT 21H ;返回DOSGETNUM PROC NEAR ;子程序,接收键入数值送DX PUSH CXXOR DX,DXGGG: MOV AH,01HINT 21H ;调用中断CMP AL,0DH ;输入为回车,则进行转换 JE PPPCMP AL,20H ;输入为空格,则退回DOS JE FINICMP AL,30HJB KKK ;输入有误,显示errorCMP AL,11HJB KKKCMP AL,2AHJB KKKCMP AL,2FHJA KKKSUB AL,20H ;使大小写输入一样MOV AH,ALCMP AL,'9'JBE SAVE1 ;大于零,且小于等于9,直接将ASCII码存放于HEX1变量。
实验六从键盘输入数据并显示
1要求:
编写程序,将键盘接收到的四位十六进制数转换为等值的二进制数,并显示在屏幕上。
若输入的不是0—F间的数字,则显示出错
信息,并要求重新输入。
2目的:
掌握接收键盘数据的方法,并了解将键盘数据显示时须转换为ASCII码的原理。
实验程序
CRLF MACRO
MOV AH,02H
MOV DL,0DH
INT 21H
MOV AH,02H
MOV DL,0AH
INT 21H
ENDM
DATA SEGMENT
MARK DB?
MESS DB'please input the number(H),press inter,ture into number(B).press space end.',0DH,0AH,'$'
ERROR DB 0DH,0AH, 'input error',0DH,0AH,'$' DATA ENDS
STACK SEGMENT
STA DW32 DUP(?)
TOP DW?
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK START: MOV AX,DATA
MOV DS,AX
MOV ES,AX
MOV SP,TOP
HEAD: CRLF
MOV MARK,0
MOV AH,09H
LEA DX,MESS
INT 21H ;显示提示输入的信息
CALL GETNUM ;接收键入数值送DX
CMP MARK,01H
JE HEAD
MOV CX,0010H ;16位
MOV BX,DX
TTT: ROL BX,1 ;循环左移1位
MOV DL,BL
AND DL,01H ;屏蔽掉高7位
ADD DL,30H
MOV AH,02H
INT 21H ;显示二进制位对应的ASCII字符
LOOP TTT
JMP HEAD
FINI: MOV AX,4C00H
INT 21H ;返回DOS
GETNUM PROC NEAR ;子程序,接收键入数值送DX PUSH CX
XOR DX,DX
GGG: MOV AH,01H
INT 21H
CMP AL,0DH ;输入为回车,则进行转换
JE PPP
CMP AL,20H ;输入为空格,则退回DOS
JE FINI
CMP AL,30H
JB KKK
SUB AL,30H
CMP AL,0AH
JB GETS
CMP AL,11H
JB KKK
SUB AL,07H
CMP AL,0FH
JBE GETS
CMP AL,2AH
JB KKK
CMP AL,2FH
JA KKK
SUB AL,20H
GETS: MOV CL,04
SHL DX,CL
XOR AH,AH
ADD DX,AX
JMP GGG
KKK: MOV AH,09H
MOV DX,OFFSET ERROR
INT 21H
MOV MARK,01H PPP: PUSH DX
CRLF
POP DX
POP CX
RET GETNUM ENDP CODE ENDS
END START。