微机原理实验报告
一、 实验名称:4位BCD码相加 二、实验目的
学习字符型与数值型数据的相互转换方法,了解BCD码输入及相加的方法。
三、实验内容
1. 在数据段中定义3个变量想x1、x2、x3,用于存储从微机键盘上输入的两个4位BCD码(低位数据占高地址存放),x3用于存储这两个BCD码的和;
2. 从键盘输入两个4位BCD码,检查是否为数字键,非数字键不接收; 3. 将输入的两个4位字符型数据转换为4位非压缩型BCD码存于数据段中的变量中;
4. 将两个4位非压缩型BCD码相加,将结果利用INT 21H的2号功能显
示在微机屏幕上。
四、程序流程图
五、实验结果
程序开始运行后,从键盘上输入的数字字符显示在屏幕上,当输入为非数字字符时则不显示,先输入四位数字后自动显示“+”,继续输入四位数字后,自动显示“=”,并将两个四位BCD码相加的结果用五位ASCII码显示在屏幕上。
六、实验心得
本次实验内容相比于前次要复杂一点,输入时选用不回显的8号功能,以达到筛选输入字符是否为数字字符的作用,非数字字符的字符不存储也不显示在屏幕上,虽然之后要再输指令显示字符比较麻烦,但使程序的功能更完善了。由于键盘输入的数字为ASCII码,做运算时要将其转换为BCD码,显示时又要转换为ASCII码。另外,数字相加时使用ADC指令,因此要考虑进位位的问题,特别是最低位相加前要使进位位清零,相加的结果要进行十进制调整,将高四位清零,进位存入CF,最终的CF位的值则要放人X3的第五位。因此本次实验虽原理简单,但细节问题较多,需要考虑完整才能顺利的完成实验。
附:程序代码
STACK SEGMENT STACK DW 100 DUP(?) STACK ENDS
DATA SEGMENT X1 DB 4 DUP(0) X2 DB 4 DUP(0) X3 DB 5 DUP(0) DATA ENDS
CODE SEGMENT ASSUME
CS:CODE,SS:STACK,DS:DATA MAIN PROC MOV AX,DATA MOV DS,AX MOV SI,OFFSET X1 MOV CX,4 NEXT1:CALL KEYIN AND AL,0FH MOV [SI],AL INC SI LOOP NEXT1 MOV DL,'+' MOV AH,2 INT 21H
MOV DI,OFFSET X2 MOV CX,4 NEXT2:CALL KEYIN AND AL,0FH MOV [DI],AL INC DI LOOP NEXT2 MOV DL,'=' MOV AH,2
INT 21H DEC SI DEC DI
MOV BX,(OFFSET X3)+4 MOV CX,4 OR AL,AL NEXT3:MOV AL,[SI] ADC AL,[DI] AAA
MOV [BX],AL DEC SI DEC DI DEC BX LOOP NEXT3 MOV AL,0 ADC AL,0 MOV [BX],AL MOV CX,5 NEXT4:MOV DL,[BX] ADD DL,30H MOV AH,2 INT 21H INC BX LOOP NEXT4 MOV AH,4CH INT 21H MAIN ENDP
KEYIN PROC NEXT5:MOV AH,8 INT 21H CMP AL,'0' JB NEXT5 CMP AL,'9' JA NEXT5
PUSH AX MOV DL,AL MOV AH,2 INT 21H POP AX RET KEYIN ENDP
CODE ENDS END MAIN