xin微机原理与汇编语言程序设计 下载本文

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