汇编中求给定数中的最大值(或最小值),放至指定的存储单元中。每个数用16位表示
NAME SEARCH_MAX
DATA SEGMENT
BUFFER DW X1,X2,...Xn ;定义一个一组数为字型数16位
COUNT EQU $-BUFFER
MAX DW ? ;为那个最大数预留空间
DATA ENDS ;数据段结束
STACK SEGMENT PARA STACK ‘STACK’
DB 64 DUP(?) ;给堆栈段分配64个字节,没有说明内容
TOP EQU $-STACK
STACK ENDS ;堆栈段定义结束
CODE SEGMENT
START PROC FAR ;定义为一个远过程
ASSUME CS:CODE,DS:DATA,SS:STACK
BEGIN: PUSH DS
MOV AX,0
PUSH AX
MOV AX,DATA
MOV DS,AX ;将AX寄存器的内容存放到DS段寄存器中
MOV AX,STACK
MOV SS,AX ;SS存放栈的段地址
MOV AX,TOP
MOV SP,AX;存放栈的偏移地址,指向栈的顶部
MOV CX,COUNT ;用CX作为循环的计数器
LEA BX, BUFFER ;将BUFFER 的地址存放到BX寄存器中
MOV AX ,[BX] ;将BX所在的地址存放的内容放至AX寄存器中
INC BX ;使BX的地址每次都向后一位,用于比较下一次
DEC CX ;循环每次减一
AGAIN: CMP AX,[BX];用于比较AX寄存器中的内容和BX所在地址的内容大小
JGE NEXT; 如果结果大于或等于0则跳转到下一个循环
MOV AX,[BX] ;若结果小于它,则交换两个寄存器的内容
NEXT: INC BX ;指向下一个地址
LOOP AGAIN ;循环一次就减一次
START ENDP ;这个过程结束
CODE ENDS ;代码段到此结束
END BEGIN ;整个程序到此结束
SS, SP, BP 三个寄存器
SS:存放栈的段地址;
SP:堆栈寄存器SP(stack pointer)存放栈的偏移地址;
BP: 基数指针寄存器BP(base pointer)是一个寄存器,它的用途有点特殊,是和堆栈指针SP联合使用的,作为SP校准使用的,只有在寻找堆栈里的数据和使用个别的寻址方式时候才能用到
比如说,堆栈中压入了很多数据或者地址,你肯定想通过SP来访问这些数据或者地址,但SP是要指向栈顶的,是不能随便乱改的,这时候你就需要使用BP,把SP的值传递给BP,通过BP来寻找堆栈里数据或者地址.一般除了保存数据外,可以作为指针寄存器用于存储器寻址,此时它默认搭配的段寄存器是SS-堆栈段寄存器.BP是16位的,再扩充16位就是EBP,用于32位编程环境的.一般高级语言的参数传递等等,转换为汇编后经常由BP/EBP来负责寻址\处理.
SP,BP一般与段寄存器SS 联用,以确定堆栈寄存器中某一单元的地址,SP用以指示栈顶的偏移地址,而BP可 作为堆栈区中的一个基地址,用以确定在堆栈中的操作数地址。