第五章 [BX]和loop指令
[BX]:bx是一个间接寻址单元,与[0]类似,它可以将一个内存单元的内容送入寄存器中,如mov ax,[bx],[bx]被看作偏移地址,默认的段地址为ds。寄存器如果用ax,则内存单元的长度为2,如果用al,则内存单元的长度为1。
loop:即循环,使用标号以及寄存器cx可以将程序进行循环操作,如
mov cx,3
s:add ax,1
loop s
即可认为s标记的指令被执行了3次
嵌套循环可以用push和pop来保持外层的cx不被内部的cx干扰,如
mov cx,3
s:push cx
add ax,3
mov cx,2
s1:sub ax,1
loop s1
pop cx
loop s
这就是嵌套循环,sub指令总共执行了6次
第六章、包含多个段的程序
db:每个数据占一个字节单位
dw:每个数据占一个字单位即两个字节单位
我们使用不同的段,可以将数据和程序分开存放,让程序更加整洁,并且解决了程序一个段所需空间不能超过64kb的问题.
同时要记住,一个段内的数据所占的空间为 ((N+15)/16)×16,且(N+15)/16取大于等于它的最小整数,原理如下
在8086CPU架构上,段是以paragraph(16-byte)对齐的。程序默认以16字节为边界对齐,所以不足16字节的部分数据也要填够16字节。“对齐”是alignment,这种填充叫做padding。16字节成一小段,称为节
第七章 更灵活的定位内存地址的方法
两个指令
and:逻辑与,同为1则为1
or:逻辑或,有1则为1
大小写转化,大写小写ASCII相差20h,即32,大写转小写加上32,小写转大写加上32
与bx功能相近寄存器:si,di
idata:表示常量
内存单元可以用[bx+idata]、[bx+si]、[bc+si+idata]等方式表示。
第八章 数据处理的两个基本问题
与bx功能相近的寄存器:si、di、bp
div指令:除法运算
除数:有8位和16位两种,在一个reg或内存单元中。
被除数:默认放在ax或dx和ax中,如果除数为8位,被除数则为16位,默认放在ax寄存器中;如果除数为16位,被除数则为32位,在dx和ax中存放,dx放高16位、ax放低16位