实验6_分支程序设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验六 分支程序设计
6.1 实验目的
(1)学习转移指令及与转移有关的寻址方式
(2)掌握分支程序的结构
(3)掌握分支程序的设计、调试方法。
6.2 预备知识
汇编语言中,实现分支的条件往往是通过标志寄存器中条件标志的不同状态反映的,执行流程的改变则是通过条件转移和无条件转移实现的。条件转移指令对前面指令影响的标志位进行判别,决定程序的流向。如果条件满足则转移,否则执行下一条指令。
下面给出与分支程序设计相关的指令以供参考。
表6-1单标志判断条件转移指令
名称 指令格式 测试条件
测试进位标志 JC tag CF=1
JNC tag CF=0
测试零标志 JZ tag ZF=1
JNZ tag ZF=0
测试溢出标志 JO tag OF=1
JNO tag OF=0
测试奇偶标志 JP/JPE PF=1
JNP/JPO PF=0
测试符号标志 JS tag SF=1
JNS tag SF=0
表6-2两数关系判断条件转移指令
类型 名称 指令格式 测试条件
相等
相等 JE/JZ tag ZF=1,X=Y
不相等 JNE/JNZ tag ZF=0,X!=Y
无符号数 低于/不高于等于 JB/JNAE tag CF=1, X 低于等于/不高于 JBE/JNA tag CF=1∨ZF=1,X<=Y 高于/不低于等于 JA/JNBE tag CF=0∧ZF=0,X>Y 高于等于/不低于 JAE/JNB tag CF=0∨ZF=1,X>=Y 带符号数 小于/不大于等于 JL/JNGE tag (SF⊕OF)=1, X 小于等于/不大于 JLE/JNG tag (SF⊕OF)∨ZF=1,X<=Y 大于/不小于等于 JG/JNLE tag (SF⊕OF)∧ZF=0,X>Y 大于等于/不小于 JGE/JNL tag (SF⊕OF)=0, X>=Y 6.3 实验内容 一、验证实验 1.已知数据段中字节变量CHAR1,编写一段程序将CHAR1由小写字母转变为大写字母,并输出转变前后的字符。下面给出了采用完整段定义方式编写源程序; 要求: 1)绘制程序流程图; 2)对程序进行汇编和调试,理解分支程序的实现方法; 3)将该程序改写为从键盘读入一个英文字母类字符,并实现大小写转换(如果字符为a-z之间的转换为A-Z之间字符,如果字符为A-Z之间的转换为a-z 之间字符)并输出。采用简化段定义源程序: 2.下面程序实现了以二进制形式显示一个字符的ASCII码。请改变第二行的”A”为“6”、6、36H后分别说明运行结果,并做解释。 DATA SEGMENT A D B 'A' B DB '(A)=$' C DB 'B',0DH,0AH,'$' DATA ENDS STACK SEGMENT STACK DB 200 DUP(0) STACK ENDS CODE SEGMENT ASSUME DS:DATA,SS:STACK,CS:CODE START:MOV AX,DATA MOV DS,AX LEA DX,B ;取“'(A)=$'”首地址到DX中 MOV AH,9 ;利用9号DOS系统功能调用显示 (A)= INT 21H MOV BL,A ;取要显示的字符到BL中 MOV CL,8 ;循环8次,每次显示一位 NEXT: MOV DL,0 ;2号DOS系统功能调用要求将欲显示的 ;字符的ASCII码放到DL中 SAL BL,1 ;欲显示的字符左移一位,移出部分到CF 中 RCL DL,1 ;移出到CF 中的部分移到DL 中 ADD DL,30H ;移入DL 的可能是1,也可能是0,变成ASCII 码 MOV AH,2 ;调2号DOS 系统功能调用显示一位二进制码 INT 21H DEC CL ;循环次数减1 JNE NEXT ;如果减1后不到0,转NEXT LEA DX,C ;取变量C 的首地址到DX 中 MOV AH,9 ;利用9号DOS 系统功能调用显示单位“B”及回车换行 INT 21H MOV AH,4CH ;利用4CH 号DOS 系统功能调用退回DOS INT 21H CODE ENDS END START 二、设计实验部分 1. 编写一个汇编语言程序,实现从键盘读入一个表示年份的正整数(1~9999),判断年份是否是闰年,如果是,输出”Yes!”;如果不是,则输出“No!”。用下列数值1995,1664,1900,2000检查程序输出结果是否正确。请画出程序流程图。 提示:闰年的判断规则 如果1个年份不能被4整除,则不是闰年。 如果1个年份能被4整除,但是不能被100整除,则它是闰年。 如果1个年份能被100整除,但是不能被400整除,则它不是闰年。 如果1个年份能被400整除,则它是闰年。 2.编写程序,计算下列函数值。其中,变量X 和Y 是有符号字类型变量。 ⎪⎩ ⎪ ⎨⎧><<=<−+=1010001903010 x x x x x x y 要求: 1)采用简化段定义方式编写源程序; 2)绘制程序流程图; 3)给出程序编译和调试过程; 三、综合调试实验 1. 改写下列程序,显示输出2进制数。 ;用查表方法将内存中的字以十六进制显示出来。 data segment x1 dw 49,298,23456,65530 count db 4 hex db '0123456789ABCDEF' mess db 0dh,0ah,'HEX=$' data ends code segment assume cs:code,ds:data start: