0%

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

bx、si、di、bp

在8086CPU中,只能使用这4个寄存器寻址内存单元。
在[ ]中,这4个寄存器可以单个出现,或只能以下列组合出现:

  • bx和si、di
  • bp和si、di

只要在[ ]中使用寄存器bp,段地址就默认在ss中。

机器指令处理的数据所在位置

数据处理的方式:读、写、运算
数据类型:指令、数值
数据所在位置:CPU内部、内存、端口

汇编语言中(存取)数据位置的表达

立即数:要处理的数据直接包含在指令中
寄存器:要处理的数据在指令中的寄存器中
段地址(SA):偏移地址(EA):要处理的数据在内存中

只有内存单元才有地址:SA、EA和PA

指令要处理的数据长度

8086CPU可以处理的数据长度:

  • 8位 byte 字节型数据
  • 16位 word 字数据

汇编语言中的处理方法:

  • 通过寄存器指明要处理的数据长度
  • 在没有寄存器的情况下用 word ptr/byte ptr指明数据长度
  • 其他方法(默认长度)例:push [1000h]

寻址方式的综合应用

一般来说,我们可以用[bx+idata+si]的方式来访问结构体中的数据。
用bx定位整个结构体,用idata定位结构体中的某一个数据项,用 si 定位数组项中的每个元素 。
为此,汇编语言提供了更为贴切的书写方式。
如:[bx].idata、[bx].idata[si]

div除法指令

格式:div op(内存单元、寄存器
说明:

  • 被除数
    • 16位放在AX
    • 32位DX放高16位,AX放低16位
  • 除数
    • 放在OP 中
  • 结果
    • 8位除数:商存放在AL中,余数放在AH
    • 16位除数:商存放在AX,余数放在DX

注意:被除数长度必须是除数长度的两倍!

定义重复变量伪指令dup

格式:
DB n DUP (重复的数据)

例:
DATA1 DB 10 DUP (0)
定义DATA1为10个“0”组成的字节变量
DATA2 DW 2 DUP (?)
定义DATA2为2个不确定数值的字变量
DATA3 DB 4 DUP (1,2 DUP(50H)
定义DATA3为(1,50H,50H)重复4次共12个字节的字节变量