s7 dw 0 s8 dw 0 s9 dw 0 s10 dw 0 datarea ends
;************************************ prognam segment ;define code segment ;----------------------------
main proc far ; main part of program assume cs:prognam, ds:datarea
start: ; starting execution address ; set up stack for return
push ds ; save old data segment sub ax,ax ; put zero in AX push ax ; save it on stack ; set DS register to current data segment
mov ax,datarea ; datarea segment addr mov ds,ax ; into DS register ; MAIN PART OF PROGRAM GOES HERE
mov s5, 0 ; initialize counter mov s6, 0 mov s7, 0 mov s8, 0 mov s9, 0 mov s10, 0
mov cx, 10 ; initialize loop count value mov bx, offset grade ; initialize first addr compare:
mov ax, [bx] ; get a result cmp ax, 60 ; <60? jl five
cmp ax, 70 ; <70? jl six
cmp ax, 80 ; <80? jl seven
cmp ax, 90 ; <90? jl eight
cmp ax, 100 ; =100? jne nine inc s10
21
jmp short change-addr nine: inc s9
jmp short change-addr eight: inc s8
jmp short change-addr seven: inc s7
jmp short change-addr six: inc s6
jmp short change-addr five: inc s5 change-addr:
add bx, 2 loop compare
ret ; return to DOS
main endp ; end of main part of program ; ------------------------------ prognam ends
;*************************** end start ; end assembly
五、实验要求
1.读懂所给的程序。
2.编写程序将存放于S5、S6、S7、S8、S9及S10单元中的数据在屏幕上显示出来。
22
实验六 子程序设计
一、实验目的 二、实验原理
学生成绩名次表实验:将0~100之间的10个成绩存入首址为1000H的单元中。1000H+i表
示学号为i的学生成绩,编写程序能在2000H开始的区域排出名次表。2000H+i为学号i的学生的名次。 参考主程序:
入口 段寄存器和堆栈初始化 显示“请输入10个学生的成绩” SI指向成绩表首址 学生数送CX 调GETNUM,读学生成绩送[SI]中 SI加1指向下一单元 CX减1为0? N Y 学生数送CX DI指向名次表首址
计算名次填入DX学号 对应的名次表单元 CX 减 1 为 0 ? N N 调SCAN子程序,扫描成绩表
进一步熟悉排序方法。
Y 调DISP1,显示 排定的学生名次
23 程序SCAN:
返回 DOS 入口 CX入栈保存 学生数送CX AL中放最低成绩00H BX和SI均指向成绩表首址 AL≥[SI]? Y N [SI]送AL中,DX记录对应学号 SI加1指向下一单元 Y 将本次扫描成绩最高者清0
CX 出栈 返 回 N CX减1为0? 三、实验仪器
1. IBM-PC 微机或兼容机一套。
2. 准备一张已格式化过的用户软盘(空盘),用于存放你的程序。
四、实验步骤
输入编写的实验程序,进行调试。 参考程序:
CRLF MACRO
MOV AH, 02H MOV DL, 0DH INT 21H MOV AH, 02H
MOV DL, 0AH INT 21H ENDM
DATA SEGMENT
24
相关推荐: