汇编是复杂的,可以下载MASM或者Radasm编译如下代码,在linux平台 可以直接用gcc自带的as汇编器进行编译。
DATA SEGMENT DATA1 DB ? DATA2 DB 2 DUP(?) DATA20 DB 2 DUP(?) DATA3 DB 'Input Error, Please Enter Again!','$' DATA ENDS STACK SEGMENT DB 5 DUP(?) STACK ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA,SS:STACK START:MOV AX,DATA MOV DS,AX MOV AX,STACK MOV SS,AX MOV BX,0 INPUT:MOV AH,01H INT 21HCMP AL,51H;判断输入的字符是否为Q JE EXIT ;如果是Q就退出 CMP AL,71H;判断输入的字符是否为q JE EXIT;如果是Q就退出PUSH AX;把从键盘输入的字符的ASCII存到堆栈段 SUB AL,30H ;判断是否为数字 CMP AL,00HJL INDI ;如果不是就提示错误 CMP AL,09H ; MOV BL,AL ; JLE OUTPUT2;如果是数字就输出 POP AX ;把AL的值取出来PUSH AX ; MOV BL,AL SUB AL,41H;判断是否为大写字母A到F CMP AL,00H JL INDI;如果不是就提示错误CMP AL,06H JL CHANGE POP AXPUSH AX MOV BL,AL SUB AL,61H;判断是否为小写字母a到f CMP AL,00H JL INDI ;如果不是就提示错误 CMP AL,06H JL CHANGE POP AXJMP INDICHANGE:MOV SI,0MOV DI,0MOV CL,4MOV AL,BLAND AL,11011111B;统一换为大写字母再转换,如果是大写字母就不变SUB AL,31HMOV BL,ALAND AL,0FH ;与运算,取低位MOV [DATA2+SI],AL ;把个位数存到DATA2中MOV AL,BLSAR AL,CL ;算术右移,取高位MOV[DATA20+DI],AL;把十位数存到DATA20中OUTPUT1: MOV DL,48H;输出十六进制符号HMOV AH,02HINT 21HMOV DL,3DH ;输出等号‘=’MOV AH,02HINT 21HMOV DL,[DATA20+DI];输出十位数ADD DL,30HMOV AH,02HINT 21HMOV DL,[DATA2+SI];输出个位数ADD DL,30HMOV AH,02HINT 21HMOV DL,20HMOV AH,02HINT 21HJMP INPUT;跳到输入数字 OUTPUT2: MOV DL,48H ;输出数字MOV AH,02HINT 21HMOV DL,3DHMOV AH,02HINT 21HMOV DL,BLADD DL,30HMOV AH,02HINT 21HMOV DL,20HMOV AH,02HINT 21HJMP INPUTINDI:MOV DL,20H ;提示子程序MOV AH,02HINT 21HMOV DX,OFFSET DATA3 ;显示提示信息MOV AH,09HINT 21HJMP INPUT EXIT:MOV AH,4CHINT 21HCODE ENDSEND START
取消
评论