实验三 分支结构程序设计
实验目的:
1、熟练掌握8086的程序设计模型及基本指令系统。 2、掌握汇编程序基本设计方法。 3、掌握常用的DOS功能调用。
相关理论知识:
一、 无条件转移指令 JMP 标号
功能: (1)若标号为近标号,则IP?OFFSET 标号,实现段内的转移 (2)若为远标号,则IP?OFFSET 标号,CS?SEG标号,实现段间的转移
二、 条件转移指令
条件转移语句实现段内的短转移,即转移语句与转向语句之间最大距离为+127或-128字节。条件转移指令是一组极其重要的转移指令,它根据标志寄存器中的一个或多个标志位来决定是否需要转移。 条件转移指令分为三大类:
? 基于无符号数:JA、JAE、JB、JBE ? 基于有符号数:JG、JGE、JL、JLE
? 基于算术标志位:JZ/JNZ、JC/JNC、JO/JNO、JS/JNS
实验内容:
程序1:设计一个程序实现从键盘输入两个字符A、B,并进行比较后输出比较结果 DSEG SEGMENT A DB ? B DB ?
MESS1 DB 0AH,0DH,'THE RESULT IS:A>B$' MESS2 DB 0AH,0DH,' THE RESULT IS:A=B$' MESS3 DB 0AH,0DH,' THE RESULT IS:A
MESS4 DB 0AH,0DH,'INPUT TWO CHARACTERS:$' DSEG ENDS
CSEG SEGMENT ASSUME DS:DSEG,CS:CSEG START: MOV AX,DSEG MOV DS,AX LEA DX,MESS4 MOV AH,09H INT 21H ;显示字符串INPUT TWO CHARACTERS: MOV AH,01H ;输入一个字符A INT 21H MOV A,AL MOV AH,01H ;输入一个字符B
1
INT 21H MOV B,AL MOV BL,A CMP BL,B JE EQUAL ;相等时转移去执行EQUAL JA ABOVE ;大于时转移去执行ABOVE BELOW: MOV DX,OFFSET MESS3 ;小于时顺序执行BELOW,显示AB MOV AH,09H INT 21H
QUIT: MOV AH,4CH ;返回DOS INT 21H CSEG ENDS END START
程序2:设计程序实现一位密码处理系统。要求进入系统后先显示welcome to you!,换行回车后显示“input your password:”,输入一位密码并显示一个“*”,判断密码是否正确,正确的话显示\can pass!\密码错误的话显示\然后提示重新输入密码。
DSEG SEGMENT PASS DB ? RIGHT DB 'A'
MESS1 DB 'WELCOME TO YOU!',0AH,0DH,'$' ;定义字符串“WELCOME TO YOU!”
MESS2 DB 'INPUT YOUR PASSWORD:$'
MESS3 DB 0AH,0DH,'SUCCESSFUL!YOU CAN PASS!',0AH,0DH,'$' MESS4 DB 0AH,0DH,'ERROR!!!',0AH,0DH,'$' DSEG ENDS
CSEG SEGMENT ASSUME CS:CSEG,DS:DSEG START: MOV AX,DSEG MOV DS,AX LEA DX,MESS1 MOV AH,09H INT 21H ;显示字符串“WELCOME TO YOU!”
A3: MOV DX,OFFSET MESS2 ;显示“INPUT YOUR PASSWORD:” MOV AH,09H
2
INT 21H MOV AH,07 ;输入一个密码,保存在pass变量中 INT 21H MOV PASS,AL MOV AH,02H ;显示一个*号 MOV DL,'*' INT 21H MOV BL,RIGHT CMP PASS,BL ;比较密码是否正确 JNZ A1 ;不相等时转移去执行A1 MOV DX,OFFSET MESS3 ;密码正确,显示MESS3 MOV AH,09H INT 21H JMP A2 ;跳过A1,返回DOS
A1: MOV DX,OFFSET MESS4 ;密码不正确,重新提示输入 MOV AH,09H INT 21H JMP A3 ;重新提示“INPUT YOUR PASSWORD:”
A2: MOV AH,4CH ;返回DOS INT 21H CSEG ENDS END START
程序3:设计程序实现在屏幕上显示如下提示菜单: ************************ 1:Load Game 2:Save Game 3:Options 4:Exit
************************ Please input your choice:_
当输入选择项后能进行相应处理,输入非法值时显示“You have input a wrong choice!”后退出程序。 DSEG SEGMENT
buf2 DB 'Load Game',0AH,0DH,'$' buf3 DB 'Save Game',0AH,0DH,'$' buf4 DB 'Options',0AH,0DH,'$' buf5 DB 'Exit',0AH,0DH,'$'
buf7 DB 'Please input your choice',0AH,0DH,'$'
buf8 DB 'You have input a wrong choice',0AH,0DH,'$'
MESS1 DB '************************',0AH,0DH
3
DB '1:Load Game',0AH,0DH DB '2:Save Game',0AH,0DH DB '3:Options',0AH,0DH DB '4:Exit',0AH,0DH DB '************************',0AH,0DH DB 'Please input your choice:_',0AH,0DH,'$'
DSEG ENDS
SSEG SEGMENT DW 100 DUP(?) SSEG ENDS
CSEG SEGMENT ASSUME CS:CSEG,SS:SSEG,DS:DSEG
START:
MOV AX,DSEG MOV DS,AX
LEA DX,MESS1 MOV AH,09H INT 21H
MOV AH,07H INT 21H
CMP AL,'1' JE A1 CMP AL,'2' JE A2
CMP AL,'3' JE A3
CMP AL,'4' JE A4 JMP A5
A1: MOV AH,09H LEA DX,buf2 INT 21H MOV AH,4CH ;返回DOS INT 21H
A2: MOV AH,09H LEA DX,buf3 INT 21H
4
MOV AH,4CH ;返回DOS INT 21H
A3: MOV AH,09H LEA DX,buf4 INT 21H MOV AH,4CH ;返回DOS INT 21H
A4: MOV AH,09H LEA DX,buf5 INT 21H MOV AH,4CH ;返回DOS INT 21H
A5: MOV AH,09H LEA DX,buf8 INT 21H MOV AH,4CH ;返回DOS INT 21H
CSEG ENDS
END START
程序4:编写一源程序,将数组NA与数组NB相减,把差值存放在数组NC中。 NA DB 95,43,78,62,31,04,56,28,91,01 NB DB 78,96,42,38,15,40,78,21,84,50 NC DB 10 DUP(?)
实验小结:
1、掌握8086的程序设计模型及基本指令系统。
2、掌握汇编程序基本设计方法。 (1) 分析问题,明确要求;
(2) 建立数学模型:即将解决问题的方法用数学语言表达出来 (3) 确定算法:即转化为计算机解法; 画出程序流程图; 编码,调试;
3、掌握常用的DOS功能调用。
DOS功能调用的子程序已按顺序编号——功能号(00H~68H),其调用方法是: (1) 功能号→AH
(2) 入口参数→指定寄存器
5
(3) INT 21H
教师评语:
6