实验七 单重循环程序设计 (2学时)
【实验目的】
1.掌握单重循环程序设计的方法 2.掌握正确分配与使用寄存器。 3.掌握控制循环的方法。
【实验内容】
1、编制程序实现将LIST数组中的最大值存入MAX单元,并在屏幕上显示最大值,数组元素为无符号字数据,数据个数在CNT单元中。 【分析】:根据题意,可把第一个数先放入AX寄存器,将AX中的数与后面的CNT-1个数进行比较,如果AX中的数较小,则两数交换位置;如果AX中的数大于等于相比较的数,则两数不交换位置,在比较过程中,AX始终保持较大的数,比较CNT-1次,则最大者必在AX中,最后把AX中的数送入MAX单元。
参考程序:(请同学们补充显示程序段) DATAS SEGMENT
out1 db 10 dup(?)
list dw 10,59,421,6,8 ;此处输入数据段代码 cn dw ($-list)/2 max dw ?
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码 STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS START:
MOV AX,DATAS MOV DS,AX
lea si,list;此处输入代码据段代码 mov cx,cn mov ax,[si] dec cx add si,2 a1:cmp ax,[si]
jae small mov ax,[si]
33
small:
add si,2 loop a1 mov max,ax lea si,out1+3 next:
mov dx,0 mov bx,10
div bx;(ax)=商,(dx)=余数 or dl,30h
mov out1[si],dl dec si cmp ax,0 jnz next
mov out1+4,byte ptr'$' lea dx,out1 mov ah,9 int 21h MOV AH,4CH INT 21H CODES ENDS
END START
运行结果 421
2、设有N个数,连续存放在以BUF为首址的字存储区中。试编写程序,统计其中最高6位为全1的数的个数,并将统计结果送入屏幕显示。 DATAS SEGMENT
buf dw 5678,5946,0fc41h,1234;此处输入数据段代码 cn dw ($-buf)/2 DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码 STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS START:
MOV AX,DATAS MOV DS,AX
lea si,buf;此处输入代码据段代码 mov cx,cn mov dl,0 poa:mov ax,[si]
34
and ax,0fc00h cmp ax,0fc00h jnz next
inc dl;(统计高6位为1) next:add si,2 loop poa mov al,dl mov ah,0