• 忘掉天地
  • 仿佛也想不起自己
bingliaolongBingliaolong  2021-03-31 14:39 Aet 隐藏边栏 |   抢沙发  4 
文章评分 3 次,平均分 5.0

汇编

关于定位内存地址的方法以及数据处理的相关问题。

and

  1. 逻辑与,按位进行与运算

or

  1. 逻辑或,按位进行或运算

ASCII码

  1. 编码方案,就是一套规则,约定了用什么样的信息来表示现实对象

字符形式数据

  1. 汇编程序中,用'...'的方式指明数据是字符的形式
  2. 编译器将会将之转换成相对应的ASCII码

[bx+idata]

  1. [bx]的方式指明内存单元
  2. [bx+idata]也可以指明内存单元,偏移地址为bx+idata

[bx+si]和[bx+di]

  1. 内存单元,偏移地址为bx+si或bx+di

[bx+si+idata]和[bx+di+idata]

  1. 内存单元,偏移地址为bx+si+idata或bx+di+idata

SI和DI

  1. SI和DI是8086CPU中,与bx功能相近的寄存器
  2. SI和DI不能分成两个8位寄存器来使用

不同的寻址方式

  1. [idata]
    1. 用一个常量表示内存地址,用于之间定位一个内存单元
  2. [bx]
    1. 用一个变量表示内存地址,用于间接定位一个内存单元
  3. [bx+idata]
    1. 用一个变量和常量表示内存地址,可在一个起始地址的基础上用变量间接定位一个内存单元
  4. [bx+si]
    1. 用两个变量表示地址
  5. [bx+si+idata]
    1. 用两个变量和一个常量表示地址

寄存器

  1. ax,bx,cx,dx
  2. ah,al,bh,bl,ch,cl,dh,dl
  3. sp,bp,si,di

段寄存器

  1. ds,ss,cs,es

bx si di bp

  1. 8086CPU中,只有这4个寄存器可以用在[...]中来表示内存单元的地址
  2. 在[...]中,可以单个出现
  3. 或者以4中组合出现:[bx+si],[bx+di],[bp+si],[bp+di]
  4. 只要在[...]中使用寄存器bp,但指令中没有显性给出段地址,段地址就默认在ss中

处理的数据在哪里

  1. 绝大部分机器指令都是进行数据处理的指令
  2. 处理大致可以分为3类:读取、写入、运算
  3. 对机器指令来说,并不需要关系数据的值是多少,而是关心,在指令执行前一刻,它将要处理的数据的位置在哪里
  4. 指令执行前,所要处理的数据可以在3个地方
    1. CPU内部
    2. 内存
    3. 端口
  5. 对于数据位置的表述
    1. 立即数:直接包含在机器指令中的数据
    2. 寄存器:要处理的数据在寄存器中
    3. 段地址SA和偏移地址EA:指令要处理的数据在内存中

寻址方式

直接寻址

  1. [idata]
    1. ea=idata,sa=(ds)

寄存器间接寻址

  1. [bx]
    1. ea=(bx),sa=(ds)
  2. [si]
    1. ea=(si),sa=(ds)
  3. [di]
    1. ea=(di),sa=(ds)
  4. [bp]
    1. ea=(bp),sa=(ds)

寄存器相对寻址

  1. [bx+idata]
    1. ea=(bx)+idata,sa=(ds)
  2. [si+idata]
    1. ea=(si)+idata,sa=(ds)
  3. [di+idata]
    1. ea=(di)+idata,sa=(ds)
  4. [bp+idata]
    1. ea=(bp)+idata,sa=(ss)
  5. 用于
    1. 结构体
    2. 数组
    3. 二维数组

基址变址寻址

  1. [bx+si]
    1. ea=(bx)+(si),sa=(ds)
  2. [bx+di]
    1. ea=(bx)+(di),sa=(ds)
  3. [bp+si]
    1. ea=(bp)+(si),sa=(ss)
  4. [bp+di]
    1. ea=(bp)+(di),sa=(ss)
  5. 用于二维数组

相对基址变址寻址

  1. [bx+si+idata]
    1. ea=(bx)+(si)+idata,sa=(ds)
  2. [bx+di+idata]
    1. ea=(bx)+(di)+idata,sa=(ds)
  3. [bp+si+idata]
    1. ea=(bp)+(si)+idata,sa=(ss)
  4. [bp+di+idata]
    1. ea=(bp)+(di)+idata,sa=(ss)

处理的数据有多长

  1. 8086CPU可以处理两种尺寸的数据
    1. byte
    2. word
  2. 通过寄存器名字指明进行的是字操作还是字节操作
    1. mov ax,1字操作
    2. mov al,1字节操作
  3. 在没有寄存器名存在的情况下,用操作符X ptr指明内存单元的长度
    1. X在汇编指令中可以是word或byte
    2. mov word ptr ds:[0],1
    3. mov byte ptr ds:[0],1
  4. 有的指令默认了访问的是字节还是字
    1. push只进行字操作

div

  1. 除法指令
  2. 除数:有8位和16位两种,在一个寄存器中或内存单元中
  3. 被除数:默认放在ax或dx和ax中
    1. 除数8位被除数16位:默认在ax中存放
    2. 除数16位被除数32位:dx存放高16位,ax存放低16位
  4. 所得结果
    1. 除数为8位,al存除法的商,ah存除法的余数
    2. 除数为16位,ax存除法的商,dx存除法的余数

dd

  1. db和dw可以定义字节型数据和字型数据
  2. dd用来定义dword型数据(双字)

dup

  1. 一个操作符
  2. 配合db,dw,dd来使用
  3. db 3 dup (0)
    1. 定义了3个字节,它们的值为0
  4. db 3 dup (0,1,2)
    1. 定义了9个字节,值为0,1,2,0,1,2,0,1,2
  5. db 3 dup ('abc','ABC')
    1. 定义了18个字节,值为'abcABCabcABCabcABC'

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

bingliaolong
Bingliaolong 关注:0    粉丝:0 最后编辑于:2021-11-20
Everything will be better.

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享