本次实验要求开发一个程序,用以分析并处理以下数据集:5, -4, 0, 3, 100, -51。程序的主要功能是判断每个数字是正数、零还是负数,并据此输出明确的判断结果。
功能:判断一组数据的每一个数是大于0,小于0,还是=0。
结构:
(1) 编译
(2) 连接
(3) 运行
单步执行
源程序清单
DATA SEGMENT
BUF DB 5,-4,0,3,100,-51 ; 定义一个字节数组BUF,包含给定的一组数据
COUNT EQU $-BUF ; 计算BUF数组的长度,存储在COUNT中
Y1 DB 'Y=1',0DH,0AH,'$' ; 定义字符串Y1,表示Y=1,后跟换行和字符串结束符
Y2 DB 'Y=0',0DH,0AH,'$' ; 定义字符串Y2,表示Y=0,后跟换行和字符串结束符
Y3 DB 'Y=-1',0DH,0AH,'$' ; 定义字符串Y3,表示Y=-1,后跟换行和字符串结束符
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA ; 假设代码段CS和数据段DS
START:
MOV AX,DATA ; 将数据段地址加载到AX
MOV DS,AX ; 将AX的内容移动到DS,设置数据段寄存器
CLD ; 清除方向标志,确保字符串操作从低地址向高地址进行
MOV CX,COUNT ; 将BUF数组的长度加载到CX,用于循环计数
LEA SI,BUF ; 将BUF的地址加载到SI,用于数组遍历
AGAING:
MOV AL,[SI] ; 将BUF中当前元素加载到AL
CMP AL,0 ; 比较AL与0
JGE BIGR ; 如果AL大于等于0,跳转到BIGR
MOV DX,OFFSET Y3 ; 将字符串Y3的地址加载到DX
JMP CRT ; 跳转到CRT输出字符串
BIGR:
JE EQUL ; 如果AL等于0,跳转到EQUL
MOV DX,OFFSET Y1 ; 将字符串Y1的地址加载到DX
JMP CRT ; 跳转到CRT输出字符串
EQUL:
MOV DX,OFFSET Y2 ; 将字符串Y2的地址加载到DX
CRT:
MOV AH,9H ; 设置AH为9H,准备调用DOS中断输出字符串
INT 21H ; 调用DOS中断21H,输出DX指向的字符串
XOR DX,DX ; 清空DX寄存器
INC SI ; 将SI增加1,指向BUF的下一个元素
LOOP AGAING ; 递减CX,并在CX不为0时跳转回AGAING
MOV AX,4C00H ; 将4C00H加载到AX,准备结束程序
INT 21H ; 调用DOS中断21H,结束程序
CODE ENDS
END START
执行结果