在数据段中从0500H单元开始存放着10个带符号数(8位),要求把其中的正数传送至2000H开始的存储区;负数传送至2100H开始的存储区,且分别统计正数和负数的个数,并将正数和负数的个数分别存入2200H和2201H单元中,编写程序完成。
时间: 2024-03-22 10:38:11 浏览: 31
以下是汇编语言的程序实现:
```
ORG 100H ; 程序装入地址
MOV CX, 10 ; 循环10次
MOV SI, 0500H ; 数据段起始地址
MOV BX, 0 ; 正数计数器清零
MOV DX, 0 ; 负数计数器清零
MOV DI, 2000H ; 正数存储区起始地址
MOV BP, 2100H ; 负数存储区起始地址
LOOP_START:
MOV AL, [SI] ; 读取数据段中的一个数
CMP AL, 0 ; 判断正负性
JGE POSITIVE ; 大于等于0,为正数
NEG AL ; 取反,变为正数
MOV [BP], AL ; 存储到负数存储区
INC DX ; 负数计数器加1
ADD BP, 1 ; 负数存储区地址加1
JMP NEXT ; 跳过正数处理
POSITIVE:
MOV [DI], AL ; 存储到正数存储区
INC BX ; 正数计数器加1
ADD DI, 1 ; 正数存储区地址加1
NEXT:
ADD SI, 1 ; 数据段地址加1
LOOP LOOP_START ; 循环
MOV [2200H], BX ; 存储正数个数
MOV [2201H], DX ; 存储负数个数
HLT ; 程序结束
```
程序的思路是首先初始化计数器和存储区地址,然后循环读取数据段中的数,并判断正负性,分别存储到相应的存储区中,并累加计数器。最后将计数器的值存储到指定的地址中,程序结束。
阅读全文