汇编语言程序设计第五章

5.1 【BX】

 mov ax,[bx]  功能:bx中存放的数据作为一个偏移地址EA,段地址SA默认在ds中,将SA:EA处的数据送入ax中。即:(ax)=((ds)*16+(bx))。

mov [bx],ax 功能:bx中存放的数据作为一个偏移地址EA,段地址SA默认在ds中,将ax中的数据送入内存SA:EA中。即:((ds)*16+(bx))=(ax)。

5.2 Loop指令

loop指令的格式:loop 标号。CPU执行loop指令有两个步骤:①(cx)=(cx)-1②判断cx中的值,不为零则转至标号处执行程序,如果为零则向下执行。

三个要点:(1)在cx中存放循环的次数。(2)loop指令中的标号所标识的地址要在前面。(3)要循环执行的程序段,要写在标号和loop指令的中间。

程序框架:

      mov cx,循环次数

s:

      循环执行的程序段

       loop s

5.3在Debug中跟踪用loop指令实现的循环程序

在汇编源程序中,数据不能以字母开头,所以要在前面加0。

5.4Debug和汇编编译器masm对指令的不同处理

(1)在汇编语言中,如果一个指令要访问内存单元,则在指令中必须用[...]来表示内存单元,如果在[...]中直接用一个常量idata给出内存地址的偏移地址,就要在"[ ]"前面显示地给出段地址所在的段寄存器。

比如,mov al,ds:[0]

如果没有在“【】”的前面显示的给出段寄存器,比如mov al,[0]那么,编译器masm将把指令中的“【idata】”理解为“idata”。

(2)如果在“【】”里用寄存器,比如bx,间接给出内存单元的偏移地址,则段地址默认在ds中。当然,也可以显示地给出段地址所在的段寄存器。

5.5loop和[bx]的联合应用

5.6段前缀

出现在访问内存单元的指令中,用于显示地指明内存单元的段地址的“ds:”、“cs:”、“ss:”、“es:”,在汇编语言中称为段前缀。

5.7一段安全的空间

(1)直接向一段内存中写入内容,

(2)这段内存空间不应存放系统或其他程序的数据或代码,否则写入操作很可能引发错误;

(3)DOS方式下,一般情况,0:200~0:2ff空间中没有系统或其他程序的数据或代码;

(4)需要直接向一段内存中写入内容时,就使用0:200~0:2ff这段空间。

5.8段前缀的使用(见实验四)

猜你喜欢

转载自www.cnblogs.com/sqy1999/p/10016089.html