从键盘输入数据并显示实验

合集下载

从键盘输入数据并显示实验报告

从键盘输入数据并显示实验报告

从键盘输入数据并显示实验报告一、实验目的与内容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实验指导书

8086实验指导书

频率 300KHz 8088
AEDK88ET
与PC机连
ADC0809
8279
VCC GND
8259 蜂呜器 8位开关
8251 8253 62256
39
I/O译码电路
40
第四章 硬件接口实验
41

实验一
一、实验要求
双色灯实验
编写程序,以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键盘显示器实验

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)

实验内容 (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键盘显示实验

实验一 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: 子程序略,参考课件自己补全。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验四从键盘输入数据并显示实验
【实验目的】
1.掌握键盘输入字符的方法和十六进制数字字符的ASCII码转换为二进制数的原理。

2.掌握子程序定义和调用的方法。

3.掌握循环移位指令的用法和无符号数比较大小的方法。

【实验性质】
验证性实验(学时数:2H)
【实验内容】
从键盘上输入4位十六进制数,将其转换为16位二进制数并在显示器上显示出来。

要求输入的数字字符串以回车键结束。

如果输入的数字超过4个,则以最后输入的4个为准。

若按下的键不是十六进制数字字符,则显示出错信息。

参考程序:
【实验提示】
从键盘上输入的十六进制数字字符进入计算机后并不是相应的十六进制数或二进制数,而是与字符对应的ASCII码,现要找出ASCII码与该数字对应的二进制数之间的关系。

关系如下:
十六进制数字字符字符对应的ASCII码数字对应的二进制数
0 ~930H ~39H ASCII码- 30H
A ~F41H ~46H ASCII码- 37H
a ~f61H ~66H ASCII码- 57H
【报告要求】
1.给出该问题的程序设计流程图。

2.给出该程序的全部代码,并加上注释。

3.总结实验体会。

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 '输入四位十六进制数,按回车键转化为二进制数,空格键结束!',0DH,0AH,'输入:$' ERROR DB 0DH,0AH, '输入错误!',0DH,0AH,'$'
DATA 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。

相关文档
最新文档