汇编语言 编程:数组中求最大数 求数组中负数的个数 (最好注解说明下一些重要语句)

两个程序都要先显示数组中的数据... 两个程序都要先显示数组中的数据 展开
 我来答
gencycbh
2012-05-26 · TA获得超过258个赞
知道答主
回答量:101
采纳率:100%
帮助的人:74.1万
展开全部
1.数组中求最大数
DATAS SEGMENT
max dw 14h,65h,454h,9h,87,248
num dw $-max
DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS
main proc far
START:
push ds
mov ax,0
push ax
MOV AX,DATAS
MOV DS,AX
mov si,offset max;将数组的首地址送给si,以便用si对数组操作
mov ax,num;算出数组的个数,控制循环次数
mov cl,2
div cl
mov cx,ax
mov bx,0
next:
push bx;压入栈,保护数据
push cx
mov bx,[si]
call output;调用子程序,输出数组中的数据
mov dl,32;输出空格
int 21h
pop cx
pop bx
cmp bx,[si];判断比较,以找出最大值
jl dig
jmp l1
dig:
mov bx,[si]
l1:
add si,2
loop next
call crlf;回车换行
call output;输出最大值
ret
main endp
output proc near;是个将bx中二进制数转换为十六进制的子程序
mov cl,4
mov di,4
shift:
rol bx,cl
mov ax,bx
and al,0fh
cmp al,09h
jg l2
add al,30h
jmp l3
l2:add al,37h
l3:mov dl,al
mov ah,2
int 21h
dec di
jnz shift
ret
output endp
crlf proc near;回车换行的子程序
mov dl,0dh
mov ah,2
int 21h
mov dl,0ah
mov ah,2
int 21h
ret
crlf endp
CODES ENDS
END main
2.求数组中负数的个数

DATA SEGMENT
array DW 12H,14,-5,-10H,33,40,48,-22,-32,10H
NDATA DW 10 DUP(0)
N DW 0
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
main proc far
START: push ds
mov ax,0
push ax
MOV AX,DATA
MOV DS,AX
mov cx,10
mov si,offset array
l1:mov bx,[si]
push cx
call output;输出数组里的数据
mov dl,32
int 21h
pop cx
add si,2
loop l1
MOV BX,0
MOV SI,0
MOV DI,0
MOV CX,10
NEXT: MOV AX,ARRAY[BX]
TEST AX,8000H;判别是否为负数
JZ L
INC N ;统计负数的个数
MOV NDATA[DI],AX
ADD DI,2
L: ADD BX,2
LOOP NEXT
MOV DL,0AH
MOV AH,2
INT 21H
MOV DL,0DH
MOV AH,2
INT 21H
MOV DX,N
ADD DL,30H
MOV AH,2
INT 21H
ret
main endp
output proc near
mov cl,4
mov di,4
shift:
rol bx,cl
mov ax,bx
and al,0fh
cmp al,09h
jg l2
add al,30h
jmp l3
l2:add al,37h
l3:mov dl,al
mov ah,2
int 21h
dec di
jnz shift
ret
output endp
CODE ENDS
END main
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式