编译环境:emu8086
附:汇编常用跳转指令及其检测位
https://blog.csdn.net/c529283955/article/details/103015482
统计数组中奇数和偶数的个数
DATAS SEGMENT
cnt_j db 0 ;奇数的个数
cnt_o db 0 ;偶数的个数
n db 10 ;10个数
num db 100,20,-3,7,6,30,1,200,-20,-30
two db 2 ;注意此处是db
DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS
START:
MOV AX,DATAS
MOV DS,AX
MOV cl,n ;设定循环次数
MOV bx,offset num
mov si,0 ;偏移
func:
mov al,bx[si] ;将bx[si] mov 到al中,作为被除数
mov ah,0
idiv two ;带符号的除法
cmp ah,0 ;16位/8位的除法运算后,余数存放在ah中,商存放在al中
jz oushu ;余数为0 跳转到oushu函数中
jne jishu ;ah中的数和0不相等,即余数不为0,跳转到jishu函数中
jishu:
inc cnt_j ;奇数的个数+1
add si,1 ;偏移+1
dec cl ;循环次数-1
jne func ;循环次数!=0时继续跳转到func
mov ah,4ch
int 21h
oushu:
inc cnt_o ;与上相同
add si,1
dec cl
jne func
mov ah,4ch
int 21h
CODES ENDS
END START
一些指令的说明
DIV 无符号数除法
IDIV 带符号数除法
格式:
DIV SRC
IDIV SRC
执行的操作:
字节操作(byte):
16位被除数在AX中,8位除数为原操作数,结果的8位商在AL中,8位余数在AH中。
(AL)←(AX)/(SRC)的商
(AH)←(AX)/(SRC)的余数
字操作(word):
32位被除数在DX,AX中。其中DX为高位字,16位除数为源操作数。
结果的16位商在AX中,16位余数在DX中。
(AX)←(DX,AX)/(SRC)的商
(DX)←(DX,AX)/(SRC)的余数
其余的在此处不做介绍,请自行查阅资料。