实验五 分支结构程序设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验五分支结构程序设计
一、实验目的
掌握条件转移指令的使用方法及指令对标志寄存器中各标志位的影响;掌握标志位和转移指令之间的关系;会用条件转移指令和无条件转移指令设计多分支结构程序;掌握设置断点调试程序的方法。
二、示例
1、简单分支结构
判断方程ax2+bx+c=0是否有实根,若有实根则将字节变量tag置1,否则置0(假设
a、b、c均为字节变量,表达-127~+127的数据)。
(参考程序略)
2、多分支结构
程序根据键盘输入的1~8数字转向8个不同的处理程序段。
【参考程序如下】
DATA SEGMENT
msg db 'Input number(1-8):',13,10,'$'
ms1 db 'Chapter 1: Fundamentals of Assembly Language',13,10,'$'
ms2 db 'Chapter 2: 8086 Instructino Set',13,10,'$'
ms3 db 'Chapter 3: Statements of Assembly Language',13,10,'$'
ms4 db 'Chapter 4: Assembly Language Programming',13,10,'$'
ms5 db 'Chapter 5: 32-bit Instruction and Programming',13,10,'$'
ms6 db 'Chapter 6: Mixed Programming with C/C++',13,10,'$'
ms7 db 'Chapter 7: FP Instructions and Programming',13,10,'$'
ms8 db 'Chapter 8: MMX Instructions and Programming',13,10,'$'
tab dw 0,L1,L2,L3,L4,L5,L6,L7,L8
DATA ENDS
code segment
assume cs:code,DS:DATA
main proc far
start:
push ds
sub ax,ax
push ax
MOV AX,DATA
MOV DS,AX
;main program
next: mov dx,offset msg ;提示输入数字
mov ah,9
int 21h
mov ah,1 ;等待按键
int 21h
cmp al,31h ;数字 < 1 ?
jb next
cmp al,38h ;数字 > 8 ?
ja next
sub al,30h ;将ASCII码转换成数字
shl al,1 ;将al中的数乘以2
mov ah,0
lea bx,tab
add bx,ax ;bx中为标号Li的偏移地址
mov ah,2
mov dl,13
int 21h
mov ah,2
mov dl,10
int 21h
jmp [bx] ;(段内)间接转移;IP<-[bx]
exit: mov ah,9
int 21h
ret
L1: mov dx,offset ms1 ;处理程序1
jmp exit
L2: mov dx,offset ms2 ;处理程序2,以下类推
jmp exit
L3: mov dx,offset ms3
jmp exit
L4: mov dx,offset ms4
jmp exit
L5: mov dx,offset ms5
jmp exit
L6: mov dx,offset ms6
jmp exit
L7: mov dx,offset ms7
jmp exit
L8: mov dx,offset ms8
jmp exit
main endp
code ends
end start
三、实验题
(1)上机验证教材例5.9折半查找算法的程序实现。
(2)教材习题5.21。
(3)已知DATAX和DATAY单元各存放一个带符号字节数据,从键盘上接收加(+)、减(-)、乘(*)或除(/)符号,然后完成相应运算,结果存入RLT单元。
(4)从键盘上接收一位十进制数X,计算Y值,并以十六进制形式显示出来。
X2+X (X=3)
X2-2X (X=4)
Y= X2 (X=5)
X2/2 (X=6)
X2-X (X=7)
四、实验报告
1、总结调试分支程序的方法;
2、写出程序清单,并记录执行结果。