求最大值和最小值的汇编程序

要求从大于8个的数中选出最大值和最小值 必须用到子程序 菜鸟向大哥大姐求教

(一)MCS-51定点运算子程序库及其使用说明

定点运算子程序库文件名为DQ51.ASM,为便于使用,先将有关约定说明如下:

1.多字节定点操作数:用[R0]或[R1]来表示存放在由R0或R1指示的连续单元中的数据。地址小的单元存放数据的高字节。例如:[R0]=123456H,若(R0)=30H,则(30H)=12H,(31H)=34H,(32H)=56H。

2.运算精度:单次定点运算精度为结果最低位的当量值。

3.工作区:数据工作区固定在PSW、A、B、R2~R7,用户只要不在工作区中存放无关的或非消耗性的信息,程序就具有较好的透明性。

(25) 标号: MMS功能:求单字节十六进制有符号数据块的极值

入口条件:数据块的首址在DPTR中,数据个数在R7中。
出口信息:最大值在R6中, 地址在R2R3中;最小值在R7中,地址在R4R5中。
影响资源:PSW、A、B、R1~R7 堆栈需求: 4字节

MMS: MOV B,R7 ;保存数据个数
MOVX A,@DPTR ;读取第一个数据
MOV R6,A ;作为最大值的初始值
MOV R7,A ;也作为最小值的初始值
MOV A,DPL ;取第一个数据的地址
MOV R3,A ;作为最大值存放地址的初始值
MOV R5,A ;也作为最小值存放地址的初始值
MOV A,DPH
MOV R2,A
MOV R4,A
MOV A,B ;取数据个数
DEC A ;减一,得到需要比较的次数
JZ MMSE ;只有一个数据,不需要比较
MOV R1,A ;保存比较次数
PUSH DPL ;保护数据块的首址
PUSH DPH
MMS1: INC DPTR ;调整数据指针
MOVX A,@DPTR ;读取一个数据
MOV B,A ;保存
SETB C ;与最大值比较
SUBB A,R6
JZ MMS4 ;相同,不更新最大值
JNB OV,MMS2 ;差未溢出,符号位有效
CPL ACC.7 ;差溢出,符号位取反
MMS2: JB ACC.7,MMS4;差为负,不更新最大值
MOV R6,B ;更新最大值
MOV R2,DPH ;更新最大值存放地址
MOV R3,DPL
SJMP MMS7
MMS4: MOV A,B ;与最小值比较
CLR C
SUBB A,R7
JNB OV,MMS6 ;差未溢出,符号位有效
CPL ACC.7 ;差溢出,符号位取反
MMS6: JNB ACC.7,MMS7;差为正,不更新最小值
MOV R7,B ;更新最小值
MOV R4,DPH ;更新最小值存放地址
MOV R5,DPL
MMS7: DJNZ R1,MMS1 ;处理完全部数据
POP DPH ;恢复数据首址
POP DPL
MMSE: RET
温馨提示:内容为网友见解,仅供参考
无其他回答

汇编语言程序设计求数组的最小值、最大值,只求最小值或者只求最大值分 ...
cout<<"数组最小值个数为:"<<count<<endl;for(i=0; i<count; i++){ cout<<"第"<<i<<"个最小值坐标为:("<<pos[i].row<<","<<pos[i].col<<")"<<endl;} } void main(){ int arr[3][3]= {{5,5,7}, {4,5,4}, {3,2,2}};statics(arr, 3, 3);} ...

汇编语言 编写一个求最大值、最小值、总和的程序
MAX DB 0 ; 最大值 MIN DB 255 ; 最小值 SUM DB 0 ; 总和 .CODE NUM_STR PROC MOV AH, 0 MOV BL, 100 DIV BL MOV DX, AX MOV AH, 2 ADD DL, 30H INT 21H MOV AL, DH MOV AH, 0 MOV BL, 10 DIV BL MOV DX, AX MOV AH,...

用汇编语言编写若干个无符号数中的最大值和最小值
首先对10个数按从小到大排序,然后第一个元素就是最小的,最后一个元素就是最大的 data segment mes1 db 'the max:$'mes2 db 'the min:$'a dw 42,20,100,456,99,120,89,12334,90,1239 data ends code segment main proc far assume cs:code,ds:data start:push ds sub ax,ax push...

51单片机如何用汇编语言从十个数里选出最大值最小值
1、首先可以利用51单片机子程序输出找到的最大最小值。2、其次按照数据存储或者输入的顺序,把每2个数进行比较。3、最后每次比较都选择较大的数和下一个数据进行比较,这样最后一次比较中较大数就是10个数据里面的最大值。

求一段汇编程序,编制程序求一组数据中的最大数和最小数及其存放地址...
出口信息:最大值在R6中, 地址在R2R3中;最小值在R7中,地址在R4R5中。影响资源:PSW、A、B、R1~R7 堆栈需求: 4字节 MMS: MOV B,R7 ;保存数据个数 MOVX A,@DPTR ;读取第一个数据 MOV R6,A ;作为最大值的初始值 MOV R7,A ;也作为最小值的初始值 MOV A,DPL ;取第一个数据...

汇编语言,输入50个数求最大值最小值
include<stdio.h> int main (){ int max,min,i,x;scanf("%d",&x);max=min=x;for(i=1;i<50;i++){ scanf("%d",&x);if (x<min) min=x;if(x>max) max=x;} printf("max=%d\\nmin=%d\\t",max,min);return 0;}

汇编语言求一组无符号数中最大值和最小值的实验过程
MX JBE @1 MOV MX,AL JMP @2 @1: CMP AL,MN JAE @2 MOV MN,AL @2: INC SI LOOP @0 INT 3

使用MASM汇编语言设计工具,设计简单的汇编语言程序并进行运行调试_百度...
求数据块的最小值和最大值 1)实验内容 在以BUFFER为首址的内存中存放了若干个带符号数, 其个数存放在首单元,寻找出它们最大值放到存储单元MAXVAL中, 最小值放到存储单元MINVAL中。汇编语言源程序如下:DATA SEGMENT BUFFER DB 10,22,33,-80,127,-76,0,90,-45,60,-1 MIN...

大神帮个忙 用汇编语言求最大值最小值问题 数据为dw,12,4,55,32,26...
ax ;目前AX<BX,则AX比前面已经判断出的数还要小 loop2:cmp dx,ax ;下面是接着判断最大数:如果AX中的数比DX中的数大,则DX换成AX中的数 jnc loop3 ;mov dx,ax loop3:loop loop1 ...完成上述工作执行到这里时,BX中放的是最小数,DX中放的是最大数 ...

c语言中的数组怎么求最大值和最小值
include<stdio.h> int main(){ int a,b,c,max;printf("请输入三个数:\\n");scanf("%d%d%d",&a,&b,&c);if(a>b)max=a;if(c>max)max = c;printf("三个数中最大的数为:%d",max);return 0;}

相似回答