实验九分支程序的设计.docx
- 文档编号:24107431
- 上传时间:2023-05-24
- 格式:DOCX
- 页数:9
- 大小:119.46KB
实验九分支程序的设计.docx
《实验九分支程序的设计.docx》由会员分享,可在线阅读,更多相关《实验九分支程序的设计.docx(9页珍藏版)》请在冰豆网上搜索。
实验九分支程序的设计
实验九分支程序的设计
一、实验目的:
掌握分支程序设计的方法,学会调试各种程序分支。
二、实验内容:
根据AL寄存器中哪一位为1(从低位到高位)把程序转移到8个不同的程序分支中去。
三、实验设备:
IBMPC机,DOS或WINDOWS,MASM程序,LINK程序
四、实验原理:
分支程序结构可以有两种形式,它们分别相当于高级语言中的IF-THEN-ELSE语句和CASE语句,适用于要求根据不同条件做不同处理的情况。
IF-THEN-ELSE语句可以引出两个分支,CASE语句则可以引出多个分支。
它们的共同点是:
运行方向是向前的,在某一种特定条件下,只能执行多个分支中的一个分支。
本实验可用CASE结构来实现,跳跃表法能很好的解决这个问题。
下面是用变址寻址方式实现的跳跃表法,也可用寄存器间接和基址变址方式来实现。
Routine1
第0分支
显示‘0’
初始化逻辑尺:
01010110
初始化地址表序号i=0,
让BX指向branch_table首地址
(AL)=0?
)
结束
Y
N
(AL)逻辑右移1位→CF标志
(CF)=0?
?
Y
修改地址表序号i++
N
第1分支
显示‘1’
第7分支
显示‘7’
Routine2
Routine7
TEST_RULER:
exit:
Choice_branch:
Inc_i:
源程序
datasegment
branch_tabledwroutine_0,routine_1,routine_2,routine_3
dwroutine_4,routine_5,routine_6,routine_7
dataends
codesegment
mainPROCfar
assumecs:
code,ds:
data
start:
pushds
subax,ax
pushax
movax,data
movds,ax
moval,10101010B
movsi,0
movbx,offsetbranch_table;leabx,brach_table
test_ruler:
TESTal,0FFH
jzexit
SHRal,1
JCchoice_branch
inc_i:
addsi,2
jmptest_ruler
exit:
ret
choice_branch:
jmpwordptr[bx+si]
routine_0:
pushax
movdl,'0';
movah,2
int21h
popax
jmpinc_i
routine_1:
pushax
movdl,'1';
movah,2
int21h
popax
jmpinc_i
routine_2:
pushax
movdl,'2';
movah,2
int21h
popax
jmpinc_i
routine_3:
pushax
movdl,'3';
movah,2
int21h
popax
jmpinc_i
routine_4:
pushax
movdl,'4';
movah,2
int21h
popax
jmpinc_i
routine_7:
pushax
movdl,'7';
movah,2
int21h
popax
jmpinc_i
mainENDP
codeends
endstart
五。
实验过程
1.用记事本编辑源程序代码,保存为sy9.asm文件
2.汇编翻译,连接
汇编、连接,按照按默认回答,获得sy9.exe文件
3.调试运行sy9.exe
(1)观察代码段,数据段在内存中的地址范围(用U命令结合源代码,观察段名称被翻译成的立即数)
(2)键入debugsy9.exe,进入调试状态。
在调试提示符下,用U命令,查看机器代码在内存中的位置.
(3)观察每一次循环到jmp[bx+si]时,CF的值si的值,看是否按CF和SI/2来跳到相应的routine中去。
六.思考题:
(1)Jmp[bx+si]属于什么类型的跳转方式(直接?
间接?
段内?
段外)
段内间接跳转
(2)程序用什么方法实现多分支跳转的?
jmpwordptr[bx+si]
通过改变ip的值来实现跳转
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 分支 程序 设计