1、12019-3-162019-3-16实验一 从键盘输入数据并显示从键盘输入数据并显示一、实验要求:一、实验要求:编写程序,将键盘接收到的四位十六进制数转换为等值的二进 制数,并显示在屏幕上。若输入的不是0F间的数字,则显示出错 信息,并要求重新输入。二、实验目实验目 的的(1)掌握键盘输入字符的方法和十六进制数字字符的ASCII码转换为二进制数的原理。(2)掌握子程序定义和调用的方法。(3)掌握循环移位指令的用法和无符号数比较大小的方法。22023-5-28三、三、实验提示实验提示:从键盘上输入的十六进制数字字符进入计算机后并不是相应的十六进制数或二进制数,而是与字符对应的ASCII码,现要
2、找出ASCII码与该数字对应的二进制数之间的关系。关系如下:32023-5-28十六进制数字十六进制数字字符字符字符对应的字符对应的ASCII码码数字对应的二数字对应的二进制数进制数0 930H 39HASCII码码-30HA F41H 46HASCII码码-37Ha f61H 66HASCII码码-57H42023-5-28四、程序流程图52023-5-28五、程序代码 CRLF MACRO MOV AH,02H MOV DL,0DH INT 21H MOV AH,02H MOV DL,0AH INT 21HENDM62023-5-28DATA SEGMENTMARK DB?MESS DB
3、输入四位十六进制数,按回车键转化为二进制数,空格键结束!,0DH,0AH,输入:$ERROR DB 0DH,0AH,输入错误!,0DH,0AH,$DATA ENDS72023-5-28STACK SEGMENTSTA DW 32 DUP(?)TOP DW?STACK ENDS82023-5-28CODE SEGMENTASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACKSTART:MOV AX,DATA MOV DS,AX MOV ES,AX MOV SP,TOPHEAD:CRLF MOV MARK,0 MOV AH,09H LEA DX,MESS INT 21H ;
4、显示提示输入的信息 CALL GETNUM ;接收键入数值送DX CMP MARK,01H JE HEAD92023-5-28MOV CX,0010H ;16位 MOV BX,DXTTT:ROL BX,1 ;循环左移1位 MOV DL,BL AND DL,01H ;屏蔽掉高7位 ADD DL,30H MOV AH,02H INT 21H ;显示二进制位对应的ASCII字符 LOOP TTT JMP HEAD102023-5-28FINI:MOV AX,4C00H INT 21H ;返回DOSGETNUM PROC NEAR ;子程序,接收键入数值送DX PUSH CX XOR DX,DXGGG
5、:MOV AH,01H INT 21H CMP AL,0DH ;输入为回车,则进行转换 JE PPP CMP AL,20H ;输入为空格,则退回DOS JE FINI CMP AL,30H JB KKK112023-5-28 SUB AL,30H CMP AL,0AH JB GETS CMP AL,11H JB KKK SUB AL,07HCMP AL,0FH JBE GETS CMP AL,2AH JB KKK CMP AL,2FH JA KKK SUB AL,20H122023-5-28GETS:MOV CL,04 SHL DX,CL XOR AH,AH ADD DX,AX JMP GGG
6、KKK:MOV AH,09H MOV DX,OFFSET ERROR INT 21H MOV MARK,01H132023-5-28PPP:PUSH DX CRLF POP DX POP CX RETGETNUM ENDPCODE ENDSEND START142023-5-28六、实验记录152023-5-28实验二两个多位十进制数相减实验一、实验要求一、实验要求 将两个多位十进制数相减,要求被减数,减数均以ASCII码形式按顺序存放在以DATAI和DATA2为首的5个内存单元中(低位在前),结果送回DATAI处。二、实验目的二、实验目的 1学习数据传送和算术运算指令的用法。2熟悉在PC机上
7、建立、汇编、链接、调试和运行汇编语言程序的过程。162023-5-28三、实验流程图172023-5-28四、程序代码四、程序代码DATA SEGMENTDATA1 DB 33H,39H,31H,37H,38H ;第一个数据(作为被减数)DATA2 DB 36H,35H,30H,38H,32H ;第二个数据(作为减数)MES1 DB -,$MES2 DB =,$DATA ENDSSTACK SEGMENT ;堆栈段STA DB 20 DUP(?)TOP EQU LENGTH STASTACK ENDS182023-5-28CODE SEGMENTASSUME CS:CODE,DS:DATA,S
8、S:STACK,ES:DATASTART:MOV AX,DATA MOV DS,AX MOV ES,AX MOV AX,STACK MOV SS,AX MOV AX,TOP MOV SP,AX MOV SI,OFFSET DATA1 MOV BX,05 CALL DISPL ;显示被减数192023-5-28 MOV AH,09H LEA DX,MES1 INT 21H MOV SI,OFFSET DATA2 MOV BX,05 ;显示减数 CALL DISPL MOV AH,09H LEA DX,MES2 INT 21H MOV SI,OFFSET DATA1 MOV DI,OFFSET D
9、ATA2 CALL SUBA ;减法运算 MOV SI,OFFSET DATA1 MOV BX,05 ;显示结果 CALL DISPL202023-5-28MOV DL,0DH MOV AH,02H INT 21H MOV DL,0AH MOV AH,02H INT 21H INT 21H MOV AX,4C00H INT 21H212023-5-28DISPL PROC NEAR ;显示子功能DSI:MOV AH,02 MOV DL,SI+BX-1 ;显示字符串中一字符 INT 21H DEC BX ;修改偏移量 JNZ DSI RETDISPL ENDP222023-5-28SUBA PR
10、OC NEAR MOV DX,SI MOV BP,DI MOV BX,05SU1:SUB BYTE PTRSI+BX-1,30H SUB BYTE PTRDI+BX-1,30H DEC BX ;将ASCII 码表示的数字串 JNZ SU1 ;转化为十六进制的数字串 MOV SI,DX MOV DI,BP MOV CX,05 ;包括进位,共5位 CLC ;清进单位232023-5-28SU2:MOV AL,SI MOV BL,DI SBB AL,BL ;带进位相减 AAS ;非组合BCD码的减法调整 MOV SI,AL ;结果送被减数区 INC SI INC DI ;指向下一位 LOOP SU2 ;循环 MOV SI,DX MOV DI,BP MOV BX,05242023-5-28SU3:ADD BYTE PTR SI+BX-1,30H ADD BYTE PTR DI+BX-1,30H DEC BX ;十六进制的数字串转化ASCII码表示的数字串 JNZ SU3 RET SUBA ENDPCODE ENDSEND START252023-5-28