汇编

奇偶数

简单版

assume cs:codesg,ds:datasg
datasg segmgnt
	dw 0123h,0456h,0789h,0abch,0defh,0987h
datasg ends

codesg segment
start:
	mov ax,datasg
	mov ds,ax
	mov si,0
	mov dx,0
	mov cx,6
s:
	mov ax,[si]
	and ax,00000001h	;设置前面7-1位为0
	je s0				;当结果ZF=0时,跳转到s0处
	inc dx				;
s0:
	add si,2h			;si加2,跳到下一个数据
	loop s
	
	mov bx,6			
	sub bx,dx			;偶数=数据长度-dx	
	
	mov ax,4c00h
	int 21h
codesg ends
end start

mov bx,6
sub bx,dx

复杂版

assume cs:codesg,ds:datasg,ss:stack
datasg segmgnt
	dw 0123h,0456h,0789h,0abch,0defh,0987h
datasg ends

stack segment
	db 16 dup(0)
stack ends

codesg segment
start:

	mov ax,stack
	mov ss,ax
	mov sp,16

	mov ax,datasg
	mov ds,ax
	
	mov di,0
	mov si,0
	mov dx,0
	mov cx,6
s0:
	push cx			
	mov dx,1
	mov ax,[di]		;被除数=[di],保存在ax中。除数为8, 被除数为16, 默认在AX中存放.
	mov bx,2
	div bx			;[di]/2。除数为16位,结果则AX存储除法操作的商, DX存放余数
	mov cx,0
	cmp dx,cx		;DX存放余数?
					;求出余数是否为0再与赋值为0的cx比较
					;相等则跳转,不等就不跳继续执行
					
	je s0			;当结果ZF=0时,跳转到s0处
	add si,1		;si记录奇数。
s:
	add di,2h		;数据段,数据往后移动2位,跳到下一个数据
	pop cx			
	loop s0
	
	mov bx,6
	sub bx,si		;偶数=数据长度-si	
	
	mov ax,4c00h
	int 21h
codesg ends
end start

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值