已在数据段定义了一缓冲区TABLE中有30个有符号字节数据,要求统计其正数,负数的个数,并输出到屏幕上(0作为正数处理,另外正数或负数的个数都小于30),试编写完成这一过程的代码段。
时间: 2023-12-21 07:07:08 浏览: 71
下面是一段示例代码(使用MASM汇编语言实现):
```
DATA SEGMENT
TABLE DB 10,-5,20,-30,0,8,-12,15,-25,18,7,-3,2,-6,13,1,-9,4,-11,6,-8,19,-14,16,-22,27,-26,23,21,-16
POS_COUNT DB ?
NEG_COUNT DB ?
DATA ENDS
CODE SEGMENT
START:
MOV AX, @DATA
MOV DS, AX ; 初始化数据段寄存器
MOV CX, 30 ; 循环次数
MOV BL, 0 ; 正数个数
MOV BH, 0 ; 负数个数
LEA SI, TABLE ; 将TABLE的地址装入SI寄存器
LOOP_START:
MOV AL, [SI] ; 取出当前字节数据
CMP AL, 0 ; 判断是否为0
JGE POSITIVE ; 大于等于0则是正数
INC BH ; 负数个数加1
JMP CONTINUE
POSITIVE:
INC BL ; 正数个数加1
CONTINUE:
INC SI ; 指向下一个字节数据
LOOP LOOP_START
; 输出正数个数和负数个数
MOV AH, 2 ; 设置输出函数号
MOV DL, BL ; 将正数个数放入DL寄存器
ADD DL, '0' ; 转换为ASCII码
INT 21H ; 调用DOS输出函数
MOV DL, ',' ; 输出逗号分隔符
INT 21H ; 调用DOS输出函数
MOV DL, BH ; 将负数个数放入DL寄存器
ADD DL, '0' ; 转换为ASCII码
INT 21H ; 调用DOS输出函数
MOV AH, 4CH ; 设置退出程序函数号
INT 21H ; 调用DOS退出程序函数
CODE ENDS
END START
```
代码中使用了两个计数器BL和BH分别记录正数个数和负数个数。循环遍历TABLE数组中的每个字节数据,如果当前字节数据大于等于0,则认为是正数,BL加1;否则认为是负数,BH加1。最后使用DOS的输出函数将正数个数和负数个数输出到屏幕上。
阅读全文