汇编语言中的约定
(…)和[ ]
(…):表示寄存器和单元的内容
(ax)=100 意思为ax寄存器中的值为100.
[ ]:表示内存单元,通常与DS段寄存器一起使用
mov ax,DS:[100] 意思为将DS:[100]单元的内容送入ax中
idata
符号idata的意思表示一个常量。
mov ax,idata 意思是将一个常量送入ax中,idata指代这里可以使用某个具体的数
标号
在汇编中标号代表一个地址。
1 | assume cs:code |
在这里可以看到除了我们的汇编语句以外,还有一个单独的s,这个s就是标号,表示add ax,ax的地址。loop表示循环,后面会介绍。
在前一章里面的start表示代码段的开始地址,就是一个标号。
loop指令
某些时候我需要重复的执行一条语句,我们书写多遍会很麻烦,这个时候loop指令就可以完成这个工作,loop指令在使用的时候有那种情况
单独使用
首先我们给cx赋值,然后每执行一遍,给cx减一,cx不为0则重复执行。
就如上面的代码,我们先给cx赋值要执行的次数,然后标记要重复执行的代码地址,接着使用loop执行。
每执行一遍cx=cx-1,当cx=0时则停止执行。
与bx连用
这里我们需要结合bx一起使用。bx表示起始偏移地址,cx表示循环次数,每执行一次cx=cx-1。当cx为0时停止。
使用情况:操作一段连续的空间时
1 | 将ffff:0~ffff:b单元中的数据累加结果存储到dx中: |
需要注意的是:
bx增加多少取决与累加的数据类型,数据类型可以看寄存器是ax还是al,ah,详细的将在后面介绍。
段前缀
我们在使用内存内容时,是采用的DS:[…],但是当有多个地址要操作时,我们也会使用操作附加数据的es寄存器。同样也是使用ES:[…]来表示。
因此我们引入了一个段前缀:
1 | mov ax,DS:[100] ;将DS:[100]单元的数据传入ax中 |
即显示的在前面加上段寄存器。