49703100.doc - 32 - 作者:User
MOV AX, A [SI] ;取A数组中的一个数
LOOP2: CMP B [DI], AX ;和B数组中的数相等吗?
JNE NO
MOV C [BX], AX ;相等存入C数组中 ADD BX, 2
NO: ADD DI, 2
LOOP LOOP2 ADD SI, 2 POP CX LOOP LOOP1 RET
MAIN ENDP CSEG ENDS ;以上定义代码段 ;--------------------------------------------------------------------------
END START
5.20 设在A、B和C单元中分别存放着三个数。若三个数都不是0,则求出三数之和存放在D单元中;
若其中有一个数为0,则把其它两单元也清0。请编写此程序。 答:程序如下:
DSEG SEGMENT 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;
49703100.doc - 33 - 作者:User
(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 A