第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

posted on 2018-12-24 12:01  远大前程123  阅读(213)  评论(0编辑  收藏  举报