在数组中查找最小的偶数,并输出
程序运行:
代码:
datas segment
minEven dw 0
DATA dw 10 dup(101,1,21,81,5,261,3,421,4,541)
DATACount dw ($-DATA)/type DATA
outputPrompt db 'min even is AX=$'
outputNonEven db 'DATA array have not even!$'
datas ends
stacks segment stack
db 100h dup(?)
stacks ends
codes segment
assume cs:codes,ds:datas,ss:stacks
main proc far
start:
push ds
mov ax,0h
push ax
mov ax,datas ;初始化ds
mov ds,ax
mov ax,1 ;初始化ax
lea bx,DATA ;获取DATA偏移地址
mov cx,100
s:
mov dx,[bx] ;复制数据
and dx,1 ;判断是否为偶数
jnz s1 ;若为奇数,则跳转s1
cmp ax,1 ;判断ax是否为1
jz s2 ;若ax为1,则跳转s2
cmp ax,[bx] ;判断ax与[bx]大小
jle s1 ;若ax小于等于[bx],则跳转s1
s2:
mov ax,[bx] ;ax大于[bx]时,保存最小于ax
s1:
add bx ,type DATA ;数组下标索引下一单元
loop s
cmp ax,1 ;判断ax是否为1
je nonEven ;若为1,则DATA数组没有偶数
mov minEven,ax ;保存最小偶数ax
lea dx,outputPrompt ;输出ax提示
mov ah,9
int 21h
mov ax,minEven ;输出ax
call print
jmp exit
nonEven:
lea dx,outputNonEven ;输出没有偶数提示
mov ah,9
int 21h
exit:
ret
main endp
print proc near
mov bx,10
mov cx,0
sprint:
mov dx,0
div bx
push dx
inc cx
cmp ax,0
jne sprint
sprint1:
pop dx
add dl,30h
mov ah,2
int 21h
loop sprint1
ret
print endp
codes ends
end main