第5到8章
第五章 [BX]和loop
1、[BX]表示的是内存单元,它的偏移地址在bx中,间接给出内存单元的偏移地址,则段地址默认在ds中
2、内存单元间接表示:[bx]
(1)mov dl,[bx]
间接寻址,可以使用bx间接访问内存单元,间接给出内存单元的偏移地址,默认段地址在ds中
(2)mov ax,[bx]
bx中存放的数据作为一个偏移地址EA,段地址SA默认在ds中,将SA:EA处的数据送入ax中。即:(ax)=((ds)* 16 +(bx))
(3)mov [bx],ax
bx中存放的数据作为一个偏移地址EA,段地址SA默认在ds中,将ax中的数据送入内存SA:EA处。即:((ds)* 16 +(bx))=(ax)
3、loop指令是否执行取决于cx的值,若cx=0,则执行loop后面的其他指令,若cx≠0,则跳转到标号处执行
4、遇到loop指令时,使用p命令来执行,Debug就会自动重复执行循环中的命令,直到(cx)= 0为止
5、如果段地址不在ds中,则需要使用cs,ss,es等段前缀,显式地指明内存单元的段地址
6、系统中某些地址处存放着重要的数据,dos方式下,一般情况,可以把数据写在0:200~0:2ff空间中
第六章 包含多个段的程序
① 使用伪指令segment和ends定义逻辑段后,究竟是用作代码段、数据段还是栈,由程序员指定。
② 使用assume仅仅表示将某个逻辑段和某个段寄存器关联起来;真正当作特定的段使用,需要在代码段中设置相应的段寄存器值,如ds, ss。
③ 段名代表的是段地址,是常数。不能使用mov直接送入段寄存器。
第七章 更灵活的定位内存地址方法
1.汇编指令: and和or
and指令:逻辑与指令,按位进行与运算。通过该指令可将操作对象的相应位设为0,其他位不变。
or指令:逻辑或指令,按位进行或运算。通过该指令可将操作系统的相应位设为1.
2.汇编中的字符处理
在汇编源程序中:既可以使用诸如'a'这样的字符写法,也可以使用ASCⅡ码形式的写法。
在debug中: a命令中不支持诸如'a'这样的写法
e命令中支持诸如'a'这样的写法,也支持ASCⅡ码形式的写法
3.其它灵活的内存地址表示
用[bx + idata]表示表示内存单元。idata表示常数。
用[si]表示表示内存单元。
用[si + idata]表示表示内存单元。idata表示常量。
用[di]表示表示内存单元。
用[di + idata]表示表示内存单元。idata表示常量。
用[bx+di], [bx+si]表示表示内存单元。
用[bx+di+idata], [bx+si+idata]表示内存单元。
第八章 数据处理的两个基本问题
1.汇编指令中操作数的类型
常数位于cpu内部,指令缓冲器;寄存器位于cpu内部,寄存器;
2.汇编指令中内存单元操作数的地址表示
在8086中,可用于表示内存偏移地址的寄存器只有: BX, SI, DI和BP。
这些寄存器可以单个出现在[]中,也可以以特定组合方式出现。
使用BX, SI, DI表示偏移地址时,默认段地址在DS中;
使用BP表示偏移地址时,默认段地址在SS中。
3.汇编伪指令: db, dw, dd, dup
data segment
db定义字节类型变量,一个字节数据占1个字节单元,读完一个,偏移量加1
dw定义字类型变量,一个字数据占2个字节单元,读完一个,偏移量加2
dd定义双字类型变量,一个双字数据占4个字节单元,读完一个,偏移量加4
data ends
data segment
db 0,0,0,0,0,0,0,0
db 8 dup(0); 预留8个字节单元,每个单元值为0
dd 8 dup(?); 预留8个字节单元,每个单元值未分配
data ends