程序需求:在给定的个数的数据中寻找最大值,放到max存储单元中
编程思路:首先定义一个数据段 用buf来存放一串数据 count变量用来获取到多少个数据,($-buf)/2 获取数据的个数
定义一个堆栈段 先占用100个存储空间,length获取到空间的大小。
程序段对段地址和偏移地址进行声明,因为循环我们使用的是cx的值来判断 循环的次数,因此 用获取到数据的个数 赋值给cx值,然后先将buf中第一个元素的值赋值给ax,bx用来最基址变址寻址,cmp ax,[bx] 判断 下一个数字是否 大于这个数字。jge如果大于 说明[ax]中的数值大于[ax+1]中的数值,因此将程序继续向下执行,直到程序执行到比[bx]这个数大的数,就跳出循环 将此时bx中的内存单元的值 赋值给max 程序执行完毕
;在循环程序中,常用计数器如CX寄存器控制循环次数,先将计数器置一个初值 用来表示循环操作的次数
;每执行一次 计数器减1 减到0为止 表示循环结束
;程序需求:在一串给定的个数的数据中寻找最大值,存放到MAX存储单元中
data segment ;数据段
buf dw 1234h,3200h,4832h,5600h ;一串字数据
count equ ($-buf)/2 ;数据个数 该语句的含义是定义一个常量count 其大小为从当前地址$到buf的一半 就是将数据的个数赋值给他
max dw ? ;用来存储程序要放置的最大的数
data ends
stack segment 'stack' ;堆栈段
stapn db 100 dup(?)
top equ length stapn ;变量的单元数 type 是变量的类型 size 返回变量的总字数
stack ends
code segment
main proc far
assume cs:code,ss:stack
start:mov ax,stack ;设置堆栈段
mov ss,ax
mov sp,top
push ds
sub ax,ax
push ax
mov ax,data; 设置数据段
mov ds,ax
mov cx,count ;字符个数(循环次数)
lea bx,buf ;bx- buf的偏移地址
mov ax,[bx] ;ax-缓存器中取一个数
dec cx; 循环次数减一
again:inc bx ;修改地址指针
cmp ax,[bx] ;ax与后取的数相比
jge next
mov ax,[bx]
next:loop again
mov max,ax
ret
main endp
code ends
end main