1、汇编语言上机练习考题汇编语言上机练习考题(2009-01-23 20:54:37)标签:汇编语言考题教育 分类:汇编语言程序设计 键盘连续输入20个ASCII字符,如果是大写字母AZ之间的字符,请将它们转换成相应的小写字符;若为其它字符,均转换为ASCII字符“SP”(20H)。例如:输入:31H(1),32H(2),61H(a),41H(A),42H(B).输出:20H(SP),20H(SP),20H(SP),61H(a),62H(b).要求:要有输入、输出提示信息各占一行。如下图所示:DATAS SEGMENT INPUT DB Please Input,0DH,0AH,$ OUPUT D
2、B Output,0DH,0AH,$ BUF DB 21 DB ? DB 21 dup(?)DATAS ENDSSTACKS SEGMENTSTACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKSSTART: MOV AX,DATAS MOV DS,AX;-主程序代码段- LEA DX,INPUT MOV AH,9 INT 21H LEA DX,BUF MOV AH,10 INT 21H CALL CRLF LEA DX,OUPUT MOV AH,9 INT 21H MOV BX,1 MOV CL,BUFBX MOV CH,0AGA
3、IN: INC BX MOV DL,BUFBX CMP DL,A JB NEXT CMP DL,Z JA NEXT ADD DL,20H JMP DISPNEXT: MOV DL,20HDISP: MOV AH,2 INT 21H LOOP AGAIN MOV AH,4CH INT 21H;-子程序定义-CRLF PROC MOV DL,0DH MOV AH,2 INT 21H MOV DL,0AH MOV AH,2 INT 21H RETCRLF ENDP;-子程序结束-CODES ENDS END START键盘连续输入20个字符,请将它们的ASCII码以16进制数的格式显示输出。要求:要
4、有输入、输出提示信息各占一行。例如:输入:12aB3E4f.输出:31H,32H,61H,42H,33H,45H,34H,66H,.效果如下图所示:【解题答案】DATAS SEGMENTINPUT DB Please Input,0DH,0AH,$OUPUT DB Output,0DH,0AH,$BUF DB 21 DB ? DB 21 dup(?)DATAS ENDSSTACKS SEGMENTSTACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKSSTART: MOV AX,DATAS MOV DS,AX;-主程序代码段- LE
5、A DX,INPUT MOV AH,9 INT 21H LEA DX,BUF MOV AH,10 INT 21H CALL CRLF LEA DX,OUPUT MOV AH,9 INT 21H MOV BX,1 MOV CL,BUFBX MOV CH,0AGAIN: PUSH CX MOV CL,4 INC BX MOV DL,BUFBX SHR DL,CL ADD DL,30H MOV AH,2 INT 21H MOV DL,BUFBX AND DL,0FH ADD DL,30H MOV AH,2 INT 21H CALL HDH POP CX LOOP AGAIN MOV AH,4CH I
6、NT 21H;-16进制H,子程序定义-HDH PROCMOV DL,HMOV AH,2INT 21HMOV DL,MOV AH,2INT 21HRETHDH ENDP;-换行回车子程序定义-CRLF PROCMOV DL,0DHMOV AH,2INT 21HMOV DL,0AHMOV AH,2INT 21HRETCRLF ENDP;-子程序结束-CODES ENDS END START键盘连续输入20个ASCII字符,如果是小写字母az之间的字符,请将它们转换成相应的大写字符;若为其它字符,则不作转换。并统计键盘输入的原20个ASCII字符中字符为“a”的个数。最后,将转换的结果按输入顺序显
7、示输出,之后显示原20个ASCII字符中字符为“a”的个数(按十进制数显示)。要求:要有输入、输出提示信息各占一行。例如:输入:31H(1)32H(2)61H(a)41H(A)42H(B).输出:30H(1),32H(2),41H(A),41H(A),42H(B).十进制数表示的“a”的个数效果如下图所示:【解题答案】DATAS SEGMENT INPUT DB Please Input:,0DH,0AH,$ OUPUT DB Output:,0DH,0AH,$ BUF DB 21 DB ? DB 21 dup(?)DATAS ENDSSTACKS SEGMENTSTACKS ENDSCODE
8、S SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKSSTART: MOV AX,DATAS MOV DS,AX;-主程序代码段- LEA DX,INPUT MOV AH,9 INT 21H LEA DX,BUF MOV AH,10 INT 21H CALL CRLF LEA DX,OUPUT MOV AH,9 INT 21H MOV BL,0 MOV SI,1 MOV CL,BUFSI MOV CH,0AGAIN: INC SI MOV DL,BUFSI CMP DL,a JZ NUMB JB NEXT CMP DL,z JA NEXT JMP CONVER
9、NUMB: INC BLCONVER: SUB DL,20HNEXT: MOV AH,2 INT 21H LOOP AGAIN CALL DISP MOV AH,4CH INT 21H;-回车换行子程序-CRLF PROC MOV DL,0DH MOV AH,2 INT 21H MOV DL,0AH MOV AH,2 INT 21H RETCRLF ENDP;-显示BL数据子程序-DISP PROC MOV AL,BL MOV AH,0 MOV BH,10 DIV BH MOV BH,AH MOV DL,AL ADD DL,30H MOV AH,2 INT 21H MOV DL,BH ADD
10、DL,30H MOV AH,2 INT 21H RETDISP ENDP;-子程序定义结束-CODES ENDS END START键盘连续输入20个ASCII字符,需要对它们进行加密,其方法为:某个字符的十六进制数用高4位X1和低4位X2表示的话,如果X1大于等于X2,则X2=X1-X2;否则X1=X2-X1。最后,将加密后的结果按按十六进制数显示输出。要求:要有输入、输出提示信息各占一行。例如:输入:41H(A)46H(F).输出:43H,26H.效果如下图所示:【解题答案】DATAS SEGMENT INPUT DB Please Input:,0DH,0AH,$ OUPUT DB Ou
11、tput:,0DH,0AH,$ BUF DB 21 DB ? DB 21 dup(?)DATAS ENDSSTACKS SEGMENTSTACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKSSTART: MOV AX,DATAS MOV DS,AX;-主程序代码段- LEA DX,INPUT MOV AH,9 INT 21H LEA DX,BUF MOV AH,10 INT 21H CALL CRLF LEA DX,OUPUT MOV AH,9 INT 21H MOV BL,0 MOV SI,1 MOV CL,BUFSI MOV C
12、H,0AGAIN:PUSH CXMOV CL,4 INC SI MOV DH,BUFSI SHR DH,CL MOV DL,BUFSI AND DL,0FH CMP DH,DL JB NEXT SUB DL,DH NEG DL JMP DISPLAYNEXT: SUB DH,DL NEG DHDISPLAY: CALL DISP POP CX LOOP AGAIN MOV AH,4CH INT 21H;-回车换行子程序-CRLF PROC MOV DL,0DH MOV AH,2 INT 21H MOV DL,0AH MOV AH,2 INT 21H RETCRLF ENDP;-显示DH,DL,数据子程序-DISP PROC PUSH DX MOV DL,DH ADD DL,30H CMP DL,3AH JB NEXT1 ADD DL,7HNEXT1: MOV AH,2 INT 21H POP DX ADD DL,30H CMP DL,3AH JB NEXT2 ADD DL,7HNEXT2: MOV AH,2 INT 21H MOV DL,H MOV AH,2 INT 21H MOV DL, MOV AH,2 INT 21H RETDISP ENDP;-子程序定义结束-CODES ENDS END START