汇编语言分支结构程序设计

实验七分支结构程序设计

一、实验目得

掌握条件转移指令得使用方法及指令对标志寄存器中各标志位得影响;掌握标志位与转移指令之间得关系;会用条件转移指令与无条件转移指令设计多分支结构程序;掌握设置断点调试程序得方法。

二、示例

1、内存自BUF单元开始得缓冲区连续存放着10个学生得英文分数,编程序统计其中90~

100,60~89,60以下者各有多少人?并把90—100分人数结果存放在P1单元中、60-89分人数结果存放在P2单元中,60分以下人数结果存放在P3单元中(P1、P2、P3为数据段得单元),最后把P1、P2、P3中得数以"P1=?、P2=?、P3=?”显示在屏幕上。(注:数据以10进制显示)

DATA SEGMENT

BUF DB70H,58H,50H,91H,99H,62H,75H,82H,74H,60H ;定义BUF单元地址开始得缓冲区得数据

ORG 0020H ;程序执行时,将P1送到0200H内存单元

P1DB 0

ORG 0030H ;程序执行时,将P2送到0300H内存单元

P2DB0

ORG0040H

P3 DB 0 ;程序执行时,将P3送到0400H内存单元

ORG 0050H ;程序执行时,将DP1送到0500H内存单元

DP1 DB’P1= $'

ORG0060H ;程序执行时,将DP2送到0600H内存单元

DP2 DB'P2= $'

ORG0070H ;程序执行时,将DP3送到0700H内存单元

DP3 DB'P3=$'

ORG 0080H ;程序执行时,将COUNT送到0800H内存单元

COUNT DW 10 ;'$'为地址运算符,返回当前程序语句得地址偏移值

DATA ENDS;定义数据段

CSEG SEGMENT

ASSUME CS:CSEG,DS:DATA

PUSH DS ;将DS压入堆栈

SUB AX,AX;将AX内存器内容清空

PUSH AX

START:MOV AX,DATA

MOV DS,AX ;将数据传给数据段DS

MOVCX,COUNT ;设置计数器CX,最多为10

MOV SI,0 ;给SI赋值为0

LP1:

MOV AL,BUF[SI] ;将BUF内存单元得第si个内容赋值给AL

CMPAL,90H ;判断该学生得分数就是否>=90

JNB LP2 ;若不低于90则跳转到LP2

CMP AL,60H ;判断该学生得分数就是否〉=60

JC LP3 ;若产生进位则跳转到LP3

INC P2 ;将分数在60—89得学生得分数个数存放到P2中

JMP LP5 ;跳转到LP5,即循环遍历数组BUF

LP3: INC P3;将P3中得个数+1

JMP LP5;跳转到LP5

LP2:INC P1 ;给P1中得个数+1

LP5:INCSI ;将SI进行+1操作,即下一个成绩分数 LOOP LP1 ;循环LP1

LEADX,DP1

MOVAH,09H

INT 21H

MOV DL,P1

ADDDL,30H ;转对应得ASCII值

MOVAH,2

INT 21H ;将P1数据转10进制输出

LEA DX,DP2

MOVAH,09H

INT 21H

MOV DL,P2

ADD DL,30H ;转对应得ASCII值

MOV AH,2

INT 21H ;将P2数据转10进制输出

LEA DX,DP3

MOV AH,09H

INT 21H

MOVDL,P3

ADDDL,30H;转对应得ASCII值

MOV AH,2

INT 21H

MOVAH,4CH

INT21H ;将P3数据转10进制输出

CSEG ENDS

ENDSTART

对上述程序加上注释,并运行观察结果。

运行结果:

BUF开始得内存单元得10个数中有2个>=90,6个在60—89,2个在60以下验证正确

三、实验题

1已知DATAX与DATAY单元各存放一个带符号字节数据,从键盘上接收加(+)、减(-)、乘(*)或除(/)符号,然后完成相应运算,结果存入RLT单元.

四、实验报告

1、总结调试分支程序得方法;

2、写出程序清单,并记录执行结果。

解:

1.总结调试分支程序得方法

将每个分支得功能编写清楚后,根据运行结果与自身判断结果相比较,若有误,则单步执行程序,观察程序运行得每一步结果变化就是否与自身想象得一样。

2.已知DATAX与DATAY单元各存放一个带符号字节数据,从键盘上接收加(+)、减(—)、乘(*)或除(/)符号,然后完成相应运算,结果存入RLT单元.

程序代码:

DATAS SEGMENT

DATAX DB 9H

DATAYDB 2H

?RLTDB1DUP(?)

;此处输入数据段代码

DATAS ENDS

CODES SEGMENT

ASSUMECS:CODES,DS:DATAS

START:

MOV AX,DATAS

MOVDS,AX ;将DATAS中得数据存入DS

MOV BL,DATAX ;将DATAX送入BL

MOV BH,DATAY ;将DATAY送入BH

MOVAH,01H

int 21H ;DOS功能调用,等待键盘输入一个值

CMP AL,’+’

JE addition ;若输入符号为'+’,则跳转到addition CMPAL,’-’

JE subtraction;若输入符号为’—’,则跳转到subtractionCMPAL,'*'

JE multiplication;若输入符号为’*',则跳转到multiplication CMP AL,'/'

JE division ;若输入符号为’/’,则跳转到division

addition:

ADD BL,BH ;将BL,BH内容相加

JMP print ;跳转到输出过程

subtraction:

SUB BL,BH;将BL,BH内容相减

JMP print

multiplication:

MOVAL,BH

MUL BL ;将BL,BH内容相乘

MOV BL,AL

JMP print

division:

MOVAL,BL

SUBAH,AH

DIV BH ;将BL,BH内容相除

MOV BL,AL

JMP print

print:

MOV AL,BL

MOVCL,4

SHR AL,CL ;将AL数据逻辑右移4位

ADD AL,30H ;将AL数据转为对应ASCII值

CMP AL,39H ;比较AL中数据与39H得大小

JBE look1 ;当AL〈=39H时,跳转到look1

ADD AL,07H ;>=39H,则只加07H

look1:

MOV DL,AL

MOV RLT,AL

MOVAH,02H

INT 21H

MOVAL,BL

ANDAL,0FH

ADDAL,30H

CMP AL,39H

JBE look2

ADD AL,07H

look2:

MOV DL,AL

MOV RLT,AL

MOVAH,02H;dos功能调用,输出DL INT 21H

;此处输入代码段代码

MOV AH,4CH

INT 21H

CODES ENDS

END START

运行结果:

加:

减:

乘:

除:

人工验算结果为正确得。

相关主题
相关文档
最新文档