用汇编语言求三个数的中间大小的数并输出。

如题所述

(24) 标号: MM 功能:求单字节十六进制无符号数据块的极值

入口条件:数据块的首址在DPTR中,数据个数在R7中。
出口信息:最大值在R6中,地址在R2R3中;最小值在R7中,地址在R4R5中。
影响资源:PSW、A、B、R1~R7 堆栈需求: 4字节
MM: 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 MME ;只有一个数据,不需要比较
MOV R1,A ;保存比较次数
PUSH DPL ;保护数据块的首址
PUSH DPH
MM1: INC DPTR ;指向一个新的数据
MOVX A,@DPTR ;读取这个数据
MOV B,A ;保存
SETB C ;与最大值比较
SUBB A,R6
JC MM2 ;不超过当前最大值,保持当前最大值
MOV R6,B ;超过当前最大值,更新最大值存放地址
MOV R2,DPH ;同时更新最大值存放地址
MOV R3,DPL
SJMP MM3
MM2: MOV A,B ;与最小值比较
CLR C
SUBB A,R7
JNC MM3 ;大于或等于当前最小值,保持当前最小值
MOV R7,B ;更新最小值
MOV R4,DPH ;更新最小值存放地址
MOV R5,DPL
MM3: DJNZ R1,MM1 ;处理完全部数据
POP DPH ;恢复数据首址
POP DPL
MME: RET
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-09-15
程序要自己写 问别人的不是自己的

c语言编写程序求3个数中最大的数。
printf("三个数中最大的数为:%d",max);return 0;}

编写一个C程序,输入a,b,c三个值,输出其中最大者
printf("三个数中最大的数为:%d",max);return 0;}

汇编语言题:分别输入3个小于99的两位十进制数,把其中数值位于中间的数用...
include "stdio.h"include <stdio.h> include <stdlib.h> void main(){ int a,b,c;char ch[33];printf("请分别输入三个数a,b,c,用空格隔开:");scanf("%d%d%d", &a,&b,&c);itoa(b, ch, 2);printf("%d的二进制表达是: %s\\n",b,ch);} ...

编写一个程序 运行时输入a,b,c三个值 输出其中最大者
printf("三个数中最大的数为:%d",max);return 0;}

用汇编语言比较三个位数的大小,如果三个数相等 输出等号,如果三个不同...
题目:1试编写一个汇编语言程序,要求从键盘接收三个16进制数,并根据对三个数的比较显示出如下信息:(1)如果三个数都不相等则显示ALL NOT EQU;(2)如果三个数有两个数相等则显示TWO EQU;(3)如果三个数都相等,则显示ALL EQU。程序:data segment string1 db 16 dup(?)string2 db...

51汇编实现比较三个数的大小并排序
51单片机实现比较三个数的大小,并将数由小到大分别存入40H、41H、42H单元中ORG 0000H AJMP MAIN ORG 0100H MAIN: MOV 30H,#98H MOV 31H,#88H MOV 32H,#78H MOV A,30H CJNE A,31H,COMP1COMP1: JC B1 CJNE A,32H,COMP2COMP2: JC A1 MOV 42H,30H MOV A,31H CJNE A,32H,A2A2: JC A3 ...

用传统流程图表示 有三个数abc,要求按大小顺序把它们输出
先选择一个中间值如t或者k,这里以t为例。接着依次比较a,b,c ;先比较a、b的值,若a大于b,,则用t把a和b进行交换;然后比较a、c的值,若a大于c,则用t把a和c的值进行交换;最后比较b、c的值,若b大于c,则用t把b和c的值进行交换; 接着就可以按照从小到大的顺序依次输出啊a,b...

怎样用汇编语言实现比较三个数的大小?
题目:1试编写一个汇编语言程序,要求从键盘接收三个16进制数,并根据对三个数的比较显示出如下信息:(1)如果三个数都不相等则显示ALL NOT EQU;(2)如果三个数有两个数相等则显示TWO EQU;(3)如果三个数都相等,则显示ALL EQU。程序:data segment string1 db 16 dup(?)string2 db...

有三个数abc,要求按由大到小的顺序把它们打印出
有三个数abc,要求按由大到小的顺序把它们打印出来,用流程图这样表示:先输入a, 再输入b 。如果a >b,则出a 。再输入c, 如果a >c 则输出a ;再输入b,如果b >c ,输出b ,则a>b>c 流程图(Flow Chart):使用图形表示算法的思路是一种极好的方法,因为千言万语不如一张图。流程图在...

请问如何输出3个数的大小顺序?
输入三个整数,要求按从小到大的顺序输出。解题思路:此题采用依次比较的方法排出其大小顺序。include <stdio.h> main(){int a,b,c,t;printf("input three number please;");scanf("%d,%d,%d",&a,&b,&c);if (a>b){ t=b;b=a;a=t;} if (a>c){t=c;c=a;a=t;} if (b>c)...

相似回答