汇编网首页登录博客注册
fpamc的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
学习动态

[2012-02-29 22:52] 第五章笔记

第五章 [BX]和loop指令
[bx]表示一个内存单元,它的偏移地址放在bx中。
要完整的描述一个内存单元,需要两种信息:①内存单元的地址;②内存单元的长度(类型)。
描述性的符号“()”来表示一个寄存器或一个内存单元的内容。
“()”中的元素可以有3中类型:①寄存器名;②段寄存器名;③内存单元的物理地址。
“()”所表示的数据有两种类型:①字节;②字。是哪种类型有寄存器名或者具体运算决定。
约定符号idata表示常量。

规定只有bx,bp,si,di才能作为寻址寄存器。

关于inc指令
inc指令是汇编语言中算术运算类指令,起到自加1的功能。
INC 加1指令 INC(INCrement by 1) 
格式: INC OPRD 
功能: OPRD<--OPRD+1
说明: 
1. OPRD 为寄存器或存储器操作数. 
2. 这条指令执行结果影响AF、OF、PF、SF、ZF标志位,但不影响CF标志位.(目前不懂)

Loop指令
loop指令的格式是:loop 标号,CPU执行loop指令的时候,要进行两步操作;
①(cx)=(cx)-1
②判断cx中的值,不为零则转至标号处执行程序,如果为零则向下执行。

cx中的值影响着loop指令的执行结果。通常我们用loop指令来实现循环功能,cx中存放循环次数。
N*2可用N+N实现。
在汇编语言中,标号代表了一个地址。

cx和loop指令相配合实现循环功能的3个要点:
①在cx中存放循环次数;
②loop指令中的标号所标识地址要在前面;
③要循环执行的程序段,要写在标号和loop指令的中间。

用cx和loop指令相配合实现循环功能的程序框架如下:
    mov cx,循环次数
s:
循环执行的程序段
    loop s

在汇编源程序中,数据不能以字母开头。

遇到loop指令时,使用p命令来执行,debug就会自动重复执行循环中的指令,直到执行完。

关于G命令:可以设置1到10个临时断点,
关于debug的g命令的breakpoints(断点地址)是这个样子的:
breakpoints可以设置10个,当debug遇到设置的第一个breakpoints时就停止运行,并暂时取消所有的breakpoints,然后显示和t命令执行一样的寄存器信息,如果继续g就从当前breakpoints接着执行,并不会受上一个g命令设置的breakpoints影响。

我们如何在源程序中实现将内存单元中的数据送入寄存器中呢?
①可将偏移地址送入bx寄存器中,用[bx]的方式来访问内存单元;段地址默认放在ds中。
②要在“[ ]”的前面显式的给出段地址所在的段寄存器。

这些出现在访问内存单元的指令中,用于显式地指明内存单元的段地址的“ds:”“cs:”“ss:”“es:”,在汇编语言中称为段前缀。
显式的用段前缀给出单元的段地址,这样就不必在循环中重复设置DS。

在一般的PC机中,DOS方式下,DOS和其他合法的程序一般都不会使用0:200~0:2ff(00200h~002ffh)的256个字节的空间。为了谨慎起见,在进入DOS后,我们可以先用debug查看一下。

总结:
1.我们需要直接向一段内存中写入内容;
2.这段内存空间不应存放系统或其他程序的数据和代码,否则写入操作很可能引发错误;
3.DOS方式下,一般情况,0:200~0:2ff空间中没有系统或其他程序的数据或代码;
4.以后,我们需要直接向一段内存中写入内容时,就使用0:200~0:2ff这段空间。
评论次数(2)  |  浏览次数(199)  |  类型(汇编笔记) |  收藏此文  | 

[  tomato   发表于  2012-03-01 21:41  ]

认真的学习态度值得鼓励。

[  fpamc   发表于  2012-03-01 22:19  ]

呵呵,谢谢tomato老师的鼓励!

 
 请输入验证码  (提示:点击验证码输入框,以获取验证码