NEXTB: ADD DI , 6 JMP LOOPB
NEXTA: MOV [SI+4],DX;名次填入登记表中相应位置
ADD _______ , 6 JMP _________
NEXT:MOV AX , _______
INT 21H CODE ENDS
END START
DATAS SEGMENT
ENGLI DW 01H,188H ,0,02H,175H,0,03H,195H,0,04H,163H,0,05H,198H,0 DW 06,178H,0,07H,187H,0,08H,173H,0,09H,190H,0,0AH,160H,0,-1,-1 ;此处输入数据段代码 DATAS ENDS
STACKS SEGMENT
STA DB 200 DUP (20H) TOP EQU $ - STA
;此处输入堆栈段代码 STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS START:
MOV AX,DATAS MOV DS,AX
MOV AX , STACKS MOV SS , AX MOV SP , TOP LEA SI, ENGLI MOV BX , 0
LOOPA : MOV DX , 1
CMP [SI],WORD PTR -1;检查所有学生的名次处理完否 JE NEXT
MOV CX,[SI+2] ;欲求名次考生的分数送CX LEA DI,ENGLI+2
LOOPB: CMP [DI],WORD PTR -1;检查表查完否 JE NEXTA CMP CX , [DI] JAE NEXTB
INC DX;名次加1 NEXTB: ADD DI , 6 JMP LOOPB
41
NEXTA: MOV [SI+4],DX;名次填入登记表中相应位置 ADD SI, 6
JMP LOOPA;显示学号和名次 NEXT: LEA SI, ENGLI
p1: mov ax,[si]
CMP [SI],WORD PTR -1 JE NEXT123 mov bx,ax MOV CL,4 and al,0f0h SHR AL,CL cmp al,0AH jb p2
add al,7 p2:
or al,30h mov dl,al mov ah,2 int 21h and bl,0fh cmp bl,0AH jB p3
add bl,7 p3:
or bl,30h mov dl,bl mov ah,2 int 21h add si,4 mov dl,' ' mov ah,2 int 21h mov ax,[si]
CMP [SI],WORD PTR -1 JE NEXT123 mov bl,10 div bl; mov bh,ah or al,30h mov dl,al mov ah,2
42
int 21h or bh,30h mov dl,bh mov ah,2 int 21h add si ,2 mov dl,' ' mov ah,2 int 21h jmp p1 NEXT123: MOV AX ,4C00H INT 21H
;此处输入代码据段代码
CODES ENDS
END START 实验结果
CODES ENDS
END START调试运行时,请调用DEBUG程序查看运行结果并记录每步运行结果。
【预习要求】
1.仔细阅读课本及相应教材。
2.参照程序框图编制源程序,准备好多组运算数据,以供校验。
【实验步骤】
43
1、确定算法,画出程序流程图。 2、利用文本编辑程序,建立源文件。
3、利用汇编程序MASM对源程序汇编,形成目标文件 4、利用LINK对目标文件进行链接,形成可执行文件。 5、键入程序 ,调试运行 , 若未出现预期结果 ,用 DEBUG 检查有否错误 。
【思考题】
1、 某一个数列实验
【实验目的】掌握用汇编语言编写某一个数列的思路和方法 【实验内容】程序接收用户键入的N值(N=1~~99) 该数列具有下述功能 FIB(1)=1 FIB(2)=1
FIB(N)=FIB(N-2)+FIB(N-1) 程序输出FIB(N)的值
【分析】:1)输入部分,程序接收用户键入的n值,把此值存入NUM单元中. 2)计算FIB(N)的值,该值存放入RES单元中.
3)输出部分,把RES中的运行结果经过二进制转化为十进制后在屏蔽上显示出来.调试运行时出错,调用DEBUG程序查看运行结果并记录每步运行结果。
2 、从 DATA_BUF(1000H) 开始存放 50 个字节数据,编写程序将这些数据由小到大排序,排序后的数据仍放在该区域中。 要求原始数据在源程序中给出,排序前后的数据以每行 10 个的格式显示在屏幕上。 所用的数据如下:
stack segment para stack 'stack db 1024 dup (?) stack ends
data segment para 'data'
data_buf db 50,49,48,47,46,45,44,43,42,41 db 40,39,38,37,36,35,34,33,32,31 db 30,29,28,27,26,25,24,23,22,21 db 20,19,18,17,16,15,14,13,12,11 db 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 msg1 db 'Raw Data:', 0dh, 0ah, '$' msg2 db 'Sorted Data:', 0dh, 0ah, '$' data ends
【实验报告要求】
1、记录实验步骤和出现的现象,按照要求写出显示结果,源程序加上注释。 2、比较实验记录和理论分析的结果是否相同,如果不同找出差别并分析原因。 3、写实验报告,画出算法流程图,运行可执行文件并写出运行结果。 4、回答思考题问题,总结本次实验体会。
44