数据处理的两个基本问题

本章对前面的所有内容是具有总结性的;我们知道,计算机是进行数据处理、运算的机器,那么有两个基本的问题就包含在其中:

(1)处理的数据在什么地方?

(2)要处理的数据有多长?

我们定义的描述性符号:reg和sreg

为了描述上的简洁,在以后的课程中,我们将使用两个描述性的符号 reg来表示一个寄存器,用sreg表示一个段寄存器。

reg的集合包括:ax、bx、cx、dx、ah、al、bh、bl、ch、cl、dh、dl、sp、bp、si、di;

sreg的集合包括:ds、ss、cs、es。

1.总结一下内存单元的用法

只有这4个寄存器(bx、bp、si、di)可以用在“[…]” 中来进行内存单元的寻址。

正确的指令

mov ax,[bx]

mov ax,[bx+si]

mov ax,[bx+di]

mov ax,[bp]

mov ax,[bp+si]

mov ax,[bp+di]

错误的指令

mov ax,[cx]

mov ax,[ax]

mov ax,[dx]

mov ax,[ds]

在“[…]” 中,这4个寄存器(bx、bp、si、di)可以单个出现,或只能以四种组合出现:bx和si、bx和di、bp和si、bp和di

错误的用法:

mov ax,[bx+bp]

mov ax,[si+di]

正确的用法:

mov ax,[bx]

mov ax,[si]

mov ax,[di]

mov ax,[bp]

mov ax,[bx+si]

mov ax,[bx+di]

mov ax,[bp+si]

mov ax,[bp+di]

mov ax,[bx+si+idata]

mov ax,[bx+di+idata]

mov ax,[bp+si+idata]

mov ax,[bp+di+idata]

只要在[…]中使用寄存器bp,而指令中没有显性的给出段地址,段地址就默认在ss中。

比如:

mov ax,[bp] 含义:(ax)=((ss)*16+(bp))

mov ax,[bp+idata] 含义:(ax)=((ss)*16+(bp)+idata)

mov ax,[bp+si] 含义:(ax)=((ss)*16+(bp)+(si))

mov ax,[bp+si+idata] 含义:(ax)=((ss)*16+(bp)+(si)+idata)

附:mov ax,[0]

mov ax,[bx]

mov ax,[bx+8]

mov ax,[bx+si]

mov ax,[bx+si+8]

段地址默认在ds中!


mov ax,[bp]

mov ax,[bp+8]

mov ax,[bp+si]

mov ax,[bp+si+8]

段地址默认在ss中!


mov ax,ds:[bp] 含义:(ax)=((ds)*16+(bp))

mov ax,es:[bx] 含义:(ax)=((es)*16+(bx))

mov ax,ss:[bx+si] 含义:(ax)=((ss)*16+(bx)+(si))

mov ax,cs:[bx+si+8] 含义:(ax)=((cs)*16+(bx)+(si)+8)

显性的给出存放段地址的寄存器。


数据处理的两个基本问题_第1张图片
附:计算机寻址方式

指令要处理的数据有多长?

(1)通过寄存器名指明要处理的数据的尺寸。

(2)在没有寄存器名存在的情况下,用操作符X ptr指明内存单元的长度,X在汇编指令中可以为word或byte。

(3)其他方法

如:下面的指令中,寄存器指明了指令进行的是字操作:

mov ax,1

mov bx,ds:[0]

mov ds,ax

mov ds:[0],ax

inc ax

add ax,1000


下面的指令中,寄存器指明了指令进行的是字节操作:

mov al,1

mov al,bl

mov al,ds:[0]

mov ds:[0],al

inc al

add al,100


下面的指令中,用word ptr指明了指令访问的内存单元是一个字单元:

mov word ptr ds:[0],1

inc word ptr [bx]

inc word ptr ds:[0]

add word ptr [bx],2


下面的指令中,用byte ptr指明了指令访问的内存单元是一个字节单元:

mov byte ptr ds:[0],1

inc byte ptr [bx]

inc byte ptr ds:[0]

add byte ptr [bx],2


例子:假设我们用Debug查看内存的结果如下:2000:1000 FF FF FF FF FF FF……

那么指令:

mov ax,2000H

mov ds,ax

mov byte ptr [1000H], 1

将使内存中的内容变为:2000:1000 01 FF FF FF FF FF……

而指令:

mov ax,2000H

mov ds,ax

mov word ptr [1000H],1

将使内存中的内容变为:2000:1000 01 00 FF FF FF FF……

你可能感兴趣的:(数据处理的两个基本问题)