版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 实验四分支和循环程序设计实验(设计性实验)一、实验要求和目的1熟悉汇编语言程序设计结构;2熟悉汇编语言分支程序基本指令的使用方法;3掌握利用汇编语言实现单分支、双分支、多分支的程序设计方法;4了解汇编语言循环程序设计的基本流程;5熟悉汇编语言循环基本指令的使用方法;6掌握利用汇编语言的循环指令完成循环程序设计方法。二、软硬件环境1、硬件环境:计算机系统 windows;2、软件环境:装有 MASM、DEBUG、LINK、等应用程序。三、实验涉及的主要知识在实际应用中,经常根据一些条件来选择一条分支执行。汇编语言的条件判断主要是通 过状态寄存器中的状态位、无符号数相减或有符号相减而导致的结果来
2、进行。1无条件转移指令 JMP无条件转移指令 JMP 是使程序无条件转移至目标处,又分为段内转移、段间转移。 2条件转移指令 JXX条件转移指令可分为三大类:1)简单条件转移指令指令。根据单个标志位的状态判断转移条件。标志位指令转移条件意义JCCF=1有进位/借位CFJNCCF=0无进位/借位JE/JZZF=1相等/等于 0ZFJNE/JNZZF=0不相等/不等于 0JSSF=1是负数SFJNSSF=0是正数JOOF=1有溢出OFJNOOF=0无溢出JP/JPEPF=1有偶数个 1PFJNP/JPOPF=0有奇数个 12)无符号数条件转移指令。 假设在条件转移指令前使用比较指令,比较两个无符号
3、数 A,B,指令进行的的操作是A-B,其转移指令如下:指令转移条件意义JA/JNBECF=0 AND ZF=0ABJAE/JNBCF=0 OR ZF=1A=BJB/JNAECF=1 AND ZF=0ABJBE/JNACF=1 OR ZF=1ABJGE/JNLSF=OF OR ZF=1A=BJL/JNGESF OF AND ZF=0ABJLE/JNGSF OF OR ZF=1A=B在汇编程序设计中,要熟练使用循环指令和跳转等指令来实现循环,理解循环体结构中 的初始化部分、循环体、结束部分,并且要结合前面分支结构相关的知识点,加深对循环结 构的理解和掌握。循环结构的组成及其设计方法的知识要点有:1
4、、循环程序的基本结构通常由 3 部分组成1) 初始化部分建立循环初始值,为循环做准备,如设置地址指针,(BX/SI/DI/BP),初始化循环控制变量 或计数器(CX),数据寄存器(AX/DX)初值等.2) 循环体循环体是循环程序的主体,是程序中重复执行的程序段.它是由循环工作部分、修改部 分、和循环控制部分。循环工作部分:完成程序功能的主要程序段,用于解决程序的实际任务; 修改部分:对循环参数进行修改,并为下一次循环做准备; 循环控制部分:判断循环结束条件是否满足。通常判断循环结束方法: 用计数控制循环;循环是否进行了预定的次数。用条件控制循环。循环终止条件是否满足。 3)结束处理处理部分主要
5、是对循环的结果进行处理,比如现实提示信息等,很多时候没有此部分程序。 2、循环控制指令:指令格式执行操作循环结束条件LOOP 标号CX=CX-1;若 CX=0,则循环 CX=0LOOPNZ/LOOPNE 标号 CX=CX-1;若 CX=0 且 ZF=0,则循环CX=0 或 ZF=0LOOPZ/LOOPE 标号 CX=CX-1;若 CX=0 且 ZF=1,则循环CX=0 或 ZF=1JCXZ 标号仅测试(CX)=0?若等于 0,则转移到目标地址,否则就顺序执行3、循环控制可以分为:计数循环和条件循环。作为计数循环,一般是指循环次数是已知的情况,在程序设计的的循环时,先应将循环次数送入计数器 CX
6、 中进行计数,在循环体 中使用 LOOP 等循环指令。当然,也可以通过其他方式来进行,如 cxcx-1,jnz 等结合实现。四、实验内容与步骤1、 判断方程 AX2+BX+C=0 是否有实根。若有实根,则将字节变量 tag 置 1,否则置 0。假 设 A、B、C 均为字节变量,数据范围为-128127。程序框图:代码:DATAS SEGMENT a dw 1 b dw 2 d dw 1 tag db ?DATAS ENDSSTACKS SEGMENT STACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKSSTART: MOV AX
7、,DATAS MOV DS,AX mov cx,b mov ax,0 l1: add ax,b loop l1 mov cx,d mov dx,0 l2: add dx,a loop l2 mov cx,4 mov bx,dx cmp ax,bx jge exist mov tag,0 jmp done exist:mov tag,1 done: MOV AH,4CH INT 21HCODES ENDSEND START调试结果:2、 编写一个程序,判别键盘上输入的字符;若是 1-9 字符,则显示之;若为 A-Z 字符,显 示“C”;若为 a-z 字符,显示“c”;若是回车字符(其 ASCII
8、 码为 0DH),则结束程序, 若为其它字符则显示显示“R”。程序框图:代码:DATAS SEGMENT char db ?DATAS ENDSSTACKS SEGMENT STACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKSSTART: MOV AX,DATAS MOV DS,AX l: mov ah,1 int 21h mov char,al cmp char,0dh je end1 cmp char,1 jge next1 jmp others next1: cmp char,9 jle show1 cmp char,A
9、jge next2 jmp test1 next2: cmp char,Z jle show2 cmp char,a jge next3 jmp others next3:cmp char,z jle show3 jmp others test1: cmp char,0dh je end1 jmp others show1: mov dl,char mov ah,02h int 21h jmp done show2: mov dl,C mov ah,02h int 21h jmp done show3: mov dl,c mov ah,02h int 21h jmp done others:
10、mov dl,R mov ah,02h int 21h jmp done done: loop l end1: MOV AH,4CH INT 21HCODES ENDS END START调试结果:3、 (大家再次编成实现实验一的题目,看是否可以优化程序?)分类统计字数组 data 中正 数、负数和零的个数,并分别存入内存字变量 Positive、Negative 和 Zero 中,数组元素个 数保存在其第一个字中。使用 Debug 查看 Positive、Negative 和 Zero 三个变量的数据。程序框图:代码:DATAS SEGMENT data dw 1,-2,3,-4,5,-6,
11、0,0,1,2 count equ ($-data)/2 positive dw count+1 dup(?) negative dw count+1 dup(?) zero dw count+1 dup(?)DATAS ENDSSTACKS SEGMENT STACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKSSTART: MOV AX,DATAS MOV DS,AX mov dx,0 mov bx,0 mov di,0 mov si,0 mov cx,count l1: mov ax,datasi cmp ax,0 jg p
12、je z jl n p: mov ax,datasi mov positivesi+2,ax inc dx add si,2 jmp l z: mov ax,datasi mov zerosi+2,ax inc bx add si,2 jmp l n: mov ax,datasi mov negativesi+2,ax inc di add si,2 jmp l l: loop l1 mov positive0,dx mov negative0,di mov zero0,bx MOV AH,4CH INT 21HCODES ENDS END START调试结果:4、编写程序,在字符串变量 ST
13、RING 中存有一个以$为结尾的 ASCII 码字符串,要求计算 字符串的长度,并把它存入 LENGTH 单元中。(要求用条件控制循环方法,并且字符串分数 据类型是字节和字两种情况)注意:涉及到初始数据的,同学们自行给出多组数据,反复加以验证各题程序。程序框图:代码:(字节)DATAS SEGMENT string db 1666jhu$ length1 db ?DATAS ENDSSTACKS SEGMENT STACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKSSTART: MOV AX,DATAS MOV DS,AX mov
14、 al,0 mov si,0 count: cmp stringsi,$ je done inc si inc al jmp count done: mov length1,al mov dl,al mov dl,02h int 21h MOV AH,4CH INT 21HCODES ENDS END START调试结果:代码:(字)DATAS SEGMENT string db 1,6,6,6,j,h,u,$ length1 db ?DATAS ENDSSTACKS SEGMENT STACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKSSTART: MOV AX,DATAS MOV DS,AX mov al,0 mov si,0 count: cmp stringsi,$ je done inc si inc si inc al jmp count done: mov length1,al mov dl,almov ah,02h int 21h MOV AH,4CH INT 21HCODES ENDS END START调试结果:五、实验要求与提示1、实验要求(1)画出各程序流程图; 2、实验提示
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 部编版五年级语文上册教学计划
- 做2022销售的工作总结怎么写10篇
- 《烈火英雄》观后感
- 语文教师个人教学工作计划
- 《简爱》寒假读书日记10篇
- 2022年的销售工作计划
- 学生会辞职报告模板合集七篇
- 普通高中化学教案教学范文
- 关于工作方案4篇
- 公司学习心得体会15篇
- 食用碱检测报告
- 细胞核的结构和功能说课稿
- 12CM27型连续采煤机电气系统
- 招标代理成果文件质量保证措施
- 石油英语词汇
- 《夜宿山寺》-完整版课件
- 沪教牛津版八年级上册初二英语期末测试卷(5套)
- 北京市海淀区2020-2021学年度第一学期期末初三物理检测试卷及答案
- 家庭室内装饰装修工程保修单
- 小学语文课堂提问有效性策略研究方案
- 物业上门维修收费标准
评论
0/150
提交评论