CPU执行Loop指令时,要进行两步操作:

  • (cx)=(cx)-1
  • 判断cx中的值,不为零则转至标号处执行程序,如果为零则向下执行

通常我们用loop指令来实现循环功能,cx中存放循环次数。

用cx和loop指令向配合实现循环功能的程序框架如下:

         mov  cx,循环次数

s:

   循环执行的程序段

   loop  s

编程计算2^12。

assume cs:code

code segment

       mov ax, 2
       mov cx,11
s:     add ax,ax
       loop s

       mov ax,4c00h
       int 21h

code ends

end

 

计算ffff:0006单元中的数乘以3,结果存储在dx中。

assume  cs:code

code segment

       mov ax,0fffh       ;在汇编程序中,数据不能以字母开头
       mov ds,ax
       mov bx,6

       mov al,[bx]
       mov ah,0

       mov dx,0

       mov cx,3

s:     add dx,ax
       loop s

       mov ax,4c00h
       int 21h

code ends
end

 

计算ffff:0~ffff:b单元中的数据的和,结果存储在dx中。
代码中使用了一个16位寄存器来做中介,将内存单元的8位数据赋值到一个16位寄存器ax中,再将ax中的数据加到dx上,
从而使两个运算对象的类型匹配并且结果不会越界。 assume
cs:code code segment mov ax,0ffffh mov ds,ax mov bx,0 mov dx,0 mov cx,12 s: mov al,[bx] mov ah,0 add dx,ax inc bx ;ds:bx指向下一个单元 loop s mov ax,4c00h int 21h code ends end

 

将内存ffff:0~ffff:b单元中的数据复制到0:200~0:20b单元中。
这里使用两个段寄存器分别存放原始单元ffff:X和目标单元0020:X的段地址,可以省略循环中需要重复做12次的设置ds的程序员。 assume
cs:code code segment mov ax,0ffffh mov ds,ax mov ax,0020h mov es,ax mov bx,0 mov cx,12 s: mov dl,[bx] mov es:[bx], dl inc bx loop s mov ax,4c00h int 21h code ends end

 

assume  cs:code

code segment

     mov ax,cs
     mov ds,ax
     mov ax,0020h
     mov es,ax
     mov bx,0
     mov cx,17h

s:   mov al,[bx]
     mov es:[bx],al
     inc bx
     loop s

     mov ax,4c00h
     int 21h

code ends

end

 

posted on 2018-11-06 11:02  迷心迷  阅读(905)  评论(0编辑  收藏  举报