实验四分支和循环程序设计实验(精)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验四分支和循环程序设计实验

一、实验要求和目的

1.熟悉汇编语言程序设计结构;

2.熟悉汇编语言分支程序基本指令的使用方法;

3.掌握利用汇编语言实现单分支、双分支、多分支的程序设计方法;

4.了解汇编语言循环程序设计的基本流程;

5.熟悉汇编语言循环基本指令的使用方法;

6.掌握利用汇编语言的循环指令完成循环程序设计方法。

二、软硬件环境

1、硬件环境:计算机系统 windows;

2、软件环境:装有 MASM、DEBUG、LINK、等应用程序。

三、实验涉及的主要知识

在实际应用中,经常根据一些条件来选择一条分支执行。汇编语言的条件判断主要是通过状态寄存器中的状态位、无符号数相减或有符号相减而导致的结果来进行。

1.无条件转移指令 JMP

无条件转移指令 JMP是使程序无条件转移至目标处,又分为段内转移、段间转移。

2.条件转移指令 JXX

条件转移指令可分为三大类:

1).简单条件转移指令指令。根据单个标志位的状态判断转移条件。标志位指令转移条件意义

CF

JC CF=1 有进位/借位

JNC CF=0 无进位/借位

ZF

JE/JZ ZF=1 相等/等于 0

JNE/JNZ ZF=0 不相等/不等于 0

SF

JS SF=1 是负数

JNS SF=0 是正数

OF

JO OF=1 有溢出

JNO OF=0 无溢出

PF

JP/JPE PF=1 有偶数个 1

JNP/JPO PF=0 有奇数个 1

2).无符号数条件转移指令。

假设在条件转移指令前使用比较指令,比较两个无符号数A,B,指令进行的的操作是 A-B,其转移指令如下:

指令转移条件意义

JA/JNBE CF=0 AND ZF=0 A>B

JAE/JNB CF=0 OR ZF=1 A>=B

JB/JNAE CF=1 AND ZF=0 A

JBE/JNA CF=1 OR ZF=1 A<=B

3).带符号数条件转移指令。

指令转移条件意义

JG/JNLE SF=OF AND ZF=0 A>B

JGE/JNL SF=OF OR ZF=1 A>=B

JL/JNGE SF OF AND ZF=0 A

JLE/JNG SF OF OR ZF=1 A<=B

四、实验内容与步骤

1、判断方程 AX2+BX+C=0是否有实根。若有实根,则将字节变量 tag置 1,否则置 0。假设 A、B、C均为字节变量,数据范围为-128~127。

流程图:

(2)程序代码:

DATAS SEGMENT

A1 DB ?

B1 DB ?

C1 DB ? TAG DB ? ;此处输入数据段代码 DATAS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS START:

MOV AX,DATAS MOV DS,AX

MOV AH,01H;输入第一个数据 INT 21H

SUB AL,30H;输入数据存入A,并转化为十进制数

MOV A1,AL

MOV AH,01H;输入第二个数据 INT 21H SUB AL,30H MOV B1,AL

MOV AH,01H;输入第三个数据 INT 21H

SUB AL,30H;输入数据存入C,并转化为十进制数

MOV C1,AL

程序结果: B*B-4AC=0,>0,<0的三种情况

MOV AL,B1

MUL AL;计算B*B,结果存入AX MOV BX,AX;B*B结果存入BX

MOV AL,A1 IMUL C1 MOV CL,4

IMUL CL;计算4*A*C

CMP BX,AX JGE T1 MOV TAG,0 JMP NEXT1

T1: MOV TAG,1;有根,将TAG赋值为1 NEXT1:

ADD TAG,30H

MOV DL,TAG;输出TAG的值 MOV AH,02H INT 21H MOV AH,4CH INT 21H CODES ENDS END START

2、编写一个程序,判别键盘上输入的字符;若是 1-9字符,则显示之;若为 A-Z 字符,显

示“C”;若为 a-z字符,显示“ c”;若是回车字符 (其 ASCII码为 0DH),则结束程序,若为其它字符则显示显示“R”。

流程图:

DATAS SEGMENT

;此处输入数据段代码结果DATAS ENDS

CODES SEGMENT

ASSUME CS:CODES,DS:DATAS START:

MOV AX,DATAS

MOV DS,AX

MOV AH,01H

INT 21H

CMP AL,'1';同1比较

JNB ONE

ONE:

CMP AL,'9';同9比较

JL READ

JGE TOW

READ:MOV DL,AL

MOV AH,02H

INT 21H

MOV AH,4CH

INT 21H

TOW: CMP AL,'A';同A比较

JGE A A:

CMP AL,'Z';同Z比较

READ1:MOV DL,'C' MOV AH,02H INT 21H MOV AH,4CH INT 21H

THREE:CMP AL,'a';同a比较 JGE B;>a则转到B B: CMP AL,'z';同z比较 JL READ2 JGE FOUR READ2: MOV DL,'c' MOV AH,02H INT 21H MOV AH,4CH JL READ1 JGE THREE

INT 21H

FOUR:CMP AL,0DH JZ CR JNZ FIVE CR: MOV AH,4CH INT 21H

FIVE: MOV DL,'R' MOV AH,02H

INT 21H ;此处输入代码据段代码 MOV AH,4CH INT 21H CODES ENDS END START

3、(大家再次编成实现实验一的题目,看是否可以优化程序?)分类统计字数组 data中正数、负数和零的个数,并分别存入内存字变量Positive、Negative和Zero中,数组元素个数保存在其第一个字中。使用 Debug查看Positive、Negative和 Zero三个变量的数据。流程图

程序代码

相关文档
最新文档