汇编语言题目:在数据段中定义长为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 12:03:56 浏览: 24
以下是汇编语言代码实现:
```
DATA SEGMENT
BUF DW -5, -21, 0, -29, 25, 0, -26, 0, 37, -39
MAX_NEG DW ?
MIN_POS DW ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START:
MOV AX, DATA
MOV DS, AX
; 查找负数的最大值
MOV CX, 10
LEA SI, BUF
MOV BX, [SI]
NEG BX
MOV MAX_NEG, BX
LOOP_START:
ADD SI, 2
MOV BX, [SI]
CMP BX, 0
JZ ZERO_CHECK
CMP BX, 0
JL NEG_CHECK
CMP BX, MIN_POS
JB SKIP_POSITIVE
MOV MIN_POS, BX
JMP SKIP_POSITIVE
NEG_CHECK:
NEG BX
CMP BX, MAX_NEG
JB SKIP_NEGATIVE
MOV MAX_NEG, BX
ZERO_CHECK:
LOOP LOOP_START
JMP END_PROGRAM
SKIP_POSITIVE:
JMP LOOP_START
SKIP_NEGATIVE:
JMP LOOP_START
END_PROGRAM:
MOV AH, 4CH
INT 21H
CODE ENDS
```
代码解释:
首先,我们定义了一个数据段,其中包含一个长为10的word数组BUF,和两个变量MAX_NEG和MIN_POS,用于存储负数的最大值和正数的最小值。
然后,在代码段中,我们初始化数据段寄存器DS,将其设置为数据段的地址。
接下来,我们使用循环来遍历BUF数组中的每个元素。对于每个元素,我们检查其是否为0。如果是0,则跳过该元素。如果不是0,则将其与MIN_POS或MAX_NEG进行比较,以找到正数的最小值和负数的最大值。
最后,我们使用INT 21H指令结束程序。