已知从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