第五章 [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这段空间。
- [kanwangxue] 如果是文字的,不是特别好啊,体力活,如果文字还加点动画,那就必须顶了。 01/15 01:10
- [kanwangxue] 必须顶啊。 01/15 00:54
- [ltoiii] 既然是实现loop功能,是否要考虑s和se标号? mov bx,offset s - offset 12/09 12:09
- [xiaoyao2012] 正确 11/01 15:33
- [xuer2016] 又找到2条被我忽视的地方: 1.PUSH 和 POP 针对字单元 2.POP 不能是CS 10/26 10:57
- [xuer2016] 学习了 我书写不规范,16进制字母前不加0,后面不加H,以后要注意了。。。 10/26 10:51
- [xuer2016] 来老师这学习下 10/26 10:31
- [youthangel] 不妙,CPU的利用率一下子就上去了。还好我的处理器不是太弱,35%左右的利用率。建议博主在修改一下 10/20 08:23
- [fpamc] 在我心里她就是我的女神。 10/02 08:58
- [newpeople] 你女朋友用得了简直就是一个女神…… 10/01 08:10
- [99998888] 请您指点一下如何找到会ASSEMBLER 语言的翻译,翻译成中文或英文。我的QQ ; 9097815 07/25 09:56
- [jeremy] 我觉得你学习的挺好,可以加你扣扣吗?我的469614823 08/07 14:46
- [zhangbo0805] 哈哈, 你好呀!很希望认识你呀!我发现你学习的积极性很高!正想向您学习呢! 07/31 23:31
- [tomato] 知道了,排得还挺满。 05/29 16:35
- [tomato] 现在学习情况怎么样?在做课设二还是什么? 05/29 10:41
- [tomato] 你的留言收到了。 05/05 23:51
- [fpamc] 开始学习c咯! 05/03 21:40
- [fpamc] 居然不能发博客了……! 04/22 21:03
- [tomato] 你相册中的游戏界面我看过了,非常好,界面很漂亮,很有创造力。博主,很有潜力。加油,一定能把这个游戏做 04/20 23:46
- [fpamc] 忙了半个月,不在家,没时间学习汇编。 但是在途中想到了一个有史以来最难的程序。对于刚学完9章的我。 04/13 20:56