A DW ? B DW ? C DW ? D DW 0 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: CMP A, 0 JE NEXT CMP B, 0 JE NEXT CMP C, 0 JE NEXT MOV AX, A ADD AX, B
ADD AX, C MOV D, AX JMP SHORT EXIT NEXT: MOV A, 0 MOV B, 0 MOV C, 0 EXIT: RET MAIN ENDP
CSEG ENDS ;以上定义代码段
;
-------------------------------------------------------------------------- END START
5.21 试编写一程序,要求比较数组ARRAY中的三个16位补码数,并根据比较结果在终端上显示如下信息: (1) 如果三个数都不相等则显示0; (2) 如果三个数有二个数相等则显示1; (3) 如果三个数都相等则显示2。 答:程序如下: DSEG SEGMENT ARRAY DW 3 DUP (?) 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: LEA SI, ARRAY
MOV DX, 0 ;(DX)用于存放所求的结果 MOV AX, [SI] MOV BX, [SI+2]
CMP AX, BX ;比较第一和第二两个数是否相等 JNE NEXT1 INC DX
NEXT1: CMP [SI+4], AX ;比较第一和第三两个数是否相等 JNE NEXT2 INC DX
NEXT2: CMP [SI+4], BX ;比较第二和第三两个数是否相等 JNE NUM INC DX
NUM: CMP DX, 3 JL DISP DEC DX
DISP: ADD DL, 30H ;转换为ASCII码
MOV AH, 2 ;显示一个字符 INT 21H RET MAIN ENDP
CSEG ENDS ;以上定义代码段
;
-------------------------------------------------------------------------- END START
5.22 从键盘输入一系列字符(以回车符结束),并按字母、数字、及其它字符分类计数,最后显示出这三类的计数结果。 答:程序如下: DSEG SEGMENT
ALPHABET DB ‘输入的字母字符个数为:’, ‘$’ NUMBER DB ‘输入的数字字符个数为:’, ‘$’ OTHER DB ‘输入的其它字符个数为:’, ‘$’ CRLF DB 0DH, 0AH, ‘$’ DSEG ENDS
;
-------------------------------------------------------------------------- CSEG SEGMENT MAIN PROC FAR
ASSUME CS: CSEG, DS: DSEG START: PUSH DS ;设置返回DOS SUB AX, AX
相关推荐: