循环程序设计
题目一
找出一个字节数组中最大数和最小数,分别存入 MAX 和 MIN 单元中(假设字节数组为 45,98,63,78,88,101,89,65,100)
流程图
效果图
最大值是64H(十进制的100),最小值为2EH(十进制的45)
实现代码
DATA SEGMENT
ARRAY DB 45,98,63,78,88,101,89,65,100
LEN EQU $-ARRAY
MIN DB ?
MAX DB ?
DATA ENDS
STACK SEGMENT
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
START:
MOV AX,DATA
MOV DS,AX
;初始化最大值最小值
MOV AL,ARRAY
MOV MAX,AL
MOV MIN,AL
MOV BX,1
MOV CX,LEN-1
LOOP1:
INC BX
MOV AL,DS:[BX];
call CMPMAX
call CMPMIN
LOOP LOOP1
JMP EXIT ;程序结束
CMPMAX:
CMP MAX,AL
JAE NEXT1
MOV MAX,AL
NEXT1:
ret
CMPMIN:
CMP MIN,AL
JBE NEXT2
MOV MIN,AL
NEXT2:
ret
EXIT:
MOV AX,4c00H
INT 21H
CODE ENDS
END START
实现效果
同学代码
.model small
.data ; 定义数据段的内容
a db 45, 98, 63, 78, 88, 101, 89, 65, 100
MAX db ?
MIN db ?
.code
start: ; 下面两条语句是将data段与数据段绑定
mov ax, @data
mov ds, ax
mov al, a
mov MAX, al
mov MIN, al
mov cx, 8
mov si, 1
s:
mov al, a[si]
cmp al, MAX
jbe next1
mov MAX, al
jmp short next2
next1:
cmp al, MIN
jae next2
mov MIN, al
next2:
inc si
loop s
mov ax, 4c00h
int 21h
end start
题目二
统计字变量 X 中的各位有多少个 1,并将结果存入到 NUM 单元中(假设
X=97B4H)
流程图
在每个循环体内,使用SHL指令左移X,并根据左移结果影响标志位的状态来判断当前位是不是1,如果是1,则BL+1;如果不是1,则continue
效果图
97B4H = 1001 0111 1011 0010,一共有9个1
实现代码
DATA SEGMENT
X DW 9780H
NUM DB 0
DATA ENDS
CODE SEGMENT
ASSUME DS:DATA,CS:CODE
START:
MOV AX,DATA
MOV DS,AX
MOV AX,X
MOV CX,16
LOOP1:
SHL AX,1
JNC NEXT1
INC NUM
NEXT1:
LOOP LOOP1
MOV AX,4c00H
INT 21H
CODE ENDS
END START
实现效果
同学代码
.model small
.data ; 定义数据段的内容
X dw 97B4h
NUM db 0
.code
start: ; 下面两条语句是将data段与数据段绑定
mov ax, @data
mov ds, ax
mov ax, X
mov cx, 16
s:
shl ax, 1
adc NUM, 0
loop s
mov ax, 4c00h
int 21h
end start