实验七:循环程序设计

  1.  实验目的

1)了解8086汇编程序的基本结构

2)掌握循环程序的基本设计方法。

  1. 实验设备

微型计算机、emu8086

  1. 实验原理

循环程序是把一个程序段重复执行多次的程序结构。循环程序包括三个部分:初始化部分、循环体、循环控制部分。初始化部分用于对循环程序的参数(循环次数、控制条件、指针等)设置初值。循环体是要被重复执行的程序段。循环控制部分用于决定是否退出循环。循环控制指令可以是转移指令或LOOP指令。当已知循环次数或控制条件为ZF时,用LOOP指令控制循环是最简单的方法。

本节实验显示的图形可以分为上下两部分。对于上半部分图形,需要设置两层循环,其中外循环控制显示几行(初始为9,每次减1,减到0时结束);内循环控制当前行显示几个′*′(初值为1,每次加1)。对于下半部分图形,也需要设置两层循环,其中外循环控制显示几行(初始为9,每次减1,减到0时结束);内循环控制当前行显示几个空格(初值为8,每次减1)和几个′*′(初值为1,每次加1)。

在屏幕上显示单个字符的语句如下:

    MOV DL,<要显示的字符>

    MOV AH,2

    INT 21H

  1. 实验内容

在屏幕上显示如下图形。

*

**

***

****

*****

******

*******

********

*********

        *

       **

      ***

     ****

    *****

   ******

  *******

 ********

*********

程序的框架如下:

data segment

    pkey db "press any key...$"

ends

code segment

start:

; set segment registers:

    mov ax, data

    mov ds, ax

    mov es, ax

    ;初始化bl和bh,显示上半部分

next:

    ;内循环计数器 cl=bh

next1:

    ;显示’*’

    cl=cl-1

    ;如果cl≠0,则转到next1

    ;显示’0DH’

    ;显示’0AH’

    bh=bh+1

    bl=bl-1

    ;如果bl≠0,则转到next

    ;初始化bl、ch和bh,显示下半部分

next2:

    cl=ch;设置空格数

;如果cl=0,则转到next3

    next4:

    ;显示’ ’

    ;cl=cl-1

    ;如果cl≠0,则转到next4

next3:

cl=bh

;如果cl=0,则转到next5

    next6:

    ;显示’*’

    cl=cl-1

    ;如果cl≠0,则转到next6

next5:

;显示’0DH’

    ;显示’0AH’

    ch=ch-1

    bh=bh+1

    bl=bl-1

    ;如果bl≠0,则转到next2

    lea dx, pkey

    mov ah, 9

    int 21h        ; output string at ds:dx

    ; wait for any key....   

    mov ah, 1

    int 21h

    mov ax, 4c00h ; exit to operating system.

    int 21h   

ends

end start ; set entry point and stop the assembler.

  1. 实验习题

若要显示如下形式的三角形,该如何修改程序?

        *

       ***

      *****

     *******

    *********

   ***********

  *************

 ***************

*****************

  1.  实验报告要求
  1. 写出完整的程序。
  2. 使用不同数据测试程序并解释运行结果。

--------------------------------------------------------------------------------------------------------------------------------

程序代码1 :

MOV CX,9
A:MOV BX,CX
MOV AX,9
SUB AX,BX
MOV CX,AX
ADD CX,1

B:MOV DL,'*'
MOV AH,2
INT 21H
LOOP B


MOV DL,0DH
MOV AH,2
INT 21H
MOV DL,0AH
MOV AH,2
INT 21H
MOV CX,BX
LOOP A

MOV CX,9
C:MOV BX,CX
MOV AX,BX
SUB AX,1
MOV CX,AX
CMP CX,0
JE F
D:MOV DL,20H
MOV AH,2
INT 21H
LOOP D

F:
MOV AX,9
SUB AX,BX
MOV CX,AX
ADD CX,1

E:MOV DL,'*'
MOV AH,2
INT 21H
LOOP E

MOV DL,0DH
MOV AH,2
INT 21H
MOV DL,0AH
MOV AH,2
INT 21H
MOV CX,BX
LOOP C

运行结果图:

----------------------------------------------------------------------------------------------------------------------------

实验习题1:

代码如下:
 

 MOV CX,9
C:MOV BX,CX
  MOV AX,BX
  SUB AX,1
  MOV CX,AX
  CMP CX,0
  JE F 

D:MOV DL,20H
  MOV AH,2
  INT 21H
   SUB CX,1
  LOOP D

F:
  MOV AX,9
  SUB AX,BX
  MOV CX,AX
  ADD CX,1

E:MOV DL,'*'
  MOV AH,2
  INT 21H
  LOOP E 

   

 MOV DL,0DH
 MOV AH,2
 INT 21H
 MOV DL,0AH
 MOV AH,2
 INT 21H
 MOV CX,BX
 SUB CX,1
 LOOP C 

运行截图:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值