在数据段中定义长为10的word数组,假定其中正数、负数、0的个数均大于0,编程求其中正数的最小值和负数的最大值,数据定义如下所示: BUF DW -5, -21, 0, -29, 25, 0, -26, 0, 37, -39 MAX_NEG DW ? MIN_POS DW ?
时间: 2024-01-17 10:03:41 浏览: 74
好的,下面是一个汇编语言程序,可以用来实现您的要求:
```
ORG 100h ; 程序入口地址
BUF DW -5, -21, 0, -29, 25, 0, -26, 0, 37, -39
MAX_NEG DW ?
MIN_POS DW ?
START:
MOV CX, 10 ; 循环次数
MOV SI, 0 ; 数组下标清零
MOV AX, 7FFFh ; 初始化最小正数
MOV BX, 8000h ; 初始化最大负数
LOOP:
CMP WORD [BUF+SI], 0 ; 判断是否为零
JE IS_ZERO
CMP WORD [BUF+SI], 0 ; 判断是否为负数
JL IS_NEGATIVE
CMP WORD [BUF+SI], AX ; 判断是否比最小正数小
JB NOT_MIN_POS
MOV AX, [BUF+SI] ; 更新最小正数
JMP CONTINUE
IS_NEGATIVE:
CMP WORD [BUF+SI], BX ; 判断是否比最大负数大
JG NOT_MAX_NEG
MOV BX, [BUF+SI] ; 更新最大负数
JMP CONTINUE
IS_ZERO:
JMP CONTINUE
NOT_MIN_POS:
JMP NOT_MAX_NEG
NOT_MAX_NEG:
JMP CONTINUE
CONTINUE:
ADD SI, 2 ; 数组下标加2
LOOP LOOP
MOV [MAX_NEG], BX ; 保存最大负数
MOV [MIN_POS], AX ; 保存最小正数
MOV AH, 4CH ; 结束程序
INT 21H
```
这个程序使用了循环来遍历整个数组,使用了条件判断来判断每个数的类型,并且使用了比较操作来更新最小正数和最大负数。最终,程序将结果保存在MAX_NEG和MIN_POS中,并且通过INT 21H中断来结束程序。
阅读全文