实验4 利用跳转指令构造循环

我从前最怕旁人火眼金睛,如今,倒是盼着有人能够洞幽烛远。如此,就能赠我一点欢喜。

一、实验目的

  1. 能分析跳转指令构成的程序的运行原理
  2. 会用跳转指令构造循环解决应用问题
  3. 体验显示缓冲区的要求

二、实验内容过程记录

任务1-奇怪的程序?(教材实验8)

人工分析下面的程序,然后再在Debug程序中单步执行,观察每一步完成后的结果,并解释出现的现象。

程序如下:

assume cs:codesg

codesg segment

       mov ax,4c00h

       int 21h

start: mov ax, 0

     s: nop

       nop

       mov di, offset s

       mov si, offset s2

       mov ax, cs:[si]

       mov cs:[di], ax

    s0:jmp short s

    s1:mov ax, 0

       int 21h

       mov ax, 0

    s2:jmp short s1

       nop

codesg ends

end start

程序的执行结果将是:

程序可以正常执行结束!故mov ax,4c00   int 21h这两条语句是有执行的。

将连接好的程序加载后单步运行。

实验4 利用跳转指令构造循环

实验4 利用跳转指令构造循环

EBF6为jmp 0000的机器代码,跳到程序地址为0的地方,汇编指令为mov ax,4c00处。

实验4 利用跳转指令构造循环

下面是运行过程中看到的代码变化的截屏:

(特别注意程序未开始执行时s处和s2处对应的指令及机器码,以及程序执行到s0处时,s处对应的指令和机器码。)

未开始的时:

实验4 利用跳转指令构造循环

执行到s0处时:

实验4 利用跳转指令构造循环

从这个程序中,我学到了……

任务2- 循环程序的实现

在下面的数据段中,给出了全班3名同学OS、AL、SE、DB课程的成绩,请编程计算出平均成绩,写在 ? 处。要求用jcxz指令构造循环

datasg segment

  db '201658501101','ZhangSan',90,100,76,89,0

  db '201658501102','LiSi    ',97,82,79,88,0

  db '201658501103','WangWu  ',77,98,89,91,0

  db 4 ;这是课程门数,将要用于作除数,偏移量为75

datasg ends

下面是程序流程图:

实验4 利用跳转指令构造循环

下面是程序,以及运行后的截图,程序中已经加入了必要的注释:

实验4 利用跳转指令构造循环

实验4 利用跳转指令构造循环

任务3- 向显存中传入字符(即教材实验9

编程序,在屏幕的中间分别显示绿色、绿底红色、白底蓝色的字符串 'YantaiUniversity'

提示:要计算出“屏幕的中间”对应的内存单元,然后将字符以及对应的属性字节写入到内存中。

实验4 利用跳转指令构造循环

实验4 利用跳转指令构造循环

实验4 利用跳转指令构造循环

一共25行,需要显示3行,所以中间位置首先要找到第12行,每行160个字节,所以到中间地址为11*106=6e0H,显示16个字符,因为每个字符还要有属性,所以一行占据32个字节,故中间物理地址为b8000h+6e0H+(160-32)/2=0b872h

下面是程序,以及运行结果

实验4 利用跳转指令构造循环

实验4 利用跳转指令构造循环