汇编语言(十)之最小偶数

在数组中查找最小的偶数,并输出

程序运行:

 

代码:


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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值