9.编程统计 BUF 内存区若干个有符号数中正数、负数、零的个数并保存到相对应
的结果单元。
DATA SEGMENT
BUF DB 10,20,0,0,0,-10,-20,-30,-40,-50
COUNT EQU $-BUF
ZS_COUNT DB 0
FS_COUNT DB 0
LS_COUNT DB 0
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX
MOV BX,OFFSET BUF
MOV CX,COUNT
XOR DL,DL;初始化正数个数
XOR DH,DH;初始化负数个数
XOR AH,AH;初始化零的个数
AGAIN:MOV AL,[BX]
CMP AL,0
JG ZS;如果是正数,则跳转
JL FS;如果是负数,则跳转
INC AH
JMP NEXT
ZS:INC DL
JMP NEXT
FS:INC DH
NEXT:INC BX
LOOP AGAIN
MOV ZS_COUNT,DL;保存正数结果
MOV FS_COUNT,DH;保存负数结果
MOV LS_COUNT,AH;保存零的结果
MOV AH,4CH
INT 21H
CODE ENDS
END START
10.把内存 2000H 单元中 10 个有符号字节数分成正数和负数,分别存入 P 和 N
单元,并分别统计正数和负数的个数放入 DL 和 DH 寄存器中,请编程实现。
DATA SEGMENT
ORG 2000H
BUF DB 2,5,-6,7,-8,9,12,22,-17,19
P DB 10 DUP(?) ;存正数
N DB 10 DUP(?) ;存负数
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX
LEA BX,BUF
LEA SI,P
LEA DI,N
MOV DL,0 ;统计正数
MOV DH,0 ;统计负数
MOV CX,10
AGAIN:MOV AL,[BX]
CMP AL,0
JGE P1
MOV [DI],AL ;负数时存入 N 单元
INC DH ;负数时统计存入 DH
INC DI
JMP NEXT
P1:MOV [SI],AL ;正数时存入 P 单元
INC DL ;正数时统计存入 DL
INC SI
NEXT:INC BX
LOOP AGAIN
MOV AH,4CH
INT 21H
CODE ENDS
END START