实验报告 实验六 从键盘输入数据并显示
实验目的:
1.掌握接收键盘数据以及输入数据转换为ASCII码显示输出的基本方法。 2.熟悉COM文件的编写。 3.进一步熟悉子程序的应用。
实验内容:
编写COM文件格式程序,完成如下功能: 1.从键盘接收4位十六进制数据
2.将接收的数据转换为二进制形式,在屏幕上显示输出
实验步骤和要求:
1.分析问题,画出算法框图。写实验预习报告。 2.编写COM格式汇编语言程序。 3.在DOS下编辑、汇编、连接程序。 4.用Debug调试程序。
5.在DOS下运行并分析结果。 6.填写实验报告。
算法框图
1 / 7
置串指针SI置循环次数CX并压栈输入四位十六进制数SI,CX出栈为初值读出输入的字符判断与39H的大小关系大于不大于加上09HCX不为0与上00FFH调用B_TO_A子程序SI加一CX=0显示转换后的结果 2 / 7B_TO_A子程序CX压栈CL置为4左移四位,将有效位放入BL的高字节中左移一位,放到CF中判断CF是否为1YCL != 0N在目的串DI指向的位置写为1DI加一CL=0POP CXRET
汇编源程序:
NAME TRANSFORM DATA SEGMENT INPUT DB 4 DUP (?);用于存放输入的“十六进制数” OUTPUT DB 4 DUP (4 DUP (30H),0DH,0AH); 用于存放转换成二进制后的数,回车,换行是为了输入好看 DB '$' DATA ENDS STACK SEGMENT PARA STACK'STACK' STRING DB 100 DUP(?) STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK START PROC FAR PUSH DX MOV AX,0H PUSH AX MOV AX,DATA MOV DS,AX MOV ES,AX ;------------------ LEA SI,INPUT MOV CX,4 PUSH SI PUSH CX INPUT_NUM: MOV AH,1H INT 21H MOV [SI],AL INC SI LOOP INPUT_NUM ;------------------- POP CX POP SI LEA DI,OUTPUT MOV AL,39H MOV AH,09H TRANSFORM: MOV BL,[SI] 3 / 7
CMP BL,AL JA CHANGE MARK:; 仅仅是为了后面好回来,mark没什么其他含义 AND BX,00FFH;高四位是无用的,以防万一,将其设置为0 CALL B_TO_A INC SI LOOP TRANSFORM ;------------------- ;下面是显示 MOV AH,02H;从此处往下的五条指令是为了显示的时候与输入的数据分开,易于观察 MOV DL,0DH INT 21H;显示回车 MOV DL,0AH INT 21H;显示换行 LEA DX,OUTPUT MOV AH,9H INT 21H START ENDP MOV AH,1H;==============这两句仅仅是为了后面方面观察,FINISH INT 21H;================这两句仅仅是为了后面方面观察,FINISH CHANGE: ADD BL,09H JMP MARK ;------------------- B_TO_A PROC PUSH CX MOV CL,4 SHL BL,CL;先左移四位,将有用的低四位放在高四位,不然像之前作的会反着输出 AGAIN: RCL BL,1 JNC NEXT MOV DL,31H MOV [DI],DL NEXT: INC DI LOOP AGAIN INC DI INC DI POP CX RET 4 / 7
;--------------------- CODE ENDS END START DOS下运行并分析结果
在DOS下编辑、汇编、连接程序
输入:
AF57
5 / 7
结果是:1010
1111
0101
0111 正确执行
6 / 7
总结
7 / 7