【汇编程序】给定的个数的数据中寻找最大值,放到max存储单元中—循环结构

程序需求:在给定的个数的数据中寻找最大值,放到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

 

你可能感兴趣的:(#,微机原理汇编程序)