在数据段中从0500H单元开始存放着10个带符号数(8位),要求把其中的正数传送至2000H开始的存储区;负数传送至2100H开始的存储区,且分别统计正数和负数的个数,并将正数和负数的个数分别存入2200H和2201H单元中,编写程序完成。
时间: 2024-03-11 11:50:09 浏览: 85
以下是汇编语言程序实现该功能:
```
ORG 100H ; 程序从100H地址开始
MOV CX, 10 ; CX 寄存器存储要处理的数据个数
MOV SI, 0500H ; SI 寄存器存储数据段起始地址
MOV DI, 2000H ; DI 寄存器存储正数存储区起始地址
MOV BX, 2100H ; BX 寄存器存储负数存储区起始地址
MOV BYTE PTR [2200H], 0 ; 存储正数个数的单元初始化为0
MOV BYTE PTR [2201H], 0 ; 存储负数个数的单元初始化为0
LOOP:
MOV AL, [SI] ; 从数据段读取一个字节
CMP AL, 0 ; 判断是否为0
JE END ; 如果为0,结束循环
CMP AL, 80H ; 判断是否为负数
JNS POSITIVE ; 如果为正数,跳转到 POSITIVE 标签
MOV [BX], AL ; 如果为负数,存储到负数存储区
INC BX ; BX 指向下一个负数存储单元
INC BYTE PTR [2201H] ; 负数个数加1
JMP CONTINUE
POSITIVE:
MOV [DI], AL ; 存储到正数存储区
INC DI ; DI 指向下一个正数存储单元
INC BYTE PTR [2200H] ; 正数个数加1
CONTINUE:
INC SI ; SI 指向下一个数据单元
LOOP LOOP ; 继续循环
END:
HLT ; 程序结束
END
```
该程序使用 CX 寄存器存储要处理的数据个数,SI 寄存器存储数据段起始地址,DI 寄存器存储正数存储区起始地址,BX 寄存器存储负数存储区起始地址。在循环中,每次从数据段读取一个字节,判断它是否为正数或负数,然后存储到相应的存储区中,并且统计正数和负数的个数。最后,程序结束并停机。
阅读全文