[汇编学习笔记][第八章数据处理的两个基本问题]

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

本章对前面具有总结性。主要解决以下两个问题

  • 处理的数据在什么地方
  • 要处理的数据有多长

定义描述符号reg和sreg

  • reg:ax,bx,cx,dx,ah,al,bh,bl,ch,cl,dh,dl,sp,bp,si,di;
  • sreg:ds,ss,cs,es。

8.1 bx,si,di和bp

  • 在8086CPU中,只有这4个寄存器可以用在"[..]"当中来进行内存单元的寻址。
  • 4种寄存器可以单独出现,否则只能以这四种组合出现

    • bx和si
    • bx和di
    • bp和si
    • bp和di
  • 重点:只要在[..]中使用bp,而指令中没有显性地给出地址,段地址默认为ss中

  • 不太懂这三个规则的由来

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

在机器指令这一层来说,不关心数据的值,关心指令执行前一刻,他将要处理的数据的位置。

  • CPU内部
  • 内存
  • 端口

8.3 汇编语言中数据位置的表达

  • 立即数(idata)

    执行前在CPU的指令缓冲器中

  • 寄存器

    在CPU内寄存器中

  • 段地址(SA)和偏移地址(EA)

    在内存或端口

8.4 寻址方式

8.4.1 直接寻址

形式 [idata]

含义 普通变量

8.4.2 寄存器间接寻址

形式 [bx],[si],[di],[bp]

含义

  • 数组

8.4.3 寄存器相对寻址

形式 [bx+idata]….idata[bx]….[bx].idata

含义

  • 二维数组 [bx][idata]
  • 一维数组 idata[bx]
  • 结构体 [bx].idata

8.4.4**基址变址寻址**

形式 [bx+si],[bx+di],[bp+si],[bp+di]

含义

  • 二维数组 [bx][si]

8.4.5 相对基址变址

形式 [bx+si+idata],[bx].idata[si],idata[bx][si]

含义

  • 普通数组 [bx+si+idata]
  • 结构中的数组 [bx].idata[si]
  • 二维数组 idata[bx][si]

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

8086CPU的指令,可以处理两种尺寸的数据,byteword。在机器指令中要指明处理那种数据。
汇编语言有以下方法处理。

  • 通过寄存器名指明要处理的数据的尺寸。
  • 用操作符X ptr指明长度,X可以是word/byte
  • 其他方法,push只进行字操作

Tips:

注意 inc byte ptrinc word prt的区别

:在不进位的时候,两者没有区别,进位的时候,byte会抛弃进位

8.6 寻址方式的综合应用

mov si,0
mov byte ptr [bx].10h[si],'V'
inc si
mov byte ptr [bx].10h[si],'A'
inc si
mov byte ptr [bx].10h[si],'X'

8.7 div指令

  • 除数:有8位,和16位两种。根据8.5判定。
  • 被除数
    • 8位:默认放在AX中
    • 16位:默认放在DX和AX中,DX存高16位,AX存低16位
  • 结果
    • 8位:AL存储商,AH存储余数
    • 16位:AX存储商,DX存储余数

格式如下

div reg
div byte/word ptr 内存单元

至于溢出的问题
会提示 divide error - overflow.

至于怎么解决,要看后面的分析

8.8 伪指令dd

dd=Double worD,双字型数据,32位

data segment
  db 1
  dw 1
  dd 1
data ends
实质:
db=01H
dw=0001H
dd=00000001H

8.9 dub

dub是一个操作符,伪指令用于进行数据的重复

语法

db/dw/dd 重复次数 (重复的db/dw/dd数据)

你可能感兴趣的:([汇编学习笔记][第八章数据处理的两个基本问题])