汇编语言求无符号字节序列中的最大值和最小值

设有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 ax

mov ax,data
mov ds,ax
;以下是起泡排序核心代码
mov cx,10
dec cx

loop1:
mov di,cx
mov bx,0
loop2:
mov ax,a[bx]
cmp a[bx+2],ax
jge cotinue
xchg ax,a[bx+2]
mov a[bx],ax

cotinue:
add bx,2
loop loop2
mov cx,di
loop loop1

mov dx,offset mes1
mov ah,09h
int 21h
call crlf
mov bx,a[18]
call bini ;转换为十进制的子程序

call crlf ;回车换行子程序
mov dx,offset mes2
mov ah,09h
int 21h
call crlf
mov bx,a[0]
call bini
ret
main endp

bini proc near
mov cx,10000d
call bin
mov cx,1000d
call bin
mov cx,100d
call bin
mov cx,10d
call bin
mov cx,1d
call bin
ret
bini endp

bin proc near
mov ax,bx
mov dx,0
div cx
mov bx,dx
mov dl,al
add dl,30h
mov ah,02h
int 21h
ret
bin endp

crlf proc near
mov dl,0ah
mov ah,02h
int 21h
mov dl,0dh
mov ah,02h
int 21
ret
crlf endp
code ends
end start
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-04-22
DATAS SEGMENT
s db '1234567890'
s1 db 'MAX: '
max db 0,'$'
s2 db 'MIN: '
min db 0,'$'
DATAS ENDS

CODES SEGMENT
ASSUME CS:CODES,DS:DATAS
START:
MOV AX,DATAS
MOV DS,AX
mov si,offset s ;初始化si,cx
mov cx,9 ;cx为定义的个数减一
mov bh,[si] ;第一个字符放入bh,bl
mov bl,bh
ss1: ;开始比较
inc si
mov al,[si]
cmp al,bh
jb ss2
mov bh,al ;al>bh 写入bh
jmp ss3
ss2:
cmp al,bl
ja ss3
mov bl,al ;al<bl 写入bl
ss3:
loop ss1
mov max,bh ;写入最大值
mov min,bl ;写入最小值

mov dx,offset s1 ;显示最大值
mov ah,9
int 21h

mov dl,' ' ;显示空格
mov ah,2
int 21h

mov dx,offset s2 ;显示最小值
mov ah,9
int 21h

mov ah,0 ;等待键盘输入
int 16h

MOV AH,4CH
INT 21H
CODES ENDS
END START本回答被提问者采纳
第2个回答  2013-04-22
STACK1 SEGMENT STACK
DW 64 DUP(?)
STACK1 ENDS
CODE SEGMENT
ASSUME CS:CODE
START: MOV SI,3000H
MOV CX,0008H
CALL branch
INT 03H
branch: JCXZ A4
PUSH SI
PUSH CX
PUSH BX
MOV BH,[SI]
MOV BL,BH
A1: LODSB
CMP AL,BH
JBE A2
MOV BH,AL
JMP A3
A2: CMP AL,BL
JAE A3
MOV BL,AL
A3: LOOP A1
MOV AX,BX
POP BX
POP CX
POP SI
A4: RET
CODE ENDS
END START

第3个回答  2013-04-23
;从键盘接收任意字符。

ASSUME CS:CODE, DS:DATA
DATA SEGMENT
MSG1 DB 'Please input some chars: $'
MSG2 DB 13, 10, 'The biggest char is: <'
BIG DB ' ', '>'
DB 13, 10, 'The smallest char is: <'
MIN DB 127, '>$'
NNN DB 0
DATA ENDS
CODE SEGMENT
START:
MOV AX, DATA
MOV DS, AX
;------------------------------
MOV DX, OFFSET MSG1
MOV AH, 9
INT 21H
M_LOOP:
MOV AH, 1
INT 21H
CMP AL, 13
JE DISP
INC NNN
CMP AL, DS:[BIG]
JB NEXT
MOV DS:[BIG], AL
NEXT:
CMP AL, DS:[MIN]
JNB M_LOOP
MOV DS:[MIN], AL
JMP M_LOOP
DISP:
CMP NNN, 0 ;输入 0 个吗 ?
JE EXIT ;是则退出,不予显示
MOV DX, OFFSET MSG2
MOV AH, 9
INT 21H
;------------------------------
EXIT:
MOV AH, 4CH
INT 21H
CODE ENDS
END START

本程序执行后,显示如下:

Please input some chars: 1357924680
The biggest char is: <9>
The smallest char is: <0>

本程序,没有使用 BH、BL,而是使用了存储器变量 BIG、MIN。
效果是相同的。

因为,BH 等8位的寄存器,仅仅有八个,经常不够用。
存储器变量,则可以定义 65535 个。
这样,程序就更有通用性。

使用ARM汇编伪指令编程:分别将两个无符号数放在寄存器R0和R1中,求...
当地址值是16字节对齐时,其取值范围将更大 在汇编编译器处理源程序时,ADR伪指令被编译器替换成一条合适的指令。通常,编译器用一条ADD指令或SUB指令来实现该ADR伪指令的功能。因为ADR伪指令中的地址是基于PC或者基于寄存器的,所以ADR读取到的地址为位置无关的地址。当ADR伪指令中的地址是基于PC时,...

汇编语言 求解
1、已知AX=0FF60H,CF=1 MOV DX,96 XOR DH,0FFH SBB AX,DX 执行上述指令序列后,AX=_ffffh,CF=__1 2、设寄存器AL,BL,CL中内容均为76H,XOR AL,0FH AND BL,0FH OR CL,0FH 执行上述指令序列后,AL=__79h BL=___06h___,CL=___7fh___3、已知AX=0A33AH,DX=0F0F0H ...

内存都是按照字节编制的吗?
请编制汇编语言程序,功能是:内存中连续存放着二个无符号字节序列A(k)和B(k)(k=0,…,9;下同),求序列C(k),C(k)=A(k)+B(k)。C(k)以字的形式按C(0),…,C(9)的顺序 连续存放。例如:序列A(k)为30H,31H,61H,FFH,…;序列B(k)为00H,01H,F1H,0AH,…。则结果C(k)为003...

汇编语言高手进,急用,在线等答案!请确保答案的正确性!
LOOP L1 ;要不直接用80386+指令最快 SHLD DX,AX,4 (6).;这里我只把DX变为正数,因为DX和AX组成双字数是吧 TEST DX,10000000B JZ NEXT NEG DX NEXT:

汇编语言程序设计题
6、编写汇编语言源程序: 设在字单元A、B和C中存放有三个数,若三个数都不为0,则求出三个数之和存入字单元D中,若有一个为0,则将其他两个单元也清零。 已赞过 已踩过< 你对这个回答的评价是? 评论 收起 沙崖思Hm 2006-11-19 · TA获得超过1595个赞 知道小有建树答主 回答量:430 采纳率:0...

汇编语言实验 分支程序设计
INT 21H ENDM DATA SEGMENT USE16 BUF1 DB 60 DB ?DB 60 DUP(?)BUF2 DB 60 DB ?DB 60 DUP(?)STR1 DB 0DH,0AH,'$'STR2DB 'success!$'STR3DB 'Your telephone number is not match, please try again.$'STR4 DB 'Please input ...

汇编语言复习题求答案
上述程序段运行后RES中的值=0 程序段如下:试回答:如从键盘输入字符‘4',程序段有什么结果?显示“D”编程题 1.cseg segment assume cs:cseg begin:mov ah,1 int 21h and al,0dfH mov dl,al mov ah,2 int 21h mov ah,4ch int 21h cseg ends end begin 2.dseg segment num db 20 ...

一个字节等于多少位
1、ASCII码中,一个英文字母(不分大小写)占一个字节的空间,一个中文汉字占两个字节的空间。一个二进制数字序列,在计算机中作为一个数字单元,一般为8位二进制数,换算为十进制。最小值0,最大值255。2、UTF-8编码中,一个英文字符等于一个字节,一个中文(含繁体)等于三个字节。3、Unicode...

汇编语言中 MOV AX,[0100H]+2 和 MOV AX, [0100H+2]两种写法效果一样吗...
汇编语言2005—2006学年第二学期期末考试复习题及参考答案一、填空1.十进制数369转换成二进制数为(101110001)2,转换成十六进制数为(171)16.2.计算机中的指令由(操作码)和(地址码)两部分组成。3.8086的地址总线有20根,寻址范围为(1M)字节。4.下一条将要执行的指令的地址存放在寄存器(指令指针寄存器)中。5.写出...

怎么用汇编语言将数字组成的字符串转换成数值
d2: PUSH AX (将AX压栈,保护AX中的值)SUB BYTE PTR [SI],DL (由于字符是ASCII码表示的,因此减去30H后即可转换为十六进制数)MUL BYTE PTR [SI]ADD w,AX (year是前面定义的用来保存数值的字型量。即w DW 0)POP AX (上一步将数值保存到w中,这步AX出栈...

相似回答