微机原理课程上机实验之一
题目:
从偏移地址 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