【第八章】数据处理的两个基本问题

在学习本章时,我们要考虑两个基本问题:

  1. 处理的数据在什么地方?
  2. 要处理的数据多长?

为了解决这两个问题,我们先对我们学过的寄存器做一个定义。我们定义描述性符号:reg(register)和sreg(segment register)。

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

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

8.1 bx、si、di和bp

  1. 在8086CPU中,只有这四个寄存器(bx、si、di、bp)可以用在“[...]”中来进行内存单元寻址

    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]
    
  2. 在"[...]“中,这四个寄存器可以单独出现,或是以四种组合出现:bx+si、bx+di、bp+si、bp+di

    下面这些指令是错误的:

    mov ax,[bx+bp]
    mov ax,[si+di]
    
  3. 只要在[...]中使用寄存器bp而指令中没有显示地给出段地址,段地址就默认在ss中

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

8.2 机器指令处理的数据在什么地方

绝大部分奇迹指令都是进行数据处理的指令,处理大致可以分为3类:读取、写入、运算。在机器指令这一层面来讲,并不关心数据的值为多少,只关心指令执行前一刻,想要处理的数据所在位置

所要处理的数据可以在三个地方:CPU内部、内存、和端口

2.PNG

8.4 寻址方式汇总

2.PNG

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