奇偶数
简单版
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