用汇编语言求一组数的最大值和最小值

首先对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
汇编语言是一种低级编程语言,它直接操作计算机硬件,对内存CPU指令有精细控制。编写一个简单的汇编程序来计算一组字的平均值、最大值最小值,需要以下几个步骤: 1. **据存储**:首先,你需要将用户输入字存储在一个组或内存区域,通常使用堆栈或寄存器。 2. **读取输入**:通过系统的输入功能,从键盘或其他设备获取一串字,并将其逐个转换为值存入组。 3. **初始化变量**:设置一个临时变量用于计算总(例如,`sum`),以及两个变量用于跟踪当前的最大值(`max`)最小值(`min`),初始值可以设为组的第一个元素。 4. **遍历组**:使用循环结构(如`for`或`while`)访问组中的每个元素,累加到`sum`上,同时更新`max``min`的值。 5. **计算平均值**:遍历结束后,除`sum`以组长度得到平均值。如果组为空,则可能需要额外处理这种情况。 6. **显示结果**:将平均值、最大值最小值输出给用户,这通常涉及到向屏幕或者其他输出设备发送相应的内容。 以下是伪代码形式的大致结构: ``` ; ...其他初始化变量声明... read_input: ; 从键盘读取字并存储到组 average_max_min: mov cx, [array_length] ; 使用计器cx遍历组 mov ax, [array[0]] ; 初始化sum为第一个元素 mov bx, [array[0]] ; 初始化max为第一个元素 mov dx, [array[0]] ; 初始化min为第一个元素 loop_start: add ax, [array + cx] ; 累加到总 cmp [array + cx], bx ; 如果当前元素大于max,更新max jge max_check mov bx, [array + cx] max_check: cmp [array + cx], dx ; 如果当前元素小于min,更新min jle min_check mov dx, [array + cx] min_check: loop loop_start ; 减少计器继续下一次迭代 divide_sum: cdq ; 如果需要,将ax转为32位计算平均值 idiv cx ; sum / count = average display_results: ; 输出平均值、最大值最小值... ret ; 结束函 ``` 请注意,以上代码只是一个基本的框架,具体的细节会因使用的汇编语言(如x86、ARM等)而有所不同。实际编写时需查阅对应的汇编指令集文档。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值