zoukankan      html  css  js  c++  java
  • 汇编语言之第五章至第八章知识汇总

     

     

     

    汇编语言之第五章【BX】和loop指令

     

    一:【bx】

      【bx】和之前用过的【0】有些类似,都是表示内存单元,而它的偏移地址在bx中。段地址默认在ds中

      描述一个内存单元 需要知道,1内存单元的地址,2内存单元的长度(类型)。

    二:loop

      inc bx的含义是bx中的内容加1

      loop指令的格式是:   loop   标号

      cx是用来控制循环执行次数的

      CPU执行loop指令时,要操作1 (cx)=(cx)-1     2   判断cx中的值,不为零则转至标号处执行程序,如果为零则向下执行

    三:我们使用一个描述性的符号“()”来表示一个寄存器或一个内存单元中的内容。

      “( )”中的元素可以有3种类型:1寄存器名 2段寄存器名  3内存单元的物理地址(一个20位数据)

      “(X)”所表示的数据有两种类型:  1字节  2字。   是哪种类型由寄存器名或具体的运算决定

    四:约定idata表示常量

    五:在汇编源程序中,数据不能以字母开头。在执行命令时,如果想一次将循环执行完,可以使用p命令

    六:段前缀用于显式地指明内存单元的段地址,如“ds:”,"cs:"

    汇编语言之第六章包含多个段的程序

     

    一:dw=define word 即使用dw定义字型数据(数据之间以逗号分隔)dw 既可定义数据,也可以说用它开辟内存空间

    db定义字节类型变量,一个字节数据占1个字节单元,读完一个,偏移量加1
    
    dw定义字类型变量,一个字数据占2个字节单元,读完一个,偏移量加2
    dd定义双字类型变量,一个双字数据占4个字节单元,读完一个,偏移量加4

    二:程序取得所需空间的方法有两种,1是在加载程序的时候为程序分配,2是程序在执行的过程中向系统申请。

    三:数据和指令在本质上无区别,为了让程序的入口处是我们所希望执行的指令。我们可以加标号。在程序入口前加标号,在程序结束后加上相同的标号。

      标号 start 与 end start——end 除了通知编译器程序结束外,还可以通知编译器程序的入口在什么地方,

      此处用 end 指令表明了程序的入口在标号 start 处,被转化为一个入口地址

    四:将数据、代码、栈放在不同的段中,可以使程序结构清晰易懂,对于8086而言,可以使用多个栈,解决长度超64kb的限制问题

      访问段中的数据,通过地址(段地址和偏移地址),段名即代表一个标号,代表段地址。

      用伪指令 assume 将 cs、ds、ss 分别和 code、data、stack 段相连之后,CPU 也没并没有将对应的段和段寄存器相连接,因为 assume 只是伪指令

    汇编语言之第七章更灵活的定位内存地址的方法

     

    一:and和or指令。

      and指令:逻辑与指令,按位进行与运算。通过该指令可将操作对象的相应位设为0,其他位不变。

      or指令:逻辑或指令,按位进行或运算。通过该指令可将操作系统的相应位设为1.

    二:ASCII码。一种编码方案,是在计算机系统中通常被采用的的,所谓编码方案,就是一套规则,它约定了用什么样的信息来表示现实对象。

      一个文本编辑过程中,就包含着按照ASCII编码规则进行的编码和解码。

    三:以字符形式给出的数据,用‘......’的方式知名数据是以字符的形式给出的。编译器将它们转化为相应的ASCII码。

    四:大小写转换。小写字母的ASCII码值比大写字母的ASCII码值大20H。

    五:【bx+idata】表示一个内存单元,它的偏移地址为(bx)+idata(bx中的数值加上idata)

    六:si和di是8086CPU中和bx功能相近的寄存器,si和di不能分成两个8位寄存器来使用。

      【bx+si】和【bx+di】的含义相似,表示一个内存单元,它的编译地址为(bx)+(si)即bx中的数值加上si中的数值。

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

     

    一:reg来表示一个寄存器,用sreg来表示一个段寄存器。

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

      serg集合包括:ds,ss,cs,es

    二:(1)在8086CPU中,只有bx,si,di,bp这四个寄存器可以用在“【....】”来进行内存单元的寻址。

      (2)在【....】中,这四个寄存器可以单个出现,或只能以四种组合出现:bx和si,bx和di,bp和si,bp和di.

        (3只要在【....】中使用寄存器bp,而指令中没有显性地给出段地址,段地址就默认在ss中。

    三:

    四:寻址方式。

    五。指令要处理的数据有多长?汇编语言中用以下方法处理。

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

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

    在没有寄存器参与的内存单元访问指令中,
    用word ptr或byte ptr显性地指明所要访问的内存单元的长度是很必要的。
    否则,CPU无法得知所要访问的单元是字单元,还是字节单元

    六:div指令

    div是除法指令,使用div作除法的时候:
    除数:8位或16位,在寄存器或内存单元中
    被除数:(默认)放在AX 或 DX和AX中
    结果:运算        8位           16位
                商          AL              AX
               余数        AH               DX

    div指令格式:
    div reg
    div 内存单元

    七:

    用db和dw定义字节型数据和字型数据。
    dd是用来定义dword (double word双字)型数据的。

    八:

    dup是一个操作符,在汇编语言中同db、dw、dd 等一样,
    也是由编译器识别处理的符号。
    它是和db、dw、dd 等数据定义伪指令配合使用的,用来进行数据的重复

  • 相关阅读:
    五月杂题选做
    BJOI 2021 游记&题解
    U149858
    CF1037简要题解
    CF Round706简要题解
    联合省选 2020
    九省联考 2018 IIIDX
    九省联考 2018 秘密袭击
    AGC006F Balckout
    概率生成函数学习笔记
  • 原文地址:https://www.cnblogs.com/bowentianxia/p/10155025.html
Copyright © 2011-2022 走看看