例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 | ||||