实验5 子程序与条件转移

1. 实验目的

会利用条件转移指令循环和控制结构解决问题

训练程序中要加注释

2. 实验内容

任务1-求最大值

  在BUFFER处给出了多个无符号数,请找出其中的最大值,放至MAX指定的存储单元中。

data  segment
buffer dw 35098, 17758, 54582, 61504, 46054, 58513, 4409, 7902, 14255
dw 40623, 47645, 15575, 51572, 18110, 26511, 14880, 5921, 31999
dw 2893, 21056, 16574, 147, 25532, 33336, 5251, 64269, 31514, 23670
dw 53335, 49581, 57895, 25689, 51697, 58198, 27548, 54151, 41373
dw 44382, 23511, 39326, 56955, 51911
max dw ?
data ends

  已知标号为BUFFER的数组后直接就是标号为MAX的单元,数组中元素的个数由程序计算,不得人工数。

  要求在程序中给出足够多的注释。

  给定的数据中,最大者为64269(FB0DH)。

参考解答

​任务2-成绩统计​

  下面提供了100名同学AS课成的成绩,请编程序统计其中90~100、60~89、60以下者各有多少人?并把结果连续存放到自RESUT开始的单元中。

data segment
buf db 85, 72, 79, 90, 79, 54, 63, 66, 83, 79, 71, 77, 77, 65, 89, 93
db 69, 96, 72, 98, 60, 78, 69, 68, 80, 65, 91, 64, 90, 90, 64, 90
db 99, 55, 84, 56, 80, 54, 55, 66, 53, 54, 83, 61, 52, 92, 66, 51
db 95, 81, 51, 100, 70, 65, 50, 74, 91, 57, 95, 66, 54, 50, 73, 59
db 78, 80, 92, 78, 89, 78, 99, 100, 82, 92, 59, 71, 74, 81, 93, 74
db 98, 57, 57, 96, 76, 79, 57, 67, 52, 84, 87, 54, 67, 72, 59, 75
db 64, 89, 77, 80
resut db 3 dup(0)
data ends

  要求在程序中给出足够多的注释。

参考解答

​任务3-保留字符串中的大写字母​

  在数据区,给定用0作为结束的字符串,请补充完成子程序,只保留字符串中的大写字母,并在最后一个大写字母后记录0作为所有大写字母构成的新字符串的结束。(以下面程序数据区中给出的字符串,最后得到的字符串为YTU后加0)

assume cs:cseg, ds:dseg, ss:sseg
sseg segment stack
dw 100h dup (?)
sseg ends
dseg segment
db 'YanTai University 264005', 0
dseg ends
cseg segment
start: mov ax, dseg
mov ds, ax
mov ax, sseg
mov ss, ax
mov sp, 100h

mov bx, 0
call getUpper

mov ax, 4c00h
int 21h

;子程序名:getUpper
;功 能:对从DS:bx开始,以0结束的字符串,只保留大写字母,并仍以0结束
;入口参数:DS和BX寄存器中保存字符串的起始地址
;出口参数:无
getUpper proc
; 在这里写出你的代码
ret
getUpper endp
cseg ends
end start

参考解答

​任务4:冒泡排序(选做)​

  在数据区,给出了学生人数及汇编语言课程的成绩,请将成绩排序并保存在原数据区。

  下面给出部分代码,要求完成排序子程序。

  程序中给出的数据段,包括20位同学的成绩,每名同学的数据占1字节。

参考程序段:

assume cs:cseg, ds:dseg, ss:sseg
sseg segment stack
dw 100H dup (?)
sseg ends
dseg segment
db 20
db 98,61,57,82,89,73,61,58,53,54
db 84,78,70,64,84,63,76,84,83,86
dseg ends
cseg segment
start: mov ax, dseg
mov ds, ax
mov cl, ds:[0]
mov ch, 0 ;cx中存储要排序数的个数
mov bx, 1 ;要排序数的起始偏移地址
call sort

mov ax, 4c00h
int 21h
;子程序名:sort
;功 能:对从(DS):(bx)开始的(cx)个字节排序
;入口参数:(DS):(BX)保存数据的起始地址
; (cx)中是要排序的数据个数
;出口参数:无
sort proc
;这儿写子程序
sort endp

cseg ends
end start

参考解答