实验二 顺序程序设计1(2学时)
【实验目的】
1、掌握顺序程序设计的编程技巧和上机调试方法
2、进一步熟悉数据传送、数据运算、逻辑运算等相关指令的使用 3、继续熟悉调试工具DEBUG的应用
4、熟悉汇编语言编辑、汇编、链接和调试的全部过程
【实验内容】
1、某班10名学生的英语成绩按学号顺序排列在TAB表中(学生学号从1开始,按照升序排列),要查成绩的学生学号从键盘输入,编写程序实现学生成绩查询,并将查出的英语成绩存放在变量EN中。
调试运行时,请采用两种方法:
(1)调用DEBUG程序查看运行结果; (2)将该学生成绩在屏幕上显示出来。 DATAS SEGMENT
tab db 65h,78h,99h,65h,58h,98h,87h,77h,89h,52h en db ?
;此处输入数据段代码 DATAS ENDS
STACKS SEGMENT db 100 dup(0)
;此处输入堆栈段代码 STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS START:
MOV AX,DATAS MOV DS,AX mov ah,1 int 21h and al,0fh dec al lea bx,tab xlat
mov bl,al mov cl,4 shr al,cl or al,30h mov dl,al mov ah,2 int 21h
13
and bl,0fh or bl,30h mov dl,bl mov ah,2 int 21h mov AH,4CH INT 21H
CODES ENDS END START
2
2、编写计算Y=X+6X+9的程序
首先在变量X中存放数据04H,然后运行所编写的程序。调试运行时,请采用两种方法:(1)调用DEBUG程序查看运行结果
(2)将表达式的值在屏幕上显示出来 DATAS SEGMENT
x db 04h;此处输入数据段代码 DATAS ENDS
STACKS SEGMENT
db 100 dup(0) ;此处输入堆栈段代码 STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS START:
MOV AX,DATAS MOV DS,AX
mov al,x;此处输入代码据段代码 mul x;x*x=>ax mov bx,ax mov al,x mov dl,6
mul dl;6*x=>ax
add bx,ax;x*x+6x=>bx
add bx,9;x*x+6x+9=>bx=49 mov ax,bx mov bl,10
div bl;(al)=十位数;(ah)=个位数 mov cl,ah or al,30h mov dl,al mov ah,2 int 21h
14
or cl,30h mov dl,cl mov ah,2 int 21h MOV AH,4CH INT 21H CODES ENDS END START
【预习要求】
1、仔细阅读课本及相应教材。
2、参照程序框图编制源程序,准备好多组运算数据,以供校验。
【实验步骤】
1、确定算法,画出程序流程图。
2、利用文本编辑程序,建立源文件。
3、利用汇编程序MASM对源程序汇编,形成目标文件 4、利用LINK对目标文件进行链接,形成可执行文件。
5、运行可执行文件并写出运行结果,如果有错误,利用DEBUG软件进行调试。
【实验报告要求】
1、记录实验步骤和出现的现象,按照要求写出显示结果,源程序加上注释。 2、比较实验记录和理论分析的结果是否相同,如果不同找出差别并分析原因。
3、写实验报告,画出算法流程图,总结本次实验体会。 4、回答思考题。
【思考题】
1.一个段的大小为多少?一定是64KB吗?如何在DEBUG下查看程序在内存的存放情况?
2.调用INT 21H中的02H号功能时,要注意什么?
实验三 顺序程序设计2(2学时)
【实验目的】
1、掌握顺序程序设计的编程技巧和上机调试方法
2、进一步熟悉数据传送、数据运算、逻辑运算等相关指令的使用 3、继续熟悉调试工具DEBUG的应用
4、熟悉汇编语言编辑、汇编、链接和调试的全部过程
【实验内容】
1、编写计算Y=24A+5B-3C;首先在变量A.B.C中分别存放04H,05H,06H。然后运行所编写的程序。调试运行时,请采用两种方法:
(1)调用DEBUG程序查看运行结果并记录每步运行结果
15
(2)将表达式的值在屏幕上显示出来 DATAS SEGMENT
a db 04h ;此处输入数据段代码 b db 05h cc db 06h
buf db 10 dup(100) DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码 STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS START:
MOV AX,DATAS MOV DS,AX
mov al,a;此处输入代码据段代码 mov bl,24
mul bl;24x=>bx mov bx,ax mov al,b mov dl,5
mul dl;5b=>ax
add bx,ax;24a+5b=>bx mov al,cc mov cl,3
mul cl;3c=>cl
sub bx,ax;24a+5b-3c=>bx=103 mov ax,bx mov bl,10
div bl;(al)=商(ah)=个位数 or ah,30h mov buf+2,ah mov ah,0
div bl;(al)=百位 (ah)=十位
or al,30h mov buf,al or ah,30h mov buf+1,ah
mov buf+3,byte ptr '$' lea dx ,buf mov ah,9
16