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