BUFFER处给出了多个无符号数,请找出其中的最大值,放至MAX指定的存储单元中
1,
1,这个代码有缺陷,是在知道有几位数的时候才可以用,提前定了cx寄存器的值
(1),流程图
(2),代码
assume cs:code
,ds:data
data segment
buffer dw 2,8,54,6,9,37,32
max dw ?
data ends
code segment
start :
mov ax,data
mov ds,ax
mov bx,0
;设置最小数0
mov si,0
;第一个数的地址
mov cx,7 ;七个数共7次比较
s0:
mov ax,[si] ;将要比较的数放入ax寄存器中
cmp ax,bx ;进行比较
jna s1 ;如果进行比较的数比bx中的数小,则进行下一个数的比较
mov bx,ax ;如果进行比较的数比bx中的数大,则进行置换
s1:
add si,2 ;比较的数小跳到这个循环,进行下一个数的比较
loop s0
over: mov max,bx ;将最大数放入max指定的存储单元
mov ax,4c00h
int 21h
code ends
end start
2,
在学过了shr指令后,可以在不知道多少个数进行比较时进行编程
`代码中用到了shr指令,该指令是逻辑右移指令,右移一位相当于将数据整除2;
与之对应的是shl指令,此指令是逻辑左移指令,左移一位相当于将数据乘2!
由于使用的时字节位,一个数据占用两个地址,就可以用到shr指令
mov cx,offset max-offset buffer;数据区内存单元的个数
shr cx,1;cx右移一位,得到字型数据的个数,即数组中元素的个数