EXIT: MOV AH,4CH INT 21H CODE ENDS END START END
8.试编写程序段,完成将数据区从0100H 开始的一串字节数据逐个从F0H 端口输出,已知
数据串以0AH 为结束符。 解答:
DATA SEGMENT ORG 0100H
DATA1 DB N DUP(?) DATA ENDS ;
CODE SEGMENT
ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX
;将DATA1 数据串中的数据取出并从F0H 端口中输出 LEA SI,DATA1 MOV CX,N MOV BL,0AH
NTXT: MOV AL,[SI] CMP AL,BL JZ EXIT
OUT 0F0H,AL INC SI
LOOP NEXT ;返回DOS
EXIT: MOV AH,4CH INT 21H
CODE ENDS END START END
9.(24)内存中以FIRST 和SECOND 开始的单元中分别存放着两个4 位用压缩BCD 码表示
的十进制数, 低位在前。编程序求这两个数的和,仍用压缩BCD 码表示, 并存到以THIRD 开始的单元。 解答:
DATA SEGMENT FIRST DW 3412H SECOND DW 7856H THIRD DB ?,?,? DATA ENDS ;
STACK SEGMENT STACK ENDS ;
CODE SEGMENT
ASSUME DS:DATA,CS:CODE,SS:STACK,ES:DATA START: MOV AX,DATA MOV DS,AX LEA SI,FIRST LEA DI,SECOND LEA BX,THIRD MOV CX,2 CLC
AGAIN: MOV AL,BYTE PTR[SI] MOV DL,BYTE PTR[DI] ADC AL,DL DAA
MOV BYTE PTR[BX],AL INC SI INC DI INC BX
LOOP AGAIN JC AA
MOV BYTE PTR[BX],0 JMP EXIT
AA: MOV BYTE PTR[BX],1 EXIT: MOV AX,4C00H INT 21H CODE ENDS END START
10.(27)设字变量单元A、B、C 存放有三个数,若三个数都不为零,则求三个数的和,存 放在D 中;若有一个为零,则将其余两个也清零,试编写程序。 解答:
DATA SEGMENT A DB ? B DB ? C DB ? D DW ? DATA ENDS ;
STACK SEGMENT STACK ENDS ;
CODE SEGMENT
ASSUME DS:DATA,CS:CODE,SS:STACK,ES:DATA
START: MOV AX,DATA MOV DS,AX LEA SI,A LEA DI,D MOV AL,[SI] CMP AL,00 JZ ZERO ADC DX,AL LEA SI,B MOV AL,[SI] CMP AL,00 JZ ZERO ADC DX,AL LEA SI,C MOV AL,[SI] CMP AL,00 JZ ZERO ADC DX,AL MOV [DI],DX JMP EXIT
ZERO: MOV AL,0 MOV A,AL MOV B,AL MOV C,AL ;
EXIT: MOV AX,4C00H INT 21H CODE ENDS END START
11.(16)试编程序,统计由TABLE 开始的128 个单元中所存放的字符“A”的个数,并将结 果存放在DX 中。 解答:
DATA SEGMENT
TABLE DB X1,X2,...X128 DATA ENDS ;
STACK SEGMENT STACK ENDS ;
CODE SEGMENT
ASSUME DS:DATA,CS:CODE,SS:STACK,ES:DATA START: MOV AX,DATA MOV DS,AX LEA SI,TABLE MOV DX,0
MOV CX,128
AGAIN: MOV AL,[SI] CMP AL,'A' JNZ NEXT INC DX
NEXT: INC SI LOOP AGAIN MOV AX,4C00H INT 21H CODE ENDS END START
12.试编制一个汇编语言程序,求出首地址为DATA 的1000 个字数组中的最小偶数,并把
它存放于MIN 单元中。 解答:
DATA SEGMENT
ARRAY DW X1,X2,...X1000
ARRAY_EVEN DW 1000 DUP(?) MIN DW ? MAX DW ? DATA ENDS ;
STACK SEGMENT STACK ENDS ;
CODE SEGMENT
ASSUME DS:DATA,CS:CODE,SS:STACK,ES:DATA START: MOV AX,DATA MOV DS,AX
;将数组中的偶数放入ARRAY_EVEN 中 LEA SI,ARRAY
LEA DI,ARRAY_EVEN MOV CX,1000
AGAIN: MOV AX,[SI] TEST AX,01h JNZ NEXT MOV [DI],AX INC DI INC DI
NEXT: INC SI INC SI
LOOP AGAIN
;找出ARRAY_EVEN 中的最大数 LEA SI,ARRAY_EVEN MOV CX,999
MOV AX,[SI] MOV BX,AX INC SI INC SI
NEXT: CMP AX,[SI] JAE LL
MOV AX,[SI] LL: INC SI INC SI
LOOP NEXT MOV MAX,AX
;找出ARRAY_EVEN 中的最小数(第13 题增加的部分) LEA SI,ARRAY_EVEN MOV CX,999 MOV AX,[SI]
MOV BX,AX INC SI INC SI
NEXT: CMP AX,[SI] JBE SS
MOV AX,[SI] SS: INC SI INC SI
LOOP NEXT MOV MIN,AX ;返回DOS
MOV AX,4C00H INT 21H CODE ENDS END START
13.在上题中,如果要求同时找出最大和最小的偶数,并把它们分别存放于MAX 和MIN 单元中,试完成程序。 解答:略(见第12 题)。
14.(28)在DATA 字数组中存放有100H 个16 位补码数,试编写一程序求它们的平均值,放
在AX 中,并求出数组中有多少个数小于平均值,将结果存于BX 中。 解答:
DATA SEGMENT
DAT DW X1,X2,...X256 DATA ENDS ;
STACK SEGMENT STACK ENDS ;
CODE SEGMENT