一个汇编语言的题大家看看

已知从BUF单元起存放若干带符号数,找出其中的正数存入PLUS单元,并求其和后将结果保存在SUM单元,写出完整程序

DATA     SEGMENT
BUF        DB 3,5,2,7,0,-1,-7,9,-4,8;随机的几个存放在BUF为首址的一些数据
N         EQU $-BUF    ;N表示数据的总个数
ZNUM     DW ?        ;ZNUM用于存放最后的统计个数
DATA     ENDS
STACK    SEGMENT STACK
        DB 100 DUP(?);在堆栈段开辟了一段100DB大小的用于运算的存储空间
STACK     ENDS
CODE     SEGMENT
         ASSUME CS:CODE,DS:DATA,SS:STACK
START:    MOV AX,DATA
        MOV DS,AX    
        LEA BX,BUF    ;去有效地址指令LEA,将BUF的地址赋值给BX
        MOV CX,N    ;CX存放数据的总个数,用于循环使用
        XOR AX,AX    ;AX清零,用于存放正数的个数
L1:        CMP BYTE PTR[BX],0;存储器操作数需要使用修改属性运算符PTR来指定位于其后的存储器操作数的类型为BYTE类型,判断数据是否为0
        JLE L2        ;JLE小于或等于转移,即若上条指令结果<=0,跳转到L2标签处,否则执行下一条指令 即>0执行下一条指令,<=0跳转到L2标签处
        INC AX        ;若执行到此条指令,表示数据为正数,AX自加
L2:        INC BX        ;BX+1,即操作进行判断下一个数据
        LOOP L1        ;无条件跳转到L1标签处,CX-1,再次跳转到L1标签处时,由于BX已经+1,此时再判断的就是下一个数据了,直到CX的值为0,即所有数据已经都判断完毕之后结束循环
        MOV ZNUM,AX    ;将AX用于存放整数的个数赋值给ZNUM
        MOV AH,4CH    ;调用4CH号功能,返回DOS操作系统
        INT 21H        ;终止当前程序的运行,并返回DOS系统
CODE     ENDS
        END START