数据处理的两个基本问题
bx、si、di、bp
在8086CPU下,只有 bx、si、di、bp 这四个可以用在[...]中进行内存单元的寻址
就好像 [ax] 是错误的,[bx] 是正确的
[...]的用法
在[...]中,如上四个寄存器可以单个出现,或者以以下的组合出现,其他的都是不合法的
bx 和 si、bx 和 di、bp 和 si、bp 和 di
如[bx + bp]、[si + di]是错误的,[bx + si]是正确的
只要在[...]中使用bp,而指令中没有显性的给出段地址,段地址就默认在 ss 中
如 mov ax,[bp] --> 将 ss:bp 中的数据赋给 ax
指令处理的数据长度:
(1)通过寄存器名指明要处理的数据的尺寸
(2)在没有寄存器名存在的情况下,使用 X ptr 指明内存单元的长度,X 在汇编指令中可以为 word / byte
如: (字型数据 和 字节数据)
mov word ptr ds:[0],1 mov byte ptr ds:[0],1
inc word ptr [bx] inc byte ptr [bx]
inc word ptr ds:[0] inc byte ptr ds:[0]
add word ptr [bx],2 add byte ptr [bx],2
(3)栈指令默认是字操作
伪指令dd(用来定义dword(double word双字))型数据 即32位
dup(和dp,dw,dd等数据定义伪指令配合使用,用来进行数据的重复)
格式: dp/dw/dd 重复的次数 dup(重复的 字节 / 字 / 双字 型数据)
在定义一个较大的空间时如栈段,可以有效的减少工作量
如:定义一个100个字节空间的栈段
两者是等效的
如:
dp 3 dup(0) --> 定义了 3 个字节 它们的值都是 0
dp 3 dup(0,1,2) --> 定义了 9 个字节 它们是 0、1、2、0、1、2、0、1、2
dp 3 dup('abc','ABC') --> 定义了 18 个字节 它们是'abcABCabcABCabcABC' 相当于 dp‘abcABCabcABCabcABC’