从键盘输入数据并显示实验
从键盘输入数据并显示实验报告
从键盘输入数据并显示实验报告一、实验目的与内容1、实验目的掌握接收键盘数据的方法,并了解将键盘数据显示时须转换为ASCII码的原理,并在程序中设置错误出口。
2、实验内容编写程序,将键盘接收到的四位十六进制数按“Enter”回车键转化为二进制数,再显示在屏幕上, 按“空格键”结束!。
若输入的不是0-F间的数字,则显示出错信息,并要求重新输入。
二、实验设备(环境)1、实验设备(含芯片名称、功能简介)微型计算机一台2、实验环境TPC-ZK-II集成环境3、使用语言汇编语言三、实验原理(实验所用到的知识点及相关内容)1.在TPC-ZK-II集成环境下输入汇编程序,编译、连接,生成.exe文件。
2.按提示输入数据,在屏幕显示的运行结果中查看结果是否正确。
3.输入不同的数据,可得到不同的结果。
4、参考流程图四、实验步骤(包括步骤、代码、实验截图及其必要说明)编写程序,将键盘接收到的 4 位 16 进制数转换为等值的二进制数,再显示在荧光屏上。
分析:整个程序分为 3 个部分:键盘输入、转换、显示,可以分别用子程序来完成。
1. 输入。
输入可以利用字符串输入。
这时需要在主程序中先开辟一段输入缓冲区。
字符串输入 ( 0AH 功能 ),入口参数 DS : DX = 缓冲区的首地址,( DS :DX ) = 限制最多输入的字符数,功能号 AH = 0AH,类型号 21H。
出口参数 ( DS : DX+1 ) =实际键入的字符 ( 不含回车符 ),从( DS : DX+2 ) 开始顺序存放键入的字符串,回车符 0DH为串尾最后一字符。
实现功能:等待从键盘输入字符串,并存入设定的缓冲区内,同时回显字符串,光标随着移动,回车符使光标回到行首。
注意事项:应按要求先定义缓冲区,再调用。
数据缓冲区的设置如下:DATA SEGMENT ; 定义缓冲区MARK DB ?MESS DB 'input:$' ;输入字符串提示ERROR DB 0DH,0AH,'input error!',0DH,0AH,'$' ;输入错误提示DATA ENDS从键盘输入‘ ABCD ’, 回车,内存的存放结果 :子程序如下:INPUT PROCLEA DX, striMOV AH, 09H ; 调显示功能INT 21HLEA DX , maxMOV AH , 0AHINT 21H ; 调 0A输入功能RETINPUT ENDP2. 转换。
8086实验指导书
频率 300KHz 8088
AEDK88ET
与PC机连
ADC0809
8279
VCC GND
8259 蜂呜器 8位开关
8251 8253 62256
39
I/O译码电路
40
第四章 硬件接口实验
41
1
实验一
一、实验要求
双色灯实验
编写程序,以8255为输出口,控制四个双色灯按红、绿、黄的要求发光。
二、实验目的
35
8. 实验仪必须如下显示才算加载成功
只有显示8688 2.1 才算加载成功
36
9.如何知道程序是不是处在执行状态,可观察如下几个位 置:
与
交替闪烁
与
交替闪烁
37
10.如何中止程序的执行
1.中止执行程 序按HALT
2 .恢复初始 状态按RST
38
电位器 译码器地址 8位LED 电源开关
交通灯 DAC0832 8255
26
主程序 调用inword 调用sort BUFF→SI [SI]→AL 调用display SI+1
Display子程序 AL/10→AL,AH AL+30H→AL AH+30H→AH AH→DH AH=2 调用 INT21H显示 显示空格 CX-1 CX=0? 结束
27
A
DH → AL
AH=2调用 INT21H显示 RET
23
实验二 从键盘输入并换
一. 实验要求 从键盘输入5个有符号2位十进制数,将它转换成有符号二进制数, 将结果送入内存中buff开始的单元中。 二. 实验目的 掌握键盘接受数据的方法,码制转换。 三. 实验程序框图 算法: ①符号字符串→标识符MINU。若为负, MINU=1; ②数字字符(31H~39H)→一位十进制数(0~9)a0,a1,a2… ③十进制数转换成十六进制数: 十六进制数=a2x100+a1x10+a0 =(a2x10+a1) x10+a0 ④ 转换后查符号,如果是负数,取补 码制转换部分流程图: 24
汇编实验实验一
《汇编》实验报告一、实验内容1、试编制一程序,计算下列公式的值,并存放在FUN存储单元中。
F=[10*(x+y)-3*(z-1)]/22、试编制一程序,从键盘输入一字符串,并将该字符串从屏幕上显示出来。
例如:显示’hello computer!’二、实验目的及要求1、实验目的:1.了解熟悉DEBUG命令;2.熟悉数据传送指令、算术运算指令、逻辑指令、段寄存器装在的内容;3.掌握简单的汇编语言程序编写与调试。
2、实验要求:1.仔细阅读有关DEBUG命令的内容,对有关命令,要求事先准备好使用的例子;2.阅读数据传送指令、算术运算指令、逻辑指令、段寄存器装在的内容;3.用DEBUG的有关命令调试本实验中的求多项式结果程序段与从键盘输入一字符串并将该字符串从屏幕上显示出来的程序段。
三、设计分析第一题的设计分析:一、实现变量的三个步骤:①、在数据段中定义变量并赋予初值,为计算多项式做准备;②、利用算术指令ADD、SAL、SUB、INC、DEC、SAR实现多项式的运算。
二、计算变量与计算变量结果的存放:①、代码段第三条指令开始计算变量,倒数第三条指令存放变量的结果,即多项式的计算终止;②、变量的奇数倍用ADD与SAL指令完成,而偶数倍只需SAL指令完成;③、注意MOV指令的操作数不能同时为存储单元。
第二题的设计分析:一、实现字符串输入,需要分成三个步骤:①、在数据段中定义一个缓存区为存放字符串做准备;②、DOS系统功能调用0AH号子功能,(DS:DX)= 输入缓冲区首址;③、在输入的字符串尾加上‘$’字符,以作为输出结束条件。
二、实现字符串输出,则需要注意的问题是:①、缓冲区第三个字节才开始存放输入的字符,前两个字节分别存放缓冲区长度和字符串实际字符数;②、输出回车换行可利用字符串:CR DB 0AH,0DH,’$’。
四、程序的调试过程第一题:第二题:五、运行结果分析第一题的运行结果分析:第二题的运行结果分析:六、附件:带注释的源程序第一题的源代码:TITLE EXAMPLE PROGRAMDATA SEGMENTVARX DW 123H ;定义X变量VARY DW 456H ;定义Y变量VARZ DW 789H ;定义Z变量FUN DW ? ;定义存放结果的存储单元DATA ENDSSTACK1 SEGMENT PARA STACKDW 20H DUP(0)STACK1 ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK1START: MOV AX,DATAMOV DS,AXMOV AX,VARX ;取变量XADD AX,VARY ;计算(X+Y)MOV BX,AXSAL AX,1 ;计算2*(X+Y)SAL AX,1 ;计算4*(X+Y)ADD AX,BX ;计算5*(X+Y)SAL AX,1 ;计算10*(X+Y)MOV BX,VARZ ;取变量ZDEC BX ;计算(Z-1)MOV CX,BXSAL BX,1 ;计算2*(Z-1)ADD BX,CX ;计算3*(Z-1)SUB AX,BX ;计算10*(X+Y)-3*(Z-1) SAR AX,1 ;计算[10*(X+Y)-3*(Z-1)]/2 MOV FUN,AX ;存放结果MOV AH,4CH ;终止用户程序,返回DOS INT 21HCODE ENDSEND START第二题的源代码:DATA SEGMENTN EQU 50MAXLEN DB N ;缓冲区字符的最大长度ACTLEN DB ? ;实际字符个数STRING DB N DUP(?) ;字符空间CR DB 0AH,0DH,'$'DATA ENDSSTACK1 SEGMENT PARA STACKDW 200H DUP(0)STACK1 ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK1START: MOV AX,DATAMOV DS,AXLEA DX,MAXLENMOV AH,0AHINT 21H ;字符串输入MOV AH,09H ;字符串输出LEA DX,CR ;回车换行INT 21HMOV BL,MAXLEN+1 ;取实际的字符长度MOV BH,0LEA SI,MAXLEN+2 ;取字符开始的首地址MOV BYTE PTR [SI+BX],'$' ;输出结尾要加上$ MOV DX,SI ;把开始存放字符的首地址赋给DX MOV AH,09H ;字符串输出INT 21HMOV AH,4CH ;终止用户程序,返回DOSINT 21HCODE ENDSEND START。
单片机键盘显示实验报告
单片机的键盘和显示实验报告㈠实验目的1.掌握单片机I/O的工作方式;2.掌握单片机以串行口方式0工作的LED显示;3.掌握键盘和LED显示的编程方法。
㈡实验器材1.G6W仿真器一台2.MCS—51实验板一台3.PC机一台4.电源一台㈢实验内容及要求实验硬件线路图见附图从线路图可见,8051单片机的P1口作为8个按键的输入端,构成独立式键盘。
四个LED显示器通过四个串/并移位寄存器74LS164接口至8051的串行口,该串行口应工作在方式0发送状态下,RXD端送出要显示的段码数据,TXD则作为发送时钟来对显示数据进行移位操作。
编写一个计算器程序,当某一键按下时可执行相应的加、减、乘、除运算方式,在四个显示器上显示数学算式和最终计算结果。
注:①通过按键来选择加、减、乘、除四种运算方式。
②输入两个数字均为一位十进制数,可预先放在内存中。
㈣实验框图(见下页)㈤思考题1.当键盘采用中断方式时,硬件电路应怎样连接?P1.4~P1.7是键输出线,P1.0~P1.3是扫描输入线。
输入与门用于产生按键中断,其输入端与各列线相连,再通过上拉电阻接至+5 V电源,输出端接至8051的外部中断输入端。
2.74LS164移位寄存器的移位速率是多少?实验中要求计算的式子和结果之间相差一秒,移位寄存器的移位速率应该是每秒一位吧。
其实这个问题确实不知道怎么回答。
LED 显示用的段码与教科书所提供的不同,本实验采用如下段码:显示数符段码显示数符段码0BBH A DBH109H B F1H2EAH C B2H36BH D E9H459H E F2H573H F D2H否有否P1口置输入读P1口开 始显示“0000”是否有键按下?延迟消抖是否有键按下?是读键码加法运算减法运算除运算6F3H—40H70BH.04H8FBH┗┛A1H97BH┗┛1AH灭00H P DAH实验代码:ORG 0000HAJMP MAINORG 0030HMAIN:MOV 41H,#0BBH ;对几个存放地址进行初始化MOV 42H,#0BBHMOV 43H,#0BBHMOV 44H,#0BBHMOV SCON,#00H ;初始化串行口控制寄存器,设置其为方式0 LCALL DISPLAY ;初始化显示KEY:MOV R3,#08H;用来存放两个数据MOV R4,#02HMOV P1,#0FFH ;初始化P1口MOV A,P1 ;读取按键状态CPL A ;取正逻辑,高电平表示有键按下JZ KEY ;A=0时无键按下,重新扫描键盘LCALL DELAY1;消抖MOV A,P1 ;再次读取按键状态CPL AJZ KEY ;再次判别是否有键按下PUSH AKEY1:MOV A,P1CPL AANL A,#0FH ;判别按键释放JNZ KEY1 ;按键未释放,等待LCALL DELAY1;释放,延时去抖动POP AJB ACC.0,ADD1 ;K1按下转去ADD1JB ACC.1,SUB1 ;K1按下转去SUB1JB ACC.2,MUL1 ;K1按下转去MUL1JB ACC.3,DIV1 ;K1按下转去DIV1LJMP KEYADD1:LCALL BUFFER ;显示加数和被加数MOV 43H,#049HLCALL DISPLAY ;显示加号MOV A,R3ADD A,R4DA AMOV R3,A ;相加结果放入R6ANL A,#0FHMOV R4,A ;结果个位放入R7MOV A,R3SWAP A ;半字节交换,高四位放入低四位ANL A,#0FHMOV R3,A ;结果的高位放入R6LCALL L;显示缓存区设置LCALL DELAY2;延时一秒后显示LCALL DISPLAYLJMP KEYSUB1:LCALL BUFFER ;显示减数和被减数MOV 43H,#40HLCALL DISPLAY ;显示减号MOV A,R3CLR CY ;CY清零SUBB A,R4 ;做减法PUSH ARLC A ;带进位循环左移,最高位放入CYJC F ;判断最高位,若为1则跳转到负数ZHENG: POP AMOV R4,AMOV R3,#00H ;高位清零SJMP OUTFU:POP ACPL A ;取绝对值INC AMOV R4,AMOV R3,#11H ;显示负号OUT: LCALL L ;显示缓存区设置LCALL DELAY2 ;延时1s后显示LCALL DISPLAYLJMP KEYMUL1:LCALL BUFFER ;显示两位乘数MOV 43H,#99HLCALL DISPLAY ;显示乘号MOV A,R3MOV B,R4MUL AB ;结果放入AB,A中是低8位,B中是高8位MOV B,#0AHDIV AB ;十进制转换MOV R4,B ;结果个位放入R7MOV R3,A ;结果的十位放入R6LCALL LLCALL DELAY2LCALL DISPLAY ;延时1s后显示LJMP KEYDIV1:LCALL BUFFER ;显示除数和被除数MOV 43H,#62HLCALL DISPLAY ;显示除号MOV A,R3MOV B,R4DIV AB ;A除以BMOV R4,B ;余数放在R4中MOV R3,A ;商放在R3中MOV A,R4MOVC A,@A+DPTR ;调用段选号MOV 41H,A ;显示余数MOV A,R3MOVC A,@A+DPTRMOV 43H,A ;显示商MOV 42H,#00HMOV 44H,#00HLCALL DELAY2 ;延时1S后显示LCALL DISPLAYLJMP KEYBUFFER: MOV 41H,#22H ;显示初始化,在做计算之前显示两个操作数,显示等号MOV DPTR,#TABLMOV A,R4MOVC A,@A+DPTRMOV 42H,AMOV A,R3MOVC A,@A+DPTRMOV 44H,ARETDISPLAY:MOV R5,#04H;共四位需要显示MOV R0,#41HDISPLAY1:MOV A,@R0MOV SBUF,ADISPLAY2:JNB TI,DISPLAY2;是否传完了CLR TIINC R0DJNZ R5,DISPLAY1RETL:MOV A,R4MOVC A,@A+DPTRMOV 41H,A ;R4对应的段码MOV A,R3MOVC A,@A+DPTRMOV 42H,A ;R3对应的段码MOV 43H,#00HMOV 44H,#00HRETDELAY1: ;普通延时MOV R1,#20HDS1:MOV R2,#0FFHDS2:DJNZ R2,DS2DJNZ R1,DS1RETDELAY2:MOV R6,#14H ;定时1SMOV TMOD,#01HDS3:MOV TH0,#3CHMOV TL0,#0B0H ;50msSETB TR0LOOP:JNB TF0,LOOPCLR TF0CLR TR0DJNZ R6,DS3 ;1s到,中断返回RETTABL:DB 0BBH 09H 0EAH 6BH ;段码表DB 59H 73H 0F3H 0BHDB 0FBH 7BH 00H 0DBHDB 0F1H 0B2H 0E9H 0F2HDB 0D2H 40H实验结果及分析按键1:8+2= 结果:10按键2:8-2= 结果: 6按键3:8*2= 结果:16按键4:8/2= 结果:4从上面的结果可以看出,本次实验基本完成了实验要求。
8155键盘显示器实验
LOP1: LOP2:
MOV R3,#77H ;逐行扫描全键 MOV A,R3 MOVX @R1, A RR A MOV R3,A ;变换的列值存入R3 MOVX A,@R0 ANL A,#0FH CJNE A,#0FH,LOP3 ; 有键按下去LOP3 SJMP LOP2 LOP3: ANL 3,#0FH ;取列值的低4位(高4位为0) SWAP A ;行值换到高4位(低4位=0) ORL 3,A ;行列值拼合为一个字节
②显示存储器循环移动5个单元子程序 RMBYT: MOV R0,#DISMEM+1 MOV R7,#5 RMBYT1:MOV A,@R0 DEC R0 MOV @R0,A INC R0 INC R0 DJNZ R7,RMBYT1 RET
③键盘键入子程序 按下4×4键盘上的任意一个按键,当放开按键后, 按键所表示的十六进制数在R2中。用到的寄存 器:R0,R1,R2,R3,R6,R7 KEYI: MOV A,#0 ;从代码段处关显示 ACALL SEGOUT MOV R1,#A8155L MOV R0,#C8155L LOP0: MOV A,#0H ;扫描全键盘 MOVX @R1,A MOVX A,@R0 ANL A,#0FH CJNE A,#0FH,LOP1 ;有键按下去LOP1 CLR F0 RET
MOV R1,#A8155L MOV A,R2 MOVX @R1,A RR A MOV R2,A MOV R6,#2 CALL DELAY CJNE A,#80H,DPLOP MOVX @R1,A ;关显示 RET DSTBL: DB 3FH,6,5BH,4FH DB66H,6DH,7DH,7 DB 7FH,6FH,77H,7CH DB 39H,5EH,79H,71H,0
图器和4×4键盘及其接口电路
实验内容 (2)
不存在”。 ④ 将数组元素按照从小到大的顺序排序。 ⑤ 删除 给定 下标位置 的元素,将数组元素输出。下标位置有键盘输入,
范围在[0-9]。 4、如何在给定位置插入数组元素。 5、从键盘输入若干个整数,其值在0-4范围内,用-1作为输入结束标志。统计输入的 每个整数的个数。提示:用一维数组存放每个整数的个数:
14 b= 2 5
36
实验内容7:使用字符数组实现如下程序
1、编写程序将字符串a复制到字符数组b中,要求不能使用字符串复制函
数strcpy。 已有定义:
char a[10]="hello !",b[10];
2、编程序实现求字符串(为任意输入的串)的长度,不使用strlen函数。 提示:字符串用字符数组存放
实验内容4: 使用循环控制语句实现如下程序
1、求2~100间的全部素数输出 2、输出九九乘法表. 3、输出如下图所演示 星星图(3选1即可)
* *** ***** ****** *********
* *** ***** ****** *********
* *** ***** ****** *********
int count[5]={0}; int x,i;
实验内容6:使用二维数组实现如下程序
1、求二维数组a[3][4]中最大元素值及其行列号。
int a[3][4]={2,7,9,5,8,6,12,10,11,3,0,7}; 最大值为12,行号1,列号2 2、输出杨辉三角形,要求输出10行,用二维数组实现。杨辉三角形一般形式如下: 1 11 121 1331 1464 1 1 5 10 10 5 1 …… 3、求二维数组a[3][3]中对角线元素之和。
循环实验带答案
实验标题:循环实验1 完善程序A_计算s=1+1/2+1/3+…+1/n的值实验内容和要求:【程序功能】从键盘输入正整数n,计算1+1/2+1/3+…+1/n并存放到考生文件夹中,删除扩展名为dsp、ncb、dsw、plg、opt、obj和exe等文件。
main(){int i,n;float sum=0;printf("please input n: ");scanf("%d",&n);for(i=1; i<=n ;i++)sum=sum+ 1.0/n ;printf("n=%d,sum= %.2f ",n,sum);system("pause");}实验标题:循环实验2 完善程序A_输出九九乘法表实验内容和要求:【程序功能】输出如下格式的九九乘法表1 12 2 43 3 6 94 4 8 12 165 5 10 15 20 256 6 12 18 24 30 367 7 14 21 28 35 42 498 8 16 24 32 40 48 56 649 9 18 27 36 45 54 63 72 811 2 3 4 5 6 7 8 9 【要求】最左边一列为行序号,最下面一行为列序号,其它数据为对应行序号与列序号的乘积。
将源程序保存为文件xh2.c,并存放到考生文件夹中,删除扩展名为dsp、ncb、dsw、plg、opt、obj和exe等文件。
main (){int i, j;for (i = 1; i <=9; i++) /*对列进行循环*/{printf ("%-3d", i); /*输出列的序号*/for (j = 1; j<=i ; j++) /*输出三角形乘法表*/printf ("%-3d", i*j );printf ("\n");}printf (" ");for (i = 1; i <=9; i++) /*输出最下面一行的列序号*/printf ("%3d",i);system("pause");}实验标题:循环实验3 完善程序B_输出m到n之间的素数并统计素数个数实验内容和要求:【程序功能】从键盘输入正整数m和n,显示m到n之间的所有素数。
CH451键盘显示实验
实验一 CH451键盘显示实验一、实验内容根据LJD-SY-5100实验板上的CH451与键盘和数码管的接线,编写程序实现:1.上电后数码管从最左边向右移位显示0—F;2.按键时显示相应的键符;并在实验板上调试运行程序,实现上述功能。
CH451与数码管和键盘的接线如图1.1所示,其中数码管为共阴极,4×4键盘,键编码表如表1.1所示。
图1.1 键盘/显示器接线图表1.1 键盘编码表参考程序如下:;*************************************LOAD BIT P1.2DIN BIT P1.0DCLK BIT P1.1DOUT BIT P3.3;**********************************TIMER DATA 030H ;存延时参数TIMER1 DATA 031HTIMER2 DATA 032HTIMER3 DATA 033HKEY_F DATA 034H ;按键标志位KEY DATA 035H ;存键码;***********************************ORG 0000HJMP STARTORG 0013H ;键盘中断使用外部中断1口LJMP CH451_INTORG 030HSTART: MOV SP,#60HMOV P1,#60H ;禁止P1接口上的其它芯片工作;***********************************CLR DIN ;初始化CH451SETB DCLKSETB DINSETB LOADSETB DOUTMOV B,#04H ;设定系统参数命令字MOV A,#03H ;关看门狗,开显示、键盘LCALL WRITE _CH451 ;写入命令MOV B,#05H ;MOV A,#80H ;设置显示参数为译码方式LCALL WRITE _CH451 ;写入命令NOPCLR IT1 ;置外部中断信号为低电平触发CLR IE1 ;清中断标志SETB PX1 ;设置INT1优先SETB EX1 ;允许键盘中断SETB EA ;开总中断LX0: MOV R5,#00H ;显示数据初始化LX: MOV A,R5 ;送显示数据MOV B,#08H ;加载字数据0 命令字(在DIG0位数码管显示)LCALL WRITE _CH451 ;写命令NOPLCALL DELAY_1S ;延时MOV B,#03H ;字数据左移命令字MOV A,#00HLCALL WRITE _CH451 ;写命令INC R5 ;下一个显示数据CJNE R5,#10H,LX ;0—F轮显一遍JMP LX0 ;循环;*********************************************DELAY_1S:MOV TIMER1,#4DLY: MOV TIMER2,#255DLY1: MOV TIMER3,#255DLY2: NOPNOPDJNZ TIMER3, DLY2DJNZ TIMER2, DLY1DJNZ TIMER1, DLYRET;**********************************************WRITE _CH451: 子程序略,参考课件自己补全。
C语言 实验
2.2.1 实验1:熟悉上机环境和顺序结构编程练习1. 键盘输入与屏幕输出练习问题1 要使下面程序的输出语句在屏幕上显示1, 2, 34,则从键盘输入的数据格式应为以下备选答案中的。
#include <stdio.h>main(){char a,b;int c;scanf("%c%c%d",&a,&b,&c);printf("%c,%c,%d\n",a,b,c);}A)1 2 34 B)1, 2, 34C)’1’,’2’,34D)12 34问题2 在与上面程序的键盘输入相同的情况下,要使上面程序的输出语句在屏幕上显示1 2 34,则应修改程序中的哪条语句?怎样修改?问题3 要使上面程序的键盘输入数据格式为1,2,34,输出语句在屏幕上显示的结果也为1,2,34,则应修改程序中的哪条语句?怎样修改?问题4 要使上面程序的键盘输入数据格式为1,2,34,而输出语句在屏幕上显示的结果为'1', '2',34,则应修改程序中的哪条语句?怎样修改?[提示:利用转义字符输出字符单引号字符。
]问题5 要使上面程序的键盘输入无论用下面哪种格式输入数据,程序在屏幕上的输出结果都为'1', '2',34,则程序应修改程序中的哪条语句?怎样修改?第1种输入方式:1,2,34↙(以逗号作为分隔符)第2种输入方式:1 2 34↙(以空格作为分隔符)第3种输入方式:1 2 34↙(以Tab键作为分隔符)第4种输入方式:1↙2↙34↙(以回车符作为分隔符)2. 计算定期存款本利之和设银行定期存款的年利率rate为2.25%,并已知存款期为n年,存款本金为capital元,试编程计算n年后的本利之和deposit。
要求定期存款的年利率rate、存款期n和存款本金capital 均由键盘输入。
数据结构上机实验指导
《数据结构》课程上机实验指导书实验一【实验名称】顺序表的基本算法【实验目的】创建一个顺序表,掌握线性表顺序存储的特点。
设计和验证顺序表的查找、插入、删除算法。
【实验要求】(1)从键盘读入一组整数,按输入顺序形成顺序表。
并将创建好的顺序表元素依次打印在屏幕上。
(2)设计一个带选择菜单的主函数,菜单中具备任意选择删除、插入、查找数据元素的功能。
(3)当选择删除功能时,从键盘读入欲删除的元素位置或元素值,按指定方式删除;当选择插入功能时,从键盘读入新元素值和被插入位置,在指定位置插入;当选择查找功能时,从键盘读入欲查找的元素值,返回其位置序号。
(4)每种操作结束后,都能在屏幕上打印出此时顺序表元素的遍历结果。
【实验步骤】1、实验前先写好算法。
2、上机编写程序。
3、编译。
4、调试。
例程:书上参考算法2-1,2-4,2-5,2-6,2-8!带菜单的主函数参考书上2.5综合实例!注意:顺序表的结构体!typedef struct{datatype items[listsize];int length;}SpList;实验二【实验名称】单链表的基本算法【实验目的】创建一个单链表,掌握线性表链式存储的特点。
设计和验证链表的查找、插入、删除、求表长的算法。
【实验要求】(1)从键盘读入一组整数,按输入顺序形成单链表。
并将创建好的单链表元素依次打印在屏幕上。
(注意:选择头插法或者尾插法!)(2)设计一个带选择功能菜单的主函数,菜单中至少具备任意选择删除、插入、查找数据元素,和求单链表表长等几项功能。
(3)当选择删除功能时,从键盘读入欲删除的元素位置,按指定位置删除;当选择插入功能时,从键盘读入新元素值和被插入位置,在指定位置插入;当选择查找功能时,从键盘读入欲查找的元素值,返回其位置序号;当选择求表长功能时,返回该单链表表长的数值。
(4)每种操作结束后,都能在屏幕上打印出此时单链表元素的遍历结果。
【实验步骤】1、实验前先写好算法。
微型计算机实验一实验报告
微型计算机实验一实验报告实验一:微型计算机的基本操作及应用探究一、实验目的1.了解微型计算机的基本组成和工作原理;2.学习使用微型计算机进行基本操作;3.探究微型计算机在实际应用中的作用。
二、实验器材和仪器1.微型计算机实验箱;2.微型计算机主机;3.显示器;4.键盘。
三、实验内容1.将微型计算机主机与显示器、键盘连接;2.打开微型计算机并进行基本操作;3.使用微型计算机进行基本应用。
四、实验步骤1.将微型计算机主机与显示器、键盘连接,确保连接稳固;2.打开微型计算机主机,等待系统启动完毕;3.使用键盘进行基本操作,包括输入字符、回车等;4.运行预装的基本应用软件,并进行相应操作。
五、实验结果和分析在本次实验中,通过连接主机与显示器、键盘,我们成功打开了微型计算机并进行了基本操作。
使用键盘输入字符并通过回车键确认后,我们可以在显示器上看到相应的结果。
这表明微型计算机能够正确地接收和处理我们输入的指令,并将结果显示出来。
通过运行预装的基本应用软件,我们还可以进行更加复杂的操作,如文字处理、图形绘制等。
本次实验中,我们还了解到微型计算机的基本组成和工作原理。
微型计算机由主机、显示器、键盘组成。
在主机中,CPU是主要的控制中心,负责接收和处理指令;内存存储了计算机运行时所需的数据和程序;硬盘则保存了大容量的数据。
显示器负责将计算机处理的结果显示出来,键盘则用于输入指令和数据。
微型计算机的应用领域十分广泛。
它可以用于文字处理、数据处理、图形绘制等多个方面。
在今天的社会中,无论是企事业单位还是个人用户,几乎都需要使用微型计算机进行日常工作和生活。
微型计算机的快速计算和大容量存储能力,使得数据处理和信息管理变得更加便捷和高效。
六、实验总结通过本次实验,我们学习了微型计算机的基本操作和应用,并了解了微型计算机的基本组成和工作原理。
微型计算机在今天的社会中扮演着重要的角色,其广泛的应用范围使得人们的工作和生活更加便捷和高效。
(完整版)c++实验报告
(完整版)c++实验报告C++程序设计实验报告姓名:学号:班级:学院选课时间实验一数据类型和表达式【实验目的】1.熟悉并学习使用C++程序编译平台VC6.0;2.掌握如何在编译平台下编辑、编译、连接和运行一个简单的C++程序;3.掌握C++语言基础数据类型,熟悉变量及常量的定义和赋值方法;4.学会使用C++算术运算符和算术表达式;5.掌握C++程序的赋值和输入输出语句的使用方法;6.掌握简单C++程序的编写和调试【实验内容】1.从键盘上输入两个int型数,比较其大小,并输出显示其中较小的数代码:#includeusing namespace std;int main(){int a,b;int min(int x,int y);cin>>a>>b;cout<<min(a,b)<<endl;< p="">return 0;}int min(int x,int y){if(x<y)< p="">return x;elsereturn y;}2.从键盘上输入一个int型数,一个浮点数,比较其大小,将输出其中较大的数;代码:#includeusing namespace std;int main(){int a;float b;cin>>a>>b;if(a>b)cout<<a<<endl;< p="">elsecout<<b<<endl;< p="">return 0;}3.输入一摄氏温度,编程输出华氏温度。
已知;华氏温度转换为摄氏温度的计算公式如下:其中, F表示华氏温度, C表示摄氏温度。
代码:#includeusing namespace std;int main(){float a,b;cin>>a;b=a*1.8+32;cout<<b<<endl;< p="">return 0;}4.编程实现输入千米数,输出显示其英里数。
键盘扫描显示实验
实验二键盘扫描显示实验1、实验目的:(1)掌握键盘和显示器的接口方法和编程方法。
(2)掌握键盘扫描和LED八段码显示器的工作原理。
2、实验要求:在上一个实验的基础上,利用实验仪提供的键盘扫描电路和显示电路,做一个扫描键盘和数码显示实验,把按键输入的键码在六位数码管上显示出来。
实验程序可分成三个模块。
1、键盘输入模块:扫描键盘、读取一次键盘并将键值存入键值缓冲单元。
2、显示模块:将显示单元的内容在LED显示器上动态显示。
3、主程序:调用键盘输入模块和显示模块。
3、实验电路图:LED1LED2LED3LED4LED5LED64、实验器材:(1)超想-3000TB综合实验仪 1 台(2)超想3000仿真器 1 台(3)计算机 1 台5、实验连线:无6、实验说明:本实验仪提供了一个6×4的小键盘,向列扫描码地址(0e101H)逐列输出低电平,然后从行码地址(0e103H)读回,如果有键按下,则相应行的值应为低,如果无键按下,由于上拉的作用,行码为高。
这样就可以通过输出的列码和读取的行码来判断按下的是什么键.。
在判断有键按下后,要有一定的延时,防止键盘抖动。
列扫描码还可以分时用作LED的位选通信号。
7、程序框图8、实验程序CCON EQU 0E100H ;8155控制字地址OUTBIT EQU 0E101H ;LED显示位控制地址PACON EQU 0E101H ;PA口,键盘列输出CLK164 EQU 0E102H ;164时钟控制地址DAT164 EQU 0E102H ;164数据控制地址IN EQU 0E103H ;键盘读入口LED1 EQU 08H ;6个LED显示码的存放地址LED2 EQU 09H ;LED3 EQU 0AH ;LED4 EQU 0BH ;LED5 EQU 0CH ;LED6 EQU 0DH ;KEYLIST EQU 0EH ;按下键盘的列值KEYTEMP EQU 10H ;得到键盘的扫描值ORG 0000HLJMP STARWAIT: ;循环程序LCALL SHOW ; 调用LED显示子程序LCALL SCANKEY ;调用按键扫描程序...MOV A , KEYTEMPJZ WAIT ;判断是否有按键按下,有的话继续,否则;返回继续等待LCALL GETKEY ;SJMP WAIT ;循环RETSHOW: ;LED显示子程序MOV R2 , #00100000B ;从最左边的LED开始显示MOV B , #06H ; 6个LEDMOV R1 , #LED1 ;取得第一位LED显示码地址SHOWLED: ;显示6个LED的循环程序CLR A ;熄灭所有LED管MOV DPTR ,#OUTBITMOVX @DPTR , APUSH BMOV B , #8 ;B用来计数,8表示8段LEDMOV A , @R1 ;取得第一个显示码MOV R0, AINC R1 ;指向下一个显示码SHOWBIT: ;给8段LED赋值的循环程序MOV A , R0 ;取出显示码的每一位,从高位开始RLC AMOV R0 , A ;MOV ACC.0 , CCLR ACC.1 ;置0 做脉冲用MOV DPTR , #DAT164MOVX @DPTR , A ;将显示码的每一位送入164中MOV DPTR , #CLK164SETB ACC.1 ;置1 做脉冲用MOVX @DPTR , ACLR ACC.1 ;置0 做脉冲用MOVX @DPTR , ADJNZ B , SHOWBIT ;判断8位显示码是否都送入164中POP BMOV A , R2MOV DPTR ,#OUTBIT ;显示该位LEDMOVX @DPTR , A ;CALL DELAYRR A ;指向下一位LEDMOV R2 , ADJNZ B , SHOWLED ;判断6个LED是否都显示完毕RETSCANKEY: ;键盘扫描子程序,判断是否有按键按下MOV DPTR , #PACONCLR AMOVX @DPTR , AMOV DPTR , #INMOVX A , @DPTR ;获取扫描结果CPL AANL A , #0FHMOV KEYTEMP , A ;扫描结果放入KEYTEMP中,KEYTEMP;为0时候表示没有按键按下RETGETKEY: ;获取键盘显示码;思路:先获取按键的行值和列值,然后根据该按键的行和列的位置到KEYMAP 表中去查询该按键的字面值,最后根据该按键的字面值到LEDMAP表中得到该按键的显示码,然后将该显示码送到;LED6中...MOV KEYLIST , #0 ;保存按键的列值MOV B , #06H ;计数,6表示键盘有6列MOV R0 , #11111110B ;从键盘的最左边开始扫描GETKEY0:MOV DPTR , #PACON ;扫描键盘的每一列MOV A , R0MOVX @DPTR , AMOV DPTR , #IN ;获取键盘扫描结果MOVX A , @DPTRCPL AANL A , #0FHMOV KEYTEMP , AJNZ GETKEY1 ;判断该列是否有有按键按下MOV A ,R0;RL AMOV R0 , AINC KEYLIST ;列值+1DJNZ B , GETKEY0 ;判断键盘的6列是否都扫描完毕RETGETKEY1:MOV A , KEYTEMP ;获取扫描结果JB ACC.3 , LINE0 ;第0行JB ACC.2 , LINE1 ;第1行JB ACC.1 , LINE2 ;第2行JB ACC.0 , LINE3 ;第3行LINE0:MOV A , KEYLIST ;按键的列值ADD A ,#0 ;键盘为4*6格式,所以一行需要+6 ;因为这是第0行所以+0MOV DPTR , #KEYMAPMOVC A , @A+DPTR ;获取按键的字面值ANL A , #0FHMOV DPTR , #LEDMAPMOVC A , @A+DPTR ;获取按键的显示码MOV LED6 , A ;将显示码送入LED6中LJMP GETKEYENDLINE1: ;同上....MOV A , KEYLISTADD A , #6 ;MOV DPTR ,#KEYMAPMOVC A , @A+DPTRANL A , #0FHMOV DPTR , #LEDMAPMOVC A , @A+DPTRMOV LED6 , ALJMP GETKEYENDLINE2: ;同上....MOV A , KEYLISTADD A , #6ADD A , #6MOV DPTR , #KEYMAPMOVC A , @A+DPTRANL A , #0FHMOV DPTR , #LEDMAPMOVC A , @A+DPTRMOV LED6 , ALJMP GETKEYENDLINE3: ;同上....MOV A , KEYLISTADD A , #6ADD A , #6ADD A , #6MOV DPTR , #KEYMAPMOVC A , @A+DPTRANL A , #0FHMOV DPTR , #LEDMAPMOVC A , @A+DPTRMOV LED6 , ALJMP GETKEYENDGETKEYEND: ;结束LCALL SCANKEY ;调用键盘扫描子程序MOV A , KEYTEMPJNZ GETKEYEND ;等到按键松开RETLEDMAP: ; 八段管显示码DB 3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07hDB 7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71hKEYMAP: ; 键盘对应的数字DB 07H,08H,09H,0AH,10H,00HDB 04H,05H,06H,0BH,11H,12HDB 01H,02H,03H,0CH,13H,14HDB 00H,0FH,0EH,0DH,15H,16HDELAY: MOV 20H , #0FH ;延时子程序DELAY1:DJNZ 20H , DELAY1RETSTAR: ;程序开始MOV SP,#16HMOV DPTR , #CCON; 设计8155的工作方式PA和PB输出,PC输入MOV A , #03HMOVX @DPTR,AMOV LED1 , #0FFH ;给6个LED管赋初值8.8.8.8 (后两位为空)MOV LED2 , #0FFHMOV LED3 , #0FFHMOV LED4 , #0FFHMOV LED5 , #00HMOV LED6 , #00HLJMP WAIT ;转到等待循环子程序END9、思考问题1、如何能够让键盘输入两位数字。
微机原理实验六__从键盘输入数据并显示
微机原理实验六__从键盘输入数据并显示实验六从键盘输入数据并显示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 CX XOR 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变量。
键盘接口实验实验报告及程序
键盘接口实验实验报告及程序一、实验目的本次实验的主要目的是深入了解计算机键盘接口的工作原理,并通过编程实现对键盘输入的读取和处理。
通过这个实验,我们将掌握如何与计算机硬件进行交互,提高对计算机系统底层运作的认识。
二、实验原理计算机键盘通常通过 PS/2 接口或 USB 接口与主机相连。
在本次实验中,我们以 PS/2 接口为例进行研究。
PS/2 接口使用双向同步串行协议进行通信,数据传输速率约为 10 167Kbps 。
键盘在向主机发送数据时,每个字节包含 11 位,分别是起始位(总是 0 )、 8 位数据位(低位在前)、校验位(奇校验)和停止位(总是 1 )。
主机通过向键盘发送命令来控制键盘的工作模式和获取相关信息。
三、实验设备及环境1、计算机一台2、开发板及相关配件3、编程软件(如 Keil 等)四、实验步骤1、硬件连接将开发板与计算机通过相应的接口连接好,确保连接稳定。
2、软件编程选择合适的编程语言和开发环境。
初始化相关的硬件接口和寄存器。
编写读取键盘输入数据的程序代码。
3、编译与下载对编写好的程序进行编译,检查是否有语法错误。
将编译成功的程序下载到开发板中。
4、实验测试按下键盘上的不同按键,观察开发板的输出结果。
检查读取到的数据是否准确,校验位是否正确。
五、程序代码实现以下是一个简单的基于 C 语言的键盘接口读取程序示例:```cinclude <reg51h>//定义 PS/2 接口相关引脚sbit PS2_CLK = P1^0;sbit PS2_DATA = P1^1;//读取一个字节的数据unsigned char ReadByte(){unsigned char data = 0;unsigned char i;while(PS2_CLK == 1);//等待时钟线拉低for(i = 0; i < 8; i++){while(PS2_CLK == 0);//等待时钟上升沿data =(data << 1) | PS2_DATA; //读取数据位}while(PS2_CLK == 1);//等待时钟线拉低return data;}void main(){unsigned char key;while(1){key = ReadByte();//读取键盘输入的数据//在此处对读取到的数据进行处理和显示}}```六、实验结果与分析在实验过程中,我们按下不同的键盘按键,开发板能够准确地读取到相应的键值。
单片机设计实验报告简单计算器的设计
目录1.总体方案选择 (2)1.1 实验要求: (2)1.2方案设计 (2)2.硬件原理电路图的设计及分析 (2)2.1主控模块 (2)2.1.1 STC89C52单片机主要特性 (3)2.1.2 STC89C52单片机管脚图 (4)2.1.3 STC89C52单片机的中断系统 (4)2.1.4 STC89C52单片机的定时/计数器 (4)2.2矩阵键盘模块设计: (5)2.2.1矩阵键盘原理介绍 (5)2.2.2矩阵键盘电路设计 (5)2.3 LCD液晶显示器简介 (6)2.3.1液晶模块简介 (6)2.3.2液晶显示部分与89S52的接口 (7)3系统软件设计 (9)3.1系统软件流程图 (9)3.2系统整体原理图 (10)4.系统调试 (11)4.1硬件调试 (11)4.2软件调试 (11)4.3调试结果 (12)5. 心得体会 (13)1.总体方案选择1.1 实验要求:1)通过小键盘实现数据的输入,并在LED数码管上显示2)实现+、-、*、/3)在LED数码管上显示结果4)并有清零,退出功能1.2方案设计本系统以STC89C52单片机为控制核心,对系统进行初始化,主要完成对键盘的响应、液晶显示灯功能的控制,起到总控和协调各模块之间工作的作用。
单片机通过检测键盘读取使用者按下对用功能的按键,然后通过单片机内部运放把运算的结果显示在液晶屏幕上。
图1-1系统结构框图本系统结构如图1-1所示,本设计可分为以下模块:单片机主控模块、键盘模块、功率放大模块、闹铃模块、按键设置模块。
下面对各个模块的设计方案逐一进行论证分析。
2.硬件原理电路图的设计及分析2.1主控模块STC89C52有40个引脚,4个8位并行I/O口,1个全双工异步串行口,同时内含5个中断源,2个优先级,2个16位定时/计数器。
STC89C52的存储器系统由4K的程序存储器(掩膜ROM),和128B的数据存储器(RAM)组成。
STC89C52单片机的基本组成框图见图2-1。
微机原理与接口技术实验报告.
实验一、认识Tddebug集成操作软件一.实验内容(一)实验题目:数据传送实验1. 编程将数据段中的一个字符串传送到附加段中,并输出附加段中的目标字符串到屏幕上。
2. 修改此程序,采用字符串传送指令完成。
(二)实验目的:通过对该程序进行调试,查看程序段、数据段、附加段装入内存后的分配情况。
单步执行数据传送指令后,观察各个寄存器及数据区的内容。
(三)实验步骤:1. 运行Tddebug软件,选择Edit菜单编写实验程序2.使用Compile菜单中的Compile和Link对实验程序进行汇编、连接,生成执行文件。
3.使用Rmrun菜单中的Run运行程序,观察运行结果。
4.使用Rmrun菜单中的Debug调试程序,查看程序段、数据段、附加段装入内存后的分配情况。
单步执行数据传送指令后,观察各寄存器及数据区的内容。
过程如下:1)按F7单步执行,在代码区中有一个三角,表示正在执行的指令。
每一条指令的执行一定会使目标寄存器和状态寄存器发生变化,从相关窗口看结果。
2)检查内存数据区的内容,关键是找出用户程序的数据段和附加段:●方法1:在CPU窗口按Tab键使内存数据显示区成为活动区,按Ctrl+G键,输入:“DS或ES寄存器的值:偏移地址”,即可显示用户指定的数据区●方法2:选择菜单View| Dump,弹出内存数据显示窗口。
3) 查看执行结果:按Alt+F5,切换到用户窗口。
5.更改数据区中的数据,考察、调试程序的正确性。
二.分析设计思想,绘制实验原理图、流程图。
汇编语言程序的开发过程如图1.1所示,这个过程主要有编辑、编译、链接几个步骤构成。
三.程序清单及相关注释。
DDATA SEGMENT ;定义源数据段MSR DB "HELLO,WORLD!$"LEN EQU $- MSRDDATA ENDSEXDA SEGMENT ;定义附加数据段MSD D B LEN DUP(?)EXDA ENDSMYSTACK SEGMENT ;定义堆栈段STACK DW 20 DUP(?)MYSTACK ENDSCODE SEGMENT ;定义代码段ASSUME CS:CODE,DS:DDATA,ES:EXDASTART: MOV AX,DDATAMOV DS,AX ;装载数据段寄存器MOV AX,EXDAMOV ES,AX ;装载附加数据段寄存器MOV SI,OFFSET MSRMOV DI,OFFSET MSDMOV CX,LENMOV BX,0NEXT: MOV AL,MSR[BX] ;开始传输数据MOV ES:MSD[BX],ALINC BXLOOP NEXTPUSH ESPOP DS ;将附加段寄存器指向的段值赋给数据段寄存器MOV DX,OFFSET MSDMOV AH,9INT 21H ;显示字符串MOV AH,4CHINT 21H ;返回DOS状态CODE ENDSEND START四.实验结果并分析。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验四从键盘输入数据并显示实验
【实验目的】
1.掌握键盘输入字符的方法和十六进制数字字符的ASCII码转换为二进制数的原理。
2.掌握子程序定义和调用的方法。
3.掌握循环移位指令的用法和无符号数比较大小的方法。
【实验性质】
验证性实验(学时数:2H)
【实验内容】
从键盘上输入4位十六进制数,将其转换为16位二进制数并在显示器上显示出来。
要求输入的数字字符串以回车键结束。
如果输入的数字超过4个,则以最后输入的4个为准。
若按下的键不是十六进制数字字符,则显示出错信息。
参考程序:
【实验提示】
从键盘上输入的十六进制数字字符进入计算机后并不是相应的十六进制数或二进制数,而是与字符对应的ASCII码,现要找出ASCII码与该数字对应的二进制数之间的关系。
关系如下:
【报告要求】
1.给出该问题的程序设计流程图。
2.给出该程序的全部代码,并加上注释。
3.总结实验体会。
CRLF MACRO
MOV AH,02H
MOV DL,0DH
INT 21H
MOV AH,02H
MOV DL,0AH
INT 21H
ENDM
DA TA SEGMENT
MARK DB ?
MESS DB '输入四位十六进制数,按回车键转化为二进制数,空格键结束!',0DH,0AH,'输入:$'
ERROR DB 0DH,0AH, '输入错误!',0DH,0AH,'$'
DA TA ENDS
STACK SEGMENT
STA DW 32 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。