汇编语言--------求n个数的最大值、最小值和它们的和

微机原理课程上机实验之一

题目:

      从偏移地址 TABEL 开始的内存区中,存放着 20 个字节型无符号数,要求将它们进行累加,并将累加和的低位存入sum 单元,高位存入 sum+1 单元;同时,将这20个数的最小值存入 min 单元,最大值存入 max 单元。

 

     已经在DOSBOX/Emu8086 下正确运行过了

     详见注释

DATA SEGMENT
	table DB 200,201,202,203,204,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20
	;table DB 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20	
	min DB 0
	max DB 0
	sum DW 0
DATA ENDS
CODE  SEGMENT
	  ASSUME CS:CODE,DS:DATA
start:
	mov AX,DATA  ;段地址不能被直接访问,只能被寄存器访问
	mov DS,AX
;------------------------------	求最大值
	mov bx,0;offset table
	mov al,[bx];al min
	mov ah,[bx];ax max
	inc bx
	mov cx,19
lp1:
	cmp al,[bx]
	jae	els1     ;>=
	mov al,[bx]
els1:
	inc bx
	LOOP lp1
	mov max,al
;-------------------------------求最小值
	mov cx,19
	mov bx,1
lp2:
	cmp ah,[bx]
	jbe els2
	mov ah,[bx]
els2:
	inc bx
	loop lp2

	mov min,ah
;-----------------------
	lea	BX,table		
	mov cx,20     
	mov ax,0
	clc
lp3:
	add  al,[bx]    	
    jnc	 GOON     
   	inc  ah      
GOON:
	inc  bx      ;地址指针加1 
	dec	 cx      	;计数值减1 
	jnz  lp3     	;如(CL)≠0,转移到LP 
	mov	 sum,ax     ;否则,(SUM)←(AL),(SUM+1)←(AH) 
	mov	ah,4CH
	int 21H 
CODE ENDS
END start

运行结果:

因为这个程序并没有输入,所以要看到结果需要debug 本程序的exe文件,然后看到了最后的内存的值

我是让程序执行到了最后,画灰色线的那一句mov sum,ax,也就是把求和的值赋给了sum单元

至此,最大值,最小值还有和都已经求出来了

可以看到,因为程序定义的是min,max,sum是靠在一起的,并且就在table数组后面,所以红色圈圈出来的就是结果,但是是16进制表示的min=06H,max=CCH,sum=4B5H

对应我们定义的table数组

最小值是6

最大值是204=CCH

和是1205=4B5H

©️2020 CSDN 皮肤主题: 技术黑板 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值