实验三 分支结构程序设计
一、 实验内容
7-4 从键盘输入一个字符,在其最高位加奇校验位后送入X单元中。
分析:键盘上输入的是一个ASCII码,最高位为0,通过某种指令判断该字符中1的个数的奇偶性,若为奇数个1,高位不变,否则将高位置1。
7-5 已知X、Y是单字节无符号数,请设计程序计算: 当0≤X<10时 Y=X/4 X≥10时 Y=X-10
7-6 假设有三个单字节带符号数X、Y、Z,试编程实现将其中的最大数送MAX单元的功能
分析:要实现在三个数中找到最大数,首先在X、Y中找出最大数送AL寄存器中,然后用AL中的内容再和Z中的内容进行比较,再把两者中的最大数送AL,这样AL中的内存器即为三个数中的最大数。
7-9从键盘输入一个十六进制数码,将其转换成二进制数在内存中存储起来。若输入的不是十六进制数码,则显示“INPUT ERROR!”。
分析:十六进制数码包括阿拉伯数字0—9的ASCII码是30H—39H,英文字母A—F的ASCII码是41H—46H。程序中必须首先判断输入的内容是否为十六进制数码,是则完成ASCII码到二进制的转换,否则显示出错信息。转换方法是:若接收的按键是阿拉伯数字,则将ASCII码减去30H,若是A—F中的某一个英文字母,则将ASCII码减去37H。
9—10 将例7-9中的功能用地址表方法实现
二、实验目的
⑴ 掌握转移类指令的分类与应用 ⑵ 学习分支程序的基本结构 ⑶ 理解分支结构程序的设计方法 ⑷ 了解分支结构程序的设计实例
一般情况下指令的顺序是逐条执行的,但是在实际上程序不可能总是顺序执行,经常需要改
变程序的执行流程。控制转移类指令用来改变程序执行的方向,即修正指令指针寄存器IP和段地址寄存器CS的值。根据转移位置,将转移指令分为段内转移和段间转移。转移目标位置的地址如果是直接给出的,则称为直接寻址,转移位置的目标地址如果是通过访问内存单元或寄存器取得的,则称为间接寻址。
三、实验步骤
1 编译MASM>test704
Object filename [test704.OBJ]: Source listing [NUL.LST]: Cross-reference [NUL.CRF]:
2 链接C:\\masm>link test704.OBJ
6
C:\\masm>link test704.obj
Run File [TEST704.EXE]: List File [NUL.MAP]: Libraries [.LIB]:
3 Debug源程序
C:\\masm>DEBUG -t
AX=0000 BX=0000 CX=0000 DX=0000 SP=CFDC BP=0000 SI=0000 DI=0000 DS=14FD ES=14FD SS=14FD CS=14FD IP=0101 NV UP DI PL NZ NA PO NC 14FD:0101 EB08 JMP 010B -u
14FD:0101 EB08 JMP 010B
14FD:0103 8B5E06 MOV BX,[BP+06]
14FD:0106 C747060000 MOV WORD PTR [BX+06],0000 14FD:010B 8B5E06 MOV BX,[BP+06]
14FD:010E 837F0600 CMP WORD PTR [BX+06],+00 14FD:0112 750C JNZ 0120
14FD:0114 8A4604 MOV AL,[BP+04] 14FD:0117 D0D8 RCR AL,1 14FD:0119 7305 JNB 0120 14FD:011B B8FFFF MOV AX,FFFF 14FD:011E EB35 JMP 0155
14FD:0120 8B5E06 MOV BX,[BP+06]
四、实验调试后的程序清单
例 7-4
DATA SEGMENT X DB ? DATA ENDS
CODE SEGMENT
ASSUME DS:DATA,CS:CODE START: MOV AX,DATA MOV DS,AX MOV AH,01H INT 21H AND AL,AL JNP NEXT OR AL,80H NEXT: MOV X,AL MOV AH,4CH INT 21H
CODE ENDS END START
例7-5
DATA SEGMENT X DB 6 DATA ENDS
CODE SEGMENT
ASSUME DS:DATA,CS:CODE START: MOV AX,DATA MOV DS,AX MOV AL,X CMP AL,10 JB NEXT SUB AL,10 JMP EXIT NEXT: SHR AL,1 EXIT: MOV AL,X MOV AH,4CH INT 21H CODE ENDS END START
例7-6
DATA SEGMENT X DB 19 Y DB -25 Z DB 38 MAX DB ? DATA ENDS
CODE SEGMENT
ASSUME DS:DATA,CS:CODE START: MOV AX,DATA MOV DS,AX MOV AL,X MOV AL,Y NEXT1: CMP AL,Z JG NEXT2 MOV AL,Z
NEXT2: MOV MAX,AL MOV AH,4CH INT 21H CODE ENDS END START
例7-9
DATA SEGMENT
MESS DB '0 MODE0 1 MODE1' , 0AH,0DH DB '2 MODE2 3 MODE3' , 0AH,0DH DB '4 MODE4 5 MODE5' , 0AH,0DH DB '6 MODE6 7 MODE7' , 0AH,0DH DB '8 MODE8 9 MODE9' , 0AH,0DH
DB 'PLEASE INPUT ANY KEY' , 0AH,0DH,'$' ERR DB 'INPUT ERROR',0AH,0DH,'$' DATA ENDS
CODE SEGMENT
ASSUME DS:DATA,CS:CODE START: MOV AX,DATA MOV DS,AX
MOV DX,OFFSET MESS MOV AH,09H INT 21H
INKEY: MOV AH,01H INT 21H SUB AL,30H CMP AL,30H JL ERR1 CMP AL,00H JL ERR1 CMP AL,9H JG ERR1 MOV AH,0H
MOV BX,OFFSET TABLE ADD AX,AX ADD BX,AX MOV DL,0AH MOV AH,02H INT 21H JMP BX
ERR1: MOV DX,OFFSET ERR MOV AH,09H INT 21H JMP INKEY
TABLE: JMP SHORT MODE0 JMP SHORT MODE1 JMP SHORT MODE2 JMP SHORT MODE3 JMP SHORT MODE4 JMP SHORT MODE5 JMP SHORT MODE6 JMP SHORT MODE7
7
JMP SHORT MODE8 JMP SHORT MODE9 MODE0: MOV AH,02H MOV DL,'0' INT 21H JMP EXIT MODE1: MOV AH,02H MOV DL,'1' INT 21H JMP EXIT
MODE2: MOV AH,02H MOV DL,'2' INT 21H JMP EXIT MODE3: MOV AH,02H MOV DL,'3' INT 21H JMP EXIT MODE4: MOV AH,02H MOV DL,'4' INT 21H JMP EXIT MODE5: MOV AH,02H MOV DL,'5' INT 21H JMP EXIT MODE6: MOV AH,02H MOV DL,'6' INT 21H JMP EXIT MODE7: MOV AH,02H MOV DL,'7' INT 21H JMP EXIT MODE8: MOV AH,02H MOV DL,'8' INT 21H JMP EXIT MODE9: MOV AH,02H MOV DL,'9' INT 21H JMP EXIT EXIT: MOV AH,4CH INT 21H CODE ENDS END START
例 7-10
DATA SEGMENT
TABLE DW MODE0, MODE1, MODE2, MODE3, MODE4 DW MODE5, MODE6, MODE7, MODE8, MODE9 MESS DB 'PLEASE INPUT ANY KEY',0AH,0DH,'$' MESS0 DB 'FUCK YOU',0AH,0DH,'$' MESS1 DB 'YOU ARE A MICE',0AH,0DH,'$' MESS2 DB 'IN MY DREAMS,I SEE YOU ',0AH,0DH,'$' MESS3 DB 'YOU ARE TOO FET',0AH,0DH,'$' MESS4 DB 'I LOVE SONGHUIQIAO,HOW ABOUT YOU',0AH,0DH,'$' MESS5 DB 'I FELL IN LOVE A GIRL',0AH,0DH,'$' MESS6 DB 'THAT IS HOW I KNOW YOU GO ON',0AH,0DH,'$' MESS7 DB 'GIRL I LOVE YOU',0AH,0DH,'$' MESS8 DB 'LOVE CAN TOUCH US ONE TIME',0AH,0DH,'$' MESS9 DB 'ONE TRUE I HOLD YOU',0AH,0DH,'$' MESS10 DB 'TUI CHU SHU RU Q',0AH,0DH,'$' ERR DB 'INPUT ERROR',0AH,0DH ,'$' DATA ENDS
CODE SEGMENT
ASSUME DS:DATA,CS:CODE START: MOV AX,DATA MOV DS,AX
MOV DX,OFFSET MESS MOV AH,09H INT 21H
INKEY: MOV AH,01H INT 21H SUB AL,30H CMP AL,00H JL ERR1 CMP AL,09H JG ERR1 MOV AH,0
MOV BX,OFFSET TABLE ADD AX,AX ADD BX,AX MOV DL,0AH MOV AH,02H INT 21H
MOV DL,0DH INT 21H
JMP WORD PTR [BX] ERR1: MOV DX,OFFSET ERR MOV AH,09H INT 21H JMP INKEY
8
MODE0: MOV AH,02H
MOV DX,OFFSET MESS0 MOV AH,09H INT 21H
JMP YORN MODE1: MOV AH,02H
MOV DX,OFFSET MESS1 MOV AH,09H INT 21H JMP YORN MODE2: MOV AH,02H
MOV DX,OFFSET MESS2 MOV AH,09H INT 21H JMP YORN MODE3: MOV AH,02H
MOV DX,OFFSET MESS3 MOV AH,09H INT 21H JMP YORN MODE4: MOV AH,02H
MOV DX,OFFSET MESS4 MOV AH,09H INT 21H JMP YORN MODE5: MOV AH,02H
MOV DX,OFFSET MESS5 MOV AH,09H INT 21H JMP YORN MODE6: MOV AH,02H
MOV DX,OFFSET MESS6 MOV AH,09H INT 21H JMP YORN MODE7: MOV AH,02H
MOV DX,OFFSET MESS7 MOV AH,09H INT 21H JMP YORN MODE8: MOV AH,02H
MOV DX,OFFSET MESS8 MOV AH,09H INT 21H JMP YORN MODE9: MOV AH,02H
MOV DX,OFFSET MESS9 MOV AH,09H INT 21H JMP YORN
YORN: MOV DX,OFFSET MESS10 MOV AH,09H INT 21H
MOV AH,01H INT 21H CMP AL,51H JE EXIT JMP START EXIT: MOV AH,4CH INT 21H CODE ENDS END START
五、实验结果
六、实验总结
9
试验四 循环结构程序设计
一、 试验内容
例8-2 已知在数据段中有一个字符串STR1单元起开始存放,现要求编程实现把字符串传送至数据段从STR2单元开始的数据区中。
例8-4 已知内存中有两个字符串STR1和STR2,比较两个字符串是否相等,若相等,将FLAG单元置1,否则送0.
例8-6 通过键盘输入一个字符串,送入数据段的存储器中,以回车结束,统计字符串中数字的个数。
例8-7 已知在内存中有一个字符串,长度为CN,找出这个字符串中的第一个空格,若找到,将其地址送到ADDR单元。将FLAG(单元)置1,否则将FLAG单元清零。
分析:这个题目是一个单循环,控制循环退出的情况有两种:一个是未找到空格,即循环计数器到达终止值;另一个是找到空格,即计数器未到终止值就退出循环。
例8-8 设有两个字数组X和Y,各含有十个元素,分别是X0---X9,Y0---Y9,要求编程完成以下运算:
Z0=X0+Y0 Z1=X1+Y1 Z2=X2+Y2 Z3=X3+Y3 Z4=X4+Y4 Z5=X5+Y5 Z6=X6+Y6 Z7=X7+Y7 Z8=X8+Y8 Z9=X9+Y9
根据题目要求可知,两数组间的元素有两种运算:加或减。为了区别,可以设置标志位,用0标识加法,用1表示减法。共有十个元素,应设置十个标志位。把这十个标志位按从低位到高位的顺序放在一个存储单元中,则此单元即为逻辑尺。
例8-10 将从STR单元开始的一个字符串中的所有大写字母改为小写字母,该字符串以00H结尾。 分析:这是一个循环次数不定的循环程序结构,应用转移指令,决定是否结束循环,循环体判断每个字符,如果是大写字母则转为小写字母,否则不予处理;循环体中具有分支结构,大小写字母的ASCII码得不同之处是:大写字母D5=0,而小写字母D5=1.
例8-12 在一个数据块中查找是否有字母“A”,若有则将其位置显示出来,若没有,则将DI送0,不作任何显示。
分析:在一个数据块中查找某一个数据,可以使用串指令SCAN。
操作。
3 循环参数修改部分,为保证每次循环都能正常完成,相关信息要发生有规律的变化,为下次循环做准备。
4 循环控制部分,循环控制是循环程序设计的关键,每个循环程序必须选择一个恰当的循环控制条件来控制循环的运行和结束。
三、试验步骤
1 编译 c:\\masm>masm test
Object filename [test.OBJ]: Source listing [NUL.LST]: Cross-reference [NUL.CRF]:
2 链接 C:\\masm>link test
Run File [TEST802.EXE]: List File [NUL.MAP]: Libraries [.LIB]:
4 debug 源程序 C:\\masm>debug
0 Warning Errors 0 Severe Errors
C:\\masm>link test802
IBM Personal Computer Linker
Version 2.00 (C)Copyright IBM Corp 1981, 1982, 1983
Run File [TEST802.EXE]: List File [NUL.MAP]: Libraries [.LIB]:
Warning: No STACK segment
There was 1 error detected.
C:\\masm>debug -t
AX=0000 BX=0000 CX=0000 DX=0000 SP=CFDC BP=0000 SI=0000 DI=0000 DS=10F3 ES=10F3 SS=10F3 CS=10F3 IP=0101 NV UP DI PL NZ NA PO NC 10F3:0101 EB08 JMP 010B
10
二、试验目的
理解循环控制指令的格式与应用 掌握串操作指令的格式与应用 认识循环程序的基本结构 了解循环程序设计实例
循环结构程序结构是三大基本程序结构之一,一个循环结构的程序主要由以下4个部分组成:
1 循环初始化部分,在进入循环程序之前,要进行循环程序初始状态的设置,一般称为初始化设置。
2 循环体,循环体是完成循环工作的主要部分,使用循环程序的目的就是要重复执行这段
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库汇编实验报告(2)在线全文阅读。
相关推荐: