DSEG ENDS
;
-------------------------------------------------------------------------- CSEG SEGMENT MAIN PROC FAR
ASSUME CS: CSEG, DS: DSEG START: PUSH DS ;设置返回DOS SUB AX, AX PUSH AX MOV AX, DSEG
MOV DS, AX ;给DS赋值
BEGIN: MOV BX, 0 ;字母字符计数器 MOV SI, 0 ;数字字符计数器 MOV DI, 0 ;其它字符计数器 INPUT: MOV AH, 1 ;输入一个字符 INT 21H
CMP AL, 0DH ;是回车符吗? JE DISP
CMP AL, 30H ;<数字0吗? JAE NEXT1
OTHER: INC DI ;是其它字符 JMP SHORT INPUT
NEXT1: CMP AL, 39H ;>数字9吗?
JA NEXT2
INC SI ;是数字字符 JMP SHORT INPUT
NEXT2: CMP AL, 41H ;<字母A吗? JAE NEXT3
JMP SHORT OTHER ;是其它字符 NEXT3: CMP AL, 5AH ;>字母Z吗? JA NEXT4
INC BX ;是字母字符A~Z JMP SHORT INPUT
NEXT4: CMP AL, 61H ;<字母a吗? JAE NEXT5
JMP SHORT OTHER ;是其它字符 NEXT5: CMP AL, 7AH ;>字母z吗? JA SHORT OTHER ;是其它字符 INC BX ;是字母字符a~z JMP SHORT INPUT DISP: LEA DX, ALPHABET CALL DISPLAY LEA DX, NUMBER MOV BX, SI CALL DISPLAY LEA DX, OTHER MOV BX, DI
CALL DISPLAY RET MAIN ENDP
;
--------------------------------------------------------------------------
DISPLAY PROC NEAR
MOV AH, 09H ;显示字符串功能调用 INT 21H
CALL BINIHEX ;调把BX中二进制数转换为16进制显示子程序 LEA DX, CRLF
MOV AH, 09H ;显示回车换行 INT 21H RET
DISPLAY ENDP
;
--------------------------------------------------------------------------
BINIHEX PROC NEAR ;将BX中二进制数转换为16进制数显示子程序 MOV CH, 4
ROTATE: MOV CL, 4 ROL BX, CL MOV DL, BL AND DL, 0FH ADD DL, 30H
CMP DL, 3AH ;是A~F吗? JL PRINT_IT ADD DL, 07H
PRINT_IT: MOV AH, 02H ;显示一个字符 INT 21H DEC CH JNZ ROTATE RET
BINIHEX ENDP
CSEG ENDS ;以上定义代码段
;
-------------------------------------------------------------------------- END START
5.23 已定义了两个整数变量A和B,试编写程序完成下列功能: (1) 若两个数中有一个是奇数,则将奇数存入A中,偶数存入B中; (2) 若两个数中均为奇数,则将两数加1后存回原变量; (3) 若两个数中均为偶数,则两个变量均不改变。 答:程序如下: DSEG SEGMENT A DW ? B DW ? DSEG ENDS