下面是loop指令的简单总结。
详细的内容,可以参看王爽老师的《汇编语言》。
重要的东西不是loop指令如何使用,而是理解loop指令的内在实现,加深程序在计算机中运行的理解。
loop指令
先用loop的简单程序引入
题目:编程,用加法计算123*236,结果存在ax中。思考后看分析。
分析:将123累加236次。
assume cs:code
code segment
mov ax,0
mov cx,236
s: add ax,123
loop s
mov ax,4c00h
int 21h
code ends
end
要点:
- 在cx中存放循环次数。
- s为标号,代表一个地址。
- 循环的内容放在标号和loop之间。
[bx]
mov ax,[bx]
将段地址在ds中,偏移地址为bx中的内容。将该内存单元的内容放入ax中
题目:将ffff:0006单元中的数乘以3,结果存储在dx中。
assume cs:code
code segment
mov ax,0ffffh
mov ds,ax
mov dl,[6]
mov dh,0
mov cx,2
s: add dx,dx
loop s
mov ax,4c00h
int 21h
code ends
end
注:在汇编语言中,数字不能以字母开头,所以前面加0
下面这个程序难度有点大,需要上机调试才能很清楚其中的过程。如果能彻底看懂这段代码,将是非常开心的事情。
题目:下面程序的功能是将”mov ax,4c00h“之前的指令,复制到内存0:200处,补全程序,。上级调试,跟踪运行结果。
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
思考:是cs;ds行不行。17h是怎么得出来。
还有些题目,也挺有意思。
1、计算ffff:0~ffff:b单元数据的和。结果存放在bx中。
2、将内存ffff:0 ~ ffff:b单元的数据,复制到0:200~0:20b中。
3、编程,向内存0:200 ~ 0:23F依次传送数据0~63(3FH),程序中使用九条指令,9条指令包括”mov ax,4c00h“和”int 21h“