例6.10 分类统计字数组data中正数、负数和零的个数,并分别存入内存字变量Positive、Negative和Zero中,数组元素个数保存在其第一个字中。
解: | ||||
DATA1 | SEGMENT | |||
data | DW 10 | |||
DW 2130, -43, 31, -321, -1234, 345, 0, 3213, 0, 5477 | ||||
Positive | DW 0 | |||
Negative | DW 0 | |||
Zero | DW 0 | |||
DATA1 | ENDS | |||
CODE1 | SEGMENT | |||
ASSUME CS:CODE1, DS:DATA1 | ||||
START: | MOV | AX, DATA1 | ||
MOV | DS, AX | |||
XOR | AX, AX | ;用AX来对正数计数 | ||
XOR | BX, BX | ;用BX来对负数计数 | ||
XOR | DX, DX | ;用DX来对零计数 | ||
MOV | CX, data | ;用CX来进行循环计数 | JCXZ | save | ;考虑数组的元素个数为0的情况 |
LEA | SI, data+2 | ;用指针SI来访问整个数组 | ||
again: | CMP | word ptr [SI], 0 | ||
JL | lower | |||
JE | equal | |||
INC | AX | |||
JMP | loop1 | |||
lower: | INC | BX | ||
JMP | loop1 | |||
equal: | INC | DX | ||
loop1: | ADD | SI, 2 | ||
LOOP | again | |||
save: | MOV | Positive, AX | ;把各类的统计数保存到内存单元中 | |
MOV | Negative, BX | |||
MOV | Zero, DX | |||
MOV | AX, 4C00H | |||
INT | 21H | |||
CODE1 | ENDS | |||
END |