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


    约定:

    用reg表示一个寄存器

    sreg表示一个段寄存器 ds  ss  cs  es 

    reg8  :8位寄存器

    reg16: 16位寄存器

    mem8:表示字节单元(内存单元)

    mem16 :表示字单元(内存单元)

    1.概述

    2.汇编指令中操作数类型

    3.8086中可用于存放内存单元偏移地址的寄存器

    4.8086中已学寄存器一览

    5.操作数寻址方式

    6.汇编运算符ptr

    7.数据定义伪指令db/dw/dd和操作符dup

    8.无符号除法指令div

    9.小结

    汇编指令中操作数类型:

    常数:cpu内部,指令缓冲器,

    寄存器:cpu内部,寄存器

    内存单元:cpu外部,内存

    8086cpu中已学的寄存器

    通用寄存器:AX,BX,CX,DX

    变址寄存器:SI,DI

    段寄存器:CS,DS,SS,ES

    指令指针寄存器:IP

    栈指针寄存器:SP

    可用于表示内存单元的寄存器

    BX,SI,DI,BP

    可以单个出现,也可以组合出现

    使用BX,SI,DI表示偏移地址时,默认段地址在DS中,可以加前缀es,cs,ss

    使用BP,SI,DI表示偏移地址时,默认段地址在SS中,可以加前缀ds,es,cs

    注:除此之外的其他寄存器组合都是非法的

    寻址方式

       ① mov ax,  [0]               ;直接寻址
       ② mov  ax, [bx]              ;寄存器间接寻址
       ③ mov cx,  [bx+3]            ;寄存器相对寻址
       ④ mov ax,  [bx+si]           ;基址变址寻址
       ⑤ mov ax,  [bx+si+3]         ;相对基址变址寻址
    

    如何在机器指令中声明进行的是字操作还是字节操作

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

    如:ax,al,ah

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

    如:

    mov word ptr ds:[0],1
    mov word ptr [bx]
    mov byte ptr ds:[0],1
    mov byte ptr [bx],2
    

    有些指令默认了访问的是字单元还是字节单元,如push只进行字操作

    8086CPU提供的如[bx+idata+si]的寻址方式为结构化数据的处理提供了方便

    用bx定位整个结构体,用idata定位结构体中的某一个数据项,用si定位数组项中每个元素 

    可以写成[bx].data,[bx].idata[si]  

    C语言中结构体

    汇编指令:div和mul

    无符号除法指令div

    无符号乘法指令mul

    1.div

    格式:div 除数(reg或内存单元)

    被除数:默认放在AX或DX和AX中

    如果除数为8位,被除数为16位,默认在AX中存放;

    如果除数为16位,被除数为32位,DX存放高16位,AX存放低16位

    结果:

    如果除数为8位,则AL存储除法操作的商,AH存储除法操作的余数;

    如果除数为16位,则AX存储除法操作的商,DX存储除法操作的余数

    2.mul

    格式mul 乘数

    如果都为8位,被乘数放在al中,积16位放在ax中

    如果都为16位  被乘数放在ax中,积32位 规定在dx:ax

     

    汇编伪指令:db,dw,dd,dup

    data  segment
        db   1,2,3   ; 每个数据分配1个字节
        dw  1,2 3; 每个数据分配2个字节
        dd   1,2,3; 每个数据分配4个字节
    data ends
    

    伪指令dup

    data  segment
        db   0,0,0,0,0,0,0,0
        db  8 dup(0); 预留8个字节单元,每个单元值为0
        dd  8 dup(?); 预留8个字节单元,每个单元值未分配
    data ends
    data segment db 1,2,3,1,2,3,1,2,3 db 3 dup(1,2,3); 等价于前一行 data ends

      

     

     

     

  • 相关阅读:
    Unity设置相机正交相机和透视相机的动态切换
    获得两点之间连续坐标,向量加法、减法、乘法的运用
    替换材质
    常用的layer弹出层
    检测扇形角度
    c# 关闭socket的标准方法
    C#中Object和Json之间的转换
    Unity经验之谈-DoTween动画结束匿名委托之巨坑
    Unity透明视频播放 所需的Shader脚本
    阿里云云服务器Windows Server 2012 R2无法安装IIS等组件的解决办法
  • 原文地址:https://www.cnblogs.com/wtblogwt/p/10066622.html
Copyright © 2020-2023  润新知