IBM-PC汇编语言程序设计课后习题答案第二版沉美明资料 下载本文

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