- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验九
分支程序的设计
实验目的:掌握分支程序设计的方法,学会调试各种程序 分支。
实验内容:
根据 AL 寄存器中哪一位为 1(从低位到高位)把程序转移到 8 个不同的程序分支中去。
实验设备:IBM PC 机,DOS 或 WINDOWS, MASM 程序,LINK 程序
实验原理:
分支程序结构可以有两种形式,它们分别相当于高级语言
中的 IF-THEN-ELSE 语句和 CASE 语句,适用于要求根据不同条
件做不同处理的情况。IF-THEN-ELSE 语句可以引出两个分支,
CASE 语句则可以引出多个分支。它们的共同点是:运行方向是
向前的,在某一种特定条件下,只能执行多个分支中的一个分
支。本实验可用 CASE 结构来实现,跳跃表法能很好的解决这个
问题。下面是用变址寻址方式实现的跳跃表法,也可用寄存器 间接和基址变址方式来实现。
开始第 0 分支 显示 ‘
开始
第 0 分支 显示 ‘0’
初始化逻辑尺: 0101 0110 初始化地址表序号 i =0 , 让 BX 指向 branch_table 首地址
(AL)逻辑右移 1 位?CF 标志
修改地址表序号 i++
第 1 分支 显示 ‘1’
第 7 分支 显示 ‘7’
Y
N
TEST_RULER:
exit:
束
(AL)=0?
)
结
(CF)
Choice_branch:
=0??
N
Routine7
Routine2
Y
Inc_ i:
源程序
data segment
branch_table dw routine_0,routine_1,routine_2,routine_3
dw routine_4,routine_5,routine_6,routine_7
data ends
code segment
main PROC far
assume cs: code, ds: data
start:
push ds
sub ax,ax
push ax
mov ax,data
mov ds,ax
mov al
mov si,0
mov bx, offset branch_table; lea bx,brach_table
test_ruler:
TEST al,0FFH
jz exit
SHR al, 1
JC choice_branch
inc_i:
add si,2
jmp test_ruler
exit: ret
choice_branch:
jmp word ptr [bx+si]
routine_0:
push ax
mov dl,0;
mov ah,2
int 21h
pop ax
jmp inc_i
routine_1:
push ax
mov dl,1;
mov ah,2
int 21h
pop ax
jmp inc_i
routine_2:
push ax
mov dl,2;
mov ah,2
int 21h
pop ax
jmp inc_i
routine_3:
push ax
mov dl,3;
mov ah,2
int 21h
pop ax
jmp inc_i
routine_4:
push ax
mov dl,4;
mov ah,2
int 21h
pop ax
jmp inc_i
routine_7:
push ax
mov dl,7;
mov ah,2
int 21h
pop ax
jmp inc_i
main ENDP
code ends
end start
五。实验过程
用记事本编辑源程序代码,保存为 sy9.asm 文件
汇编翻译,连接
汇编、连接,按照按默认回答,获得 sy9.exe 文件
3.调试运行 sy9.exe
(1)观察代码段,数据段在内存中的地址范围(用 U 命令结合源 代码,观察段名称被翻译成的立即数)
(2)
键入 debug sy9.exe,进入调试状态。在调试提示符下,
用 U 命令,查看机器代码在内存中的位置.
(3)观察每一次循环到 jmp[bx+si]时,CF 的值 si 的值,看是否按 CF 和 SI/2 来跳到相应的 routine 中去。
六.思考题:
(1) Jmp [bx+si] 属于什么类型的跳转方式(直接?间接?段内? 段外)
段内间接跳转
(2) 程序用什么方法实现多分支跳转的?
jmp word ptr [bx+si]
通过改变 ip 的值来实现跳转
您可能关注的文档
最近下载
- YY:T 1870-2023 液相色谱 - 质谱法测定试剂盒通用要求.pdf VIP
- 炎德英才大联考·雅礼中学2026届高三9月月考试卷(二)英语试卷(含答案详解).doc VIP
- 四川省成都市玉林中学2024-2025学年九年级上学期10月月考物理试题.docx VIP
- 石油钻井典型事故案例(钻井课件培训资料).ppt VIP
- 《人民币》解说词全五集.doc VIP
- 工程流体力学(闻建龙)课后习题答案解析.docx VIP
- 吉林省中考英语模拟题及答案.doc VIP
- 四川省巴中市南江县实验中学2024-2025学年九年级上学期10月月考物理试题.docx VIP
- 课件:中石油四起典型事故案例分析.ppt VIP
- 通过法律的社会控制.pdf VIP
文档评论(0)