精华内容
下载资源
问答
  • 汇编语言基本概念汇总

    千次阅读 多人点赞 2015-07-28 00:14:58
    讨论存储器容量时,以2的10次方即1024为基本单元,称为1K。1024K就是1M。 Control Bus : CB CPU主频越高,其运算速度就越快。字长代表了CPU对数据处理的能力和精度。 OS的主要部分是常驻监督程序Monitor,只要一开机...

          汇编语言应该是我们现在学的最“低级”的语言了,因为现在不会再有人去学机器语言了。而汇编语言还在一些硬件或者嵌入式设备上使用并开发着。以下资料是为了大学的汇编考试整理的资料,现在与大家分享,希望能给大家提供帮助。

    汇编语言程序设计汇总

    计算机主要由运算器、控制器、存储器和输入输出设备五大部件构成。
    字长word是指微处理器内部一次可以并行处理二进制代码的位数,它与微处理器内部寄存器以及CPU内部数据总线宽度是一致的,字长越长,所表示的数据精度就越高。
    内存是由若干个存储单元组成,每个单元分配一个固定的地址并且存放一个字节的数据。
    MIPS Millions of Instruction Per Second   每秒百万条指令
    微机系统采用了多种系统总线标准,如ISA/EISA/VESA/PCI
    系统总线分为数据总线、地址总线、控制总线。
    Data Bus: DB
    Address Bus: AB
    讨论存储器容量时,以2的10次方即1024为基本单元,称为1K。1024K就是1M。
    Control Bus : CB
    CPU主频越高,其运算速度就越快。字长代表了CPU对数据处理的能力和精度。
    OS的主要部分是常驻监督程序Monitor,只要一开机就存在于内存中,可以从用户接收命令,并使OS执行相应的动作。
    汇编语言和机器语言一一对应。
    汇编程序就是用来把由用户编制的汇编程序翻译成机器语言程序的一种系统程序。
    高级语言的翻译程序有两种:
    一种是先把高级语言程序翻译成机器语言,(或先翻译成汇编语言,然后又汇编程序再次翻译成机器语言)然后才能在机器上执行。——编译程序
    直接把高级语言程序在机器上运行,一边解释一边执行。——解释程序
    翻译程序包括汇编程序、解释程序、编译程序。
    ALU :算术逻辑运算单元:用来进行算术和逻辑运算及其相应操作。
    8086 CPU内部结构按功能分为:
    总线接口单元 BIU:Bus Interface Unit
    执行单元 EU: Executive Unit
    8086对存储器和IO设备的所有操作都是由BIU完成的。
    8086CPU的20位地址线可直接寻址1M存储器物理空间,但CPU内部寄存器均为16位的寄存器,16位寄存器如何实现20位地址寻址呢?
    CPU是将有关寄存器内容左移4位,然后由专门地址加法器,与16位偏移地址相加,形成20位的物理地址,以便找到存储单元。
    指令指针 IP : Instruction Pointer
    IP 用来存放下一条要执行指令在代码中的偏移地址。
    IP的内容由BIU自动修改,使它总是指向下一条要取的指令在现行代码段中的偏移地址。
    由于BIU和EU是各自独立并行工作的。在EU执行指令的同时,BIU可预取下面一条或几条指令。
    Flags:反映CPU运算中的状态特征和存放某些控制标志。
    通用寄存器组:
    包括4个16位的数据寄存器:AX/BX/CX/DX
    和4个16位指针与变址寄存器:SP/BP/SI/DI
    8086CPU的外部数据总线和内部数据总线都是16位的,是真正的16位机。
    寄存器可以分为程序可见寄存器和程序不可见寄存器。
    程序可见寄存器是指在汇编语言程序设计中用到的寄存器,可以由指令来指定。
    程序不可见寄存器指一般程序设计中不用而由系统所用的寄存器。
    程序可见寄存器可以分为通用寄存器、专用寄存器和段寄存器。
    AX/BX/CX/DX是数据寄存器,用来暂时存放计算过程中用到的操作数,结果或其他信息。可以以字(16位),或字节(8位)形式访问。都是通用寄存器,但又有各自专用的功能。
    AX: Accumulator,做累加器用,是算术运算的主要寄存器。
    BX: Base,做通用寄存器使。在计算存储器地址时,常用作基址寄存器。
    CX:Count,作为通用寄存器使用,常用来保存计数值。如在移位指令、循环和串处理指令中作隐含的计数器。
    DX:Data:可做通用寄存器使用,在做双字长运算时把DX和AX组合在一起存放一个双字长数,DX存放高位字。
    SP/BP/SI/DI四个16位寄存器可以像数据寄存器一样在运算中存放操作数。但只能以字(16位)为单位使用。
    一般用在存储器寻址时,提供偏移地址。
    SP:Stack Pointer:栈指针寄存器,用来指示栈顶的偏移地址。
    BP:Base Pointer:基址指针寄存器。
    SI:Source Index:源变址寄存器
    DI: Destination Index:目的变址寄存器
    CS:段寄存器
    IP:Instruction Pointer 是指令指针寄存器,用来存放代码段中的偏移地址。在程序运行中,始终指向下一条指令的首地址。与CS连用确定下一条指令的物理地址。
    Flags是标志寄存器,又称程序状态字寄存器PSW   Program Status Word
    条件码标志记录程序中运行结果的状态信息,是根据有关指令的运行结果由CPU自动设置的。这些状态信息作为后续条件转移指令的转移控制条件,所以称为条件码。
    OF: Overflow Flag 溢出标志
    SF: Sign Flag  符号标志
    ZF: Zero flag  零标志
    CF: Carry Flag   进位标志
    AF: Auxiliary Carry Flag   辅助进位标志
    PF: Parity Flag    奇偶标志
    DF :Direction Flag    方向标志
    IF: Interrupt Flag  中断标志
    段寄存器也是一种专用寄存器,专用于存储器寻址,用来直接或间接存放段地址。
    CS: Code Segment   代码段寄存器
    DS: Data Segment   数据段寄存器
    SS: Stack Segment   堆栈段寄存器
    ES: Extra Segment   附加段寄存器

    一个存储单元中存放的信息称为该存储单元的内容。
    在存储单元里以字节为单位存储信息。
    如果机器字长为8位时,则地址为0004H单元中存放的信息为78H。也就是说,该单元的内容为78H。(0004H)=78H
    一个字存入存储器要占有连续的两个字节单元。存放时低位字节存入低地址,高位字节存入高地址。这样两个字节单元就构成了一个字单元。            字单元的地址用它的低地址表示。(0004H)=5678H
    双字单元的存放方式与字单元类似,他被存放在相继的4个字节中,低位字存入低地址区,高位字存入高地址区。双字单元的地址有其最低字节的地址指定。(0004H)=12345678H。
    1字=2字节
    同一个地址既可以作为字节单元的地址,又可看做字单元,双字单元或四字单元的地址。
    如果用X表示某存储单元的地址,则X单元的内容可以表示为(X);假如X单元中存放着Y,而Y又是一个地址,则可用(Y)=((X))表示Y单元的内容。

    eg:(0004H)=5678H,5678H又是一个存储单元地址,(5678H)=2F1EH,2F1EH才是真正的内容。
    即((0004H))=2F1EH。

    在1M的存储器里,每一个存储单元都有一个唯一的20位地址,称为该存储单元的物理地址。
    段地址是指每一段的起始地址(又称段基地址),由于他必须是段的首地址,所以低四位一定是0,可以规定段地址只取段起始地址的高16位值。
    偏移地址指在段内相对于段起始地址的偏移值。
    把段地址左移四位再加上偏移地址就形成物理地址。
    物理地址=段地址*16D+偏移地址
    等价于
    物理地址=段地址*10H+偏移地址
    专门存放段地址的寄存器,称为段寄存器。
    CS:代码段
    DS:数据段
    SS:堆栈段
    ES:附加段
    每个段寄存器可以确定一个段的起始地址。
    MOV AX,ES:[BX]
    ES作段寄存器,BX作间接寄存器寻址的单元送入AX寄存器。
    MOV BX,ES:[SI]
    ES作段寄存器,SI作间址寄存器的寻址单元内容送入BX寄存器。
    MOV EAX,DS:[BP]
    DS作段寄存器,BP作间址寄存器寻址的单元内容送入EAX寄存器。
    一个计算机的指令集合,就是该计算机的指令系统。
    每条指令有两部分组成,操作码字段和地址码字段。
    操作码字段:说明该指令所要完成的操作,即该条指令的性质。
    地址码字段:描述该指令的操作对象。
    一般地址码字段一般是直接给出操作数;或者给出操作数存放的寄存器编号;或者给出操作数存放的存储单元的地址或有关的地址的信息。
    根据地址码字段所给出的地址的个数,指令格式可分为零地址、一地址、二地址、三地址、多地址指令。
    指令中用于确定操作数存放地址的方法,称为寻址方式。
    如果地址码字段直接给出了操作数,这种寻址方式是立即寻址。
    如果地址码字段指出了操作数所在的寄存器编号,叫寄存器寻址。
    如果操作数存放在存储器中,则地址码字段通过各种方式给出了存储器地址,叫存储器寻址。
    寻找和获得操作数或操作数存放地址或指令转移地址的方法称为寻址方式。
    操作数及操作结果存放的地址有三处:存放在指令的地址码字段中;存放在寄存器中;存放在存储器的数据段(DS)、堆栈段(SS)或附加数据段(ES)中。
    其对应有三种操作数:立即操作数、寄存器操作数、存储器操作数
    要寻找这些操作数就有三种基本寻址方式:立即寻址方式、寄存器寻址方式、存储器寻址方式。
    立即寻址方式寻找的操作数紧跟在指令操作码之后。
    格式:操作码 数字表达式
    MOV AX,267
    MOV AL,10010011B AND 0FEH
    MOV AL,PORT1
    MOV AX,DATA1
    “267”是数字,“10010011B AND 0FEH”是数字表达式,PORT1是一个符号名,属于常数。DATA1是定义的段名,就是段地址,属于常数。
    汇编立即寻址方式时,汇编程序首先计算数字表达式的值,然后写入指令的地址码字段,称为立即数。
    寄存器寻址是指要寻找的操作数在某个寄存器中。
    格式:操作码 寄存器名
    MOV AX,BX
    MOV AL,BL
    汇编程序将寄存器的地址编号写入指令的地址码字段,当机器执行含有这种寻址方式的指令时,根据地址码字段的编号访问到寄存器,继而访问到操作数。
    存储器寻址方式:当操作数放在存储器中的某个单元时,CPU要访问存储器才能获得该操作数。如果存储器的存储单元是20位,通过各种方法算出段内偏移地址(有效地址),结合段地址形成20位物理地址,找到操作数,称为存储器寻址。
    直接寻址方式是指要寻找的操作数的地址在指令中直接给出。
    格式:
    操作码 地址表达式
    操作码 [地址表达式]
    操作码 [数字表达式]

    如:假设TABLE是在数据段定义的一个字节数组的首地址标号,偏移地址为1000H
    MOV AL,TABLE
    MOV AL,[TABLE]
    MOV AL,[1000H]
    是等价的。
    直接寻址方式默认的段地址是DS。
    若允许在汇编指令中指定除DS寄存器以外的段寄存器作为操作数的段地址,这就是段超越。
    用段超越前缀表示:
    段寄存器名:地址表达式
    段寄存器名:[地址表达式]
    段寄存器名:数字表达式
    段寄存器名:[数字表达式]
    如:
    设TABLE是在附加数据段定义的一个字节数组的首地址标号,其偏移地址为1000H,则
    MOV AL,ES:TABLE
    MOV AL,ES:[TABLE]
    MOV AL,ES:1000H
    MOV AL,ES:[1000H]
    表示将字节数组的第一个数组元素送入AL寄存器中。
    寄存器间接寻址方式:通常将BX,BP称为基址寄存器,SI,DI称为变址寄存器,寻址时操作数的地址被放在这些寄存器中。
    格式:
    操作码 [基址寄存器名或变址寄存器名]
    MOV AX,[BX]
    MOV AX,[SI]
    也允许指定段超越前缀来取得其他段中的数据:
    MOV AX,ES:[BX]
    寄存器相对寻址:
    操作数的偏移地址是指定寄存器的值与一个整数之和。
    格式:
    操作码 变量名[机制寄存器名或变址寄存器名]
    操作码 [变量名+基址寄存器名或变址寄存器名]
    操作码 符号名[机制寄存器名或变址寄存器名]
    操作码 [符号名+基址寄存器名或变址寄存器名]
    操作码 机制寄存器名或变址寄存器名+/-数字表达式
    如:
    MOV SI,5
    MOV AL,TABLE[SI]   == MOV AL,[TABLE+SI]

    基址变址寻址方式:操作数的偏移地址是两个指定寄存器的值之和。
    格式:
    操作码 [基址寄存器名][变址寄存器名]
    操作码 [基址寄存器名+变址寄存器名]
    如:
    MOV AX,[BX][SI]
    MOV AX,[BX+SI]
    当机器执行含有这种寻址方式的指令时,依据地址码字段的值得到基址寄存器和变址寄存器的值,将其相加,和作为操作数的偏移地址。

    可以用段超越前缀重新指定段寄存器:
    MOV AL,ES:[BX][SI]
    相对基址变址寻址:操作数偏移地址是指定寄存器的值与相对偏移量之和。
    MOV AL,TABLE[BX][SI]
    MOV AL,TABLE[BX+SI]
    MOV AL,[TABLE+BX+SI]
    格式:
    操作码 变量名[基址寄存器名][变址寄存器名]
    操作码 变量名[基址寄存器名+变址寄存器名]
    操作码 [变量名+基址寄存器名+变址寄存器名]
    符号名 变量名[基址寄存器名][变址寄存器名]
    符号名 变量名[基址寄存器名+变址寄存器名]
    符号名 [变量名+基址寄存器名+变址寄存器名]
    操作码 [基址寄存器名+变址寄存器名+/-数字表达式]

    四类传送指令:通用传送指令、累加器专用传送指令、地址传送指令、标志传送指令
    DST:目的操作数
    SRC:源操作数
    REG:寄存器
    SEGREG:段寄存器
    MEM:存储器
    DATA:立即数
    PUSHF:标志入栈指令
    POPF:标志出栈指令
    XCHG:交换指令
    MOV:可实现寄存器之间、寄存器和存储器之间传送数据,还可实现立即数送寄存器或存储单元的操作。
    MOV:原操作数与目的操作数不能同时为存储器寻址方式,即两个内存单元之间不能直接传送指令。
    MOV:两个段寄存器之间不允许直接传送数据。
    把CPU内部的寄存器细分为段寄存器和寄存器。MOV有9种指令。
    MOV的9种传送方式:
    从寄存器到寄存器
    MOV REG1,REG2
    如:
    MOV AX,BX
    MOV AH,CL
    MOV BX,SI
    MOV DI,DX

    从寄存器到段寄存器
    MOV SEGREG1,REG
    如:
    MOV DS,AX
    MOV ES,DX
    MOV SS,DI

    从寄存器到存储器
    MOV MEM,REG
    MEN指以下五种存储器寻址方式:直接、寄存器间接、寄存器相对、基址变址、相对基址变址。
    如:
    TABLE是定义的字变量
    MOV TABLE,AX
    MOV [BX],BX
    MOV TABLE[BX],CX
    MOV [BX][SI],DX
    MOV TABLE[BX][SI],AX

    从段寄存器到寄存器
    MOV REG,SEGREG
    格式:
    MOV AX,CS
    MOV BX,ES
    MOV DI,SS
    MOV SI,DS

    从存储器到寄存器
    MOV REG,MEM
    格式:
    MOV AX,TABLE
    MOV BX,[BX]
    MOV CX,TABLE[BX]
    MOV DX,[BX][SI]
    MOV AX,TABLE[BX][SI]

    从段寄存器到存储器
    MOV MEM,SEGREG
    格式:
    MOV TABLE,CS
    MOV [BX],ES
    MOV TABLE[DI],SS
    MOV [BX][SI],DS
    MOV TABLE[BX][SI],ES

    从存储器到段寄存器
    MOV SEGREG,MEM
    格式:
    MOV ES,[BX]
    MOV SS,TABLE[DI]
    MOV DS,[BX][SI]

    从立即数到寄存器
    MOV REG,DATA
    格式:
    MOV AX,OOH
    MOV BX,12H
    MOV CX,34H
    MOV SI,56H

    从立即数到存储器
    MOV MEM,DATA
    格式:
    MOV TABLE,DATA
    MOV WORD RTR[BX],0FFSET TABLE
    MOV TABLE[DI],ABC
    MOV [BX][SI],ABC+2
    MOV TABLE[BP][SI],0FFH
    ABC是符号名,相当于一个常数,TABLE是变量名。

    PUSH指令
    格式:
    PUSH SRC
    将16位寄存器、段寄存器、16位存储单元数据压入堆栈。
    POP指令
    格式:
    POP DST
    将堆栈中的16位数据送入16位寄存器、段寄存器、16位存储单元中。
    堆栈中数据的压入弹出必须以字为单位进行。
    PUSHF指令
    格式:
    PUSHF
    将标志寄存器内容压入堆栈
    POPF
    格式:
    POPF
    将16位堆栈数据弹入标志寄存器中。
    XCHG指令
    XCHG指令可实现字互换和字节互换。
    互换可以在寄存器之间进行,也可以在寄存器和存储单元之间进行。
    格式:
    XCHG DST,SRC
    互换源、目的两个操作数的存放位置。
    XCHG指令源、目的操作数的寻址方式不允许是立即寻址方式,两个存储单元之间不能直接互换数据。
    地址传送指令:将地址送到指定的寄存器中
    LEA:偏移地址送寄存器
    LDS:指针送指定寄存器和DS
    LES:指针送指定寄存器和ES
    格式:LEA REG,SRC
    操作:(REG)SRC的偏移地址
    功能:把源操作数的偏移地址送到指定的寄存器

    LDS:指针送指定寄存器和DS寄存器
    格式:LDS REG,SRC
    操作:(REG)(SRC)
         (DS)(SRC+2)
    功能:将源操作数寻址到的存储单元的第一个源操作数(字)送16位寄存器,第二个源操作数(字)送DS寄存器。

    LES:指针送指定寄存器和ES寄存器指令
    格式:LES REG,SEC
    操作:(REG)(SRC)
          (ES)(SRC+2)
    功能:将源操作数寻址到的存储单元的第一个源操作数(字)送16位寄存器,第二个源操作数(字)送ES寄存器。
    LEA BX,TABLE
    TABLE是数据段中定义的地址标号,指令执行前,如果(BX)=0000H,(DS)=2000H,TABLE=20020H,执行后,(BX)=0020H
    加法指令ADD
    格式:ADD DST,SRC
    操作:(DST)(SRC)+(DST)
    功能:完成源操作数和目的操作数的加法运算,并把运算结果保存在目的操作数中。
    带进位加法指令ADC
    格式:ADC DST,SRC
    操作:(DST)(SRC)+(DST)+CF
    功能:完成带进位的源操作数和目的操作数的加法运算,并把结果保存在目的操作数中。

    增量指令 INC
    格式:INC DST
    操作:(DST)(DST)+1
    功能:完成目的操作数的自加运算

    ADD和ADC指令两个操作数不能同时为存储器寻址方式,并且目的操作数不能为立即数寻址方式。
    INC指令的操作数不能为立即数寻址方式。
    完成双字长相加,被加数存放在DX和AX中,加数放在BX和CX中,和放在DX和AX中,
    ADD AX,CX
    ADC DX,BX

    SUB减法指令
    格式:SUB DST,SRC
    操作:(DST)(DST)-(SRC)
    功能:完成源操作数和目的操作数的减法运算,把结果保存在目的操作数中。
    SBB 带借位减法指令
    格式:SBB DST,SRC
    操作:(DST)(DST)-(SRC)-CF
    功能:完成带借位的源操作数和目的操作数的减法运算,并把运算结果保存在目的操作数中。

    DEC 减量指令
    格式:DEC DST
    操作:(DST)(DST)-1
    功能:完成目的操作数的自减运算。

    NEG 求补指令
    格式:NEG DST
    操作:(DST)0-(DST)
    0-操作数=-操作数

    CF表示机器的最高有效位向更高有效位的进位。
    减数>被减数,此时有借位,则CF=1,否则CF=0.
    完成双字长相减操作,被减数存放在DX和AX中,减数存放在BX与CX中,差放在DX和AX中,
    SUB AX,CX
    SBB DX,BX
    乘法指令
    乘法指令可对字节、字、双字进行操作,且可对有符号数整数或无符号整数进行操作。
    两个8位数相乘,结果为16位数。
    两个16位数相乘,结果为32位数。
    无符号数指令MUL
    格式:MUL SRC
    操作:
    字节操作:(AX)(AL)*SRC
    字操作:(DX-AX)(AX)*SRC
    有符号数乘法指令IMUL
    格式:IMUL SRC
    在乘法指令中,被乘数也即目的操作数隐含在AX(字运算)或AL(字节运算)中,乘数也即源操作数。
    两个8位数相乘是16位,存放在AX中。
    两个16位数相乘是32位,存放在DX,AX中。
    其中DX存放高位字,AX存放低位字。
    MUL CL  ;AL的内容乘以CL的内容,无符号数存于AX。
    IMUL DL   ;AL的内容乘以DL的内容,有符号数存于AX。
    MUL BYTE PTR[BX]    ;AL内容乘以数据段中由BX寻址的字节存储单元的内容,无符号积存于AX。
    120. IMUL WORD PTR[BP]    ;AX内容乘以堆栈段中由BP寻址的字存储单元的内容,带符号的积存于DX,AX。
    121. 逻辑运算指令:可对8位数或16位数进行逻辑运算,是按位操作的。
    122.AND逻辑与指令
    格式:AND DST,SRC
    操作:(DST)(DST)(SRC)
    本指令的功能用于使某个操作数中的若干位维持不变,而使另外若干位位0的操作,也称屏蔽某些位。
    要维持不变的位必须和1相与,而要置零的位必须和0相与。
    123.屏蔽AL中的高四位
    AND AL,00001111B
    124.AND AL,AL
    指令执行前后,AL无变化,但执行后使标志位发生了变化,即CF=0,OF=0.
    125.OR逻辑或指令
    格式:OR DST,SRC
    操作:(DST)(DST)(SRC)
    本指令用于使某个操作数中的若干位维持不变,使另外若干位置1的场合。要维持不变的必须和0相或,而置为1的位必须和1相或。
    126.OR AL,10000000B
    若执行前(AL)=OFH,则执行后(AL)=8FH.
    127.OR AL,AL
    指令执行前后,(AL)不变,但执行后标志位发生了变化,即CF=0,OF=0.
    128.XOR 逻辑异或指令
    格式:XOR DST,SRC
    操作:(DST)(DST)异或(SRC)
    用于判断两个数是否相等;也可用于操作数中的若干位维持不变,而使另外若干位取反的操作,维持不变的位与0相异或,取反的位与1相异或。
    129.XOR AL,AL
    执行后,使(AL)=0,CF=0,OF=0.
    130.测试AL是否等于33H
    XOR AL,33H
    JZ MATCH
    131.使AL中最高位和最低位取反,其他位保持不变
    XOR AL,10000001B
    132.TEST测试指令
    格式:TEST DST,SRC
    操作:(DST)  (SRC)
    用于不改变原有操作数的情况下,用来检测某一位或某几位的条件是否满足,用于条件转移指令的先行指令。
    不检测的那些位与0相与,即屏蔽掉。
    检测的那些位与1相与,即保持不变。
    133.检测(AL)的最高位是否为1,若为1则转移,否则顺序执行。
    TEST AL,10000000B
    JNZ AA
    …..
    AA:…

    134.NOT逻辑非指令
    格式:NOT DST
    寻址方式不允许为立即寻址方式及段寄存器。
    135.指令寻址方式是确定下一条要执行指令的地址的方法。
    136.段内直接寻址
    这种寻址方式的汇编格式有三种:
    指令名 SHORT 转移目标地址标号
    指令名 转移目标地址标号
    指令名 NEAR PTR 转移目标地址标号
    指令中直接指明了要转移的目标地址,因此叫直接寻址。又因为这种指令只改变了IP寄存器的值而不改变CS寄存器的值,因此又叫段内寻址。
    当执行这种寻址方式的转移指令时,机器取出位移量,与当前IP相加,和送入IP寄存器中,CS寄存器内容保持不变,从而实现转移。

    位移量不同,转移范围不同。当位移量位8位,只允许转移到与本条指令的下一条指令相距-128~127范围内的存储单元中。当位移量位16位时,允许转移到当前代码段内任何地方。

    137.位移量可以是一个带符号的8位数,也可以是一个带符号的16位数。表示了转移地址偏移本条指令的下一条指令的字节数。负数表明要向当前指令的后面跳转,整数要向当前指令的前面跳转。
    138.条件转移指令的位移量只能是8位,而无条件转移指令可以是8位或16位。
    139.转移指令是一种主要的程序控制指令,其中无条件转移指令使汇编者能跳过程序某些部分转移到任何分支中去。
    140.条件转移指令可使编程者根据结果来决定转到何处。测试的结果保存在标志位中,然后又被条件转移指令检测。
    141.比较两个数,若两数相等则转移,否则顺序执行
    CMP AX,BX
    JZ SS2


    SS1:…
    SS2:…

    142.两个无符号数比较大小时,机器根据CF标志位来判断大小,即两无符号数相减,若不够减,则最高位有借位,CF=1;否则CF=0。
    当CF=1时,说明被减数低于减数;
    当CF=0且ZF=0时,说明被减数高于减数;
    当CF=0且ZF=1时,说明被减数等于减数。
    143.变量TABLE中存放了一个偏移地址,当无符号数X小于、等于或大于此偏移地址时,应去执行三个不同的程序段。
    MOV BX,TABLE
    MOV AX,X
    CMP AX,BX
    JA SS3
    JZ SS2

    SS1:…   ;低于程序段
    SS2:…   等于程序段
    SS3:…   高于程序段

    144.比较两个数,相等则转移,否则顺序执行
    CMP AX,BX
    JZ SS2


    SS1:…
    SS2:…

    145.中断:Interrupt
    146.NOP:无操作指令,不执行任何操作
    HLT:停机指令,使CPU处于暂停状态。
    147.段间直接寻址
    (1)指令名 FAR PTR 转移地址标号
    (2)指令名 段地址:段内偏移地址
    指令中直接指明了要转移的目标地址,此转移地址或用地址标号或用数值地址表示,因此叫直接寻址。
    又因为这种指令不仅改变IP寄存器的值而且改变CS寄存器的值,因此又叫段间寻址。
    148.段内间接寻址
    (1)指令名 16位寄存器名
    (2)指令名 WORD PTR 存储器寻址方式
    转移的目标地址放在寄存器或存储器中,因此叫寄存器间接寻址。指令只改变IP寄存器的值而不改变CS寄存器的值,因此又叫段内寻址。
    149.段间间接寻址
    指令名 DWORD PTR 存储器寻址方式
    转移的目标地址放在存储器中,称作间接寻址。
    又因为指令不仅改变IP寄存器的值而且改变CS寄存器的值,因此又叫段间寻址。
    150.控制转移指令通过改变CS,IP来控制程序的指令流程。
    151.JMP段内直接寻址
    (1)段内直接短转移
    格式:JMP SHORT 转移地址标号
    操作:IP(当前IP)+8位偏移量
    转移范围:转到本条指令的下一条指令的-128~127个字节范围内。

    段内直接近转移
    格式1:JMP NEAR PTR 转移地址标号
    格式2:JMP 数值偏移地址
    可转移到当前代码段中任何地方。
    152.JMP 段内间接转移
    (1)格式:JMP 16位寄存器名
    功能:无条件转移到当前段的指定偏移地址处

    (2)格式:JMP 存储器寻址方式
    功能:无条件转移到当前段的指定偏移地址处

    153.段间直接转移
    (1)格式:JMP FAR PTR 转移地址标号
    操作:IP转移地址标号的偏移地址
          CS转移地址标号的段地址
    功能:无条件转移到指定标号地址处往下执行。

    (2)格式:JMP 段地址值:偏移地址
    操作:IP偏移地址值
          CS段地址值
    功能:无条件转移到指定段的地址往下执行。

    154.段间间接转移
    格式:JMP DWORD PTR 存储器寻址方式
    操作:IP寻址到存储单元的第一个字
          CS寻址到存储单元的第二个字
    功能:无条件转移到指定段的指定偏移地址处。

    155.所有JMP指令都不影响状态标志位。
    156.CALL调用指令
    (1)段内直接调用
    格式:CALL NEAR PTR 子程序名
          CALL 子程序名

    (2)段内间接调用
    格式:CALL 16位寄存器名
          CALL WORD PTR 存储器寻址方式

    (3)段间直接调用
    格式:CALL FAR PTR 子程序名

    段间间接调用
    格式:CALL DWORD PTR 存储器寻址方式

    157.RET返回指令
    (1)段内返回
    格式:RET
    (2)段间返回
    格式:RET

    (3)段内带立即数返回
    格式:RET 表达式

    (4)段间带立即数返回
    格式:RET 表达式

    158.循环控制指令:LOOP/LOOPZ/LOOPE/LOOPNZ/LOOPNE
    格式:
    指令名 循环入口的地址标号

    操作:判断测试条件,若条件成立,则IP(IP)+8;若条件不成立,则IP保持不变。
    循环指令用的是段内直接寻址法,是相对转移指令。

    159.从寄存器里取数据比从存储器里取数据快得多从而提高了指令执行速度。
    160.假设TABLE是在数据段定义的一个字节数组的首地址标号,其偏移地址为1000H,则:
    MOV AL,TABLE = MOV AL,[TABLE] = MOV AL,[1000H]
    MOV AL,TABLE+2 = MOV AL,[TABLE+2] = MOV AL,[1000H+2]

    160.段超越前缀
    假设TABLE是在附加数据段定义的一个字节数组的首地址标号,其偏移地址为1000H,则
    MOV AL,ES:TABLE
    MOV AL,ES:[TABLE]
    MOV AL,ES:1000H
    MOV AL,ES:[1000H]

    161.BX,BP称为基址寄存器
       SI,DI称为变址寄存器

    MOV AX,[BX]
    MOV AX,[SI]
    MOV AX,[基址寄存器名或变址寄存器名]

    162.注意寄存器间接寻址和相对寻址的区别

    163.寄存器相对寻址:操作数的偏移地址是指定寄存器的值与一个整数之和。
    164.LEA 取偏移指令
    ABC EQU 5
    LEA SI,TABLE
    MOV AL,ABC[SI]

    165.[BX+6]    [BP-1000H]  [SI+OFFSET TABLE] 都是寄存器相对寻址。
    166.基址变址寻址:操作数的偏移地址是两个指定寄存器的值之和。
    如:
    [基址寄存器名][变址寄存器名]
    [基址寄存器名+变址寄存器名]

    167.相对基址变址寻址
    MOV AL,TABLE[BX][SI]
    MOV AL,TABLE[BX+SI]
    MOV AL,[TABLE+BX+SI]

    168.两个段寄存器之间不允许直接传送数据。
    如:
    DATA是用户定义的一个数据段的段名
    则:
    MOV AX,DATA
    MOV DS,AX

    错误:MOV DS,DATA

    169.MOV AX,1234H
       PUSH AX
    执行前 (SS)=2000H,(SP)=00FEH
    执行后 (SS)=2000H,(SP)=00FCH

    注意:入栈时,SP-2

    170.XCHG BX,[BP+SI]
    指令执行前:
    (BX)=1234H,(BP)=0100H,(SI)=0020H,(SS)=1F00H,(1F120H)=0000H
    则 源操作数物理地址=1F00H*10H+0100H+0020H=1F120H

    执行后:
    (BX)=0000H
    (1F120H)=1234H

    171.有两个5字节变量X(789623A789H),Y(2375937B60H),求ZX+Y
    解:
    DATA SEGMENT
    X DB 89H,0A7H,23H,96H,78H
    Y DB 60H,7BH,93H,75H,23H
    Z DB 5 DUP(0)
    DATA ENDS

    CODE SEGMENT
    ASSUME DS:DATA,CS:CODE
    START:
    MOV AX,DATA
    MOV DS,AX
    MOV CX,5
    MOV SI,0

    PO:
    MOV AL,X[SI]
    ADC AL,Y[SI]
    MOV Z[SI],AL

    INC SI
    DEC CX
    JNZ PO
    MOV AH,4CH
    INT 21H
    CODE ENDS
    END START



    172.
    DB :DEFINE BYTE    定义字节        一个字节长
    DW:DEFINE WORD    定义字        两个字节长
    DD:DEFINE DWORD    定义双字     四个字节长

    173.AX1+2+3+…+100

    CODE SEGMENT
    ASSUME CS:CODE
    START:
    MOV AX,0
    MOV SI,1
    MOV CX,100

    PO:
    ADD AX,SI
    INC SI
    DEC CX
    JNZ PO

    CODE ENDS
    END START

    174.X,Y串长度为N,X=Y显示Z,X!=Y显示Y
    解:
    DATA SEGMENT
    N EQU 20
    X DB N DUP(0)
    Y DB N DUP(0)
    DATA ENDS

    CODE SEGMENT
    ASSUME DS:DATA,ES:DATA,CS:CODE
    START:
    MOV AX,DATA
    MOV DS,AX
    MOV ES,AX
    MOV CX,N
    LEA SI,X
    LEA DI,Y
    CLD DF=0

    PO:
    MOV AL,[SI]
    CMP AL,[DI]
    JNZ NP
    INC SI
    INC DI
    DEC CX
    JNZ PO
    MOV DL,’Z’
    MOV AH,02H
    INT 21H
    JMP DP

    NP:
    MOV DL,’Y’
    MOV AH,02H
    INT 21H

    DP:
    MOV AH,4CH
    INT 21H

    CODE ENDS
    END START

    175.完成两个字节数据相加
    解:
    DATA SEGMENT
    BUF1 DB 34H
    BUF2 DB 2AH
    SUM DB ?
    DATA ENDS

    CODE SEGMENT
    ASSUME CS:CODE,DS:DATA
    START:
    MOV AX,DATA
    MOV DS,AX
    MOV AL,BUF1
    ADD AL,BUF2
    MOV SUM,AL
    MOV AH,4CH
    INT 21H

    CODE ENDS
    END START

    176.伪指令语句也叫指示性语句,只是用来指示、引导汇编程序在汇编过程中做一些操作,为汇编程序在翻译时提供有关信息,并不翻译机器代码的语句。
    177.一条宏指令语句的功能相当于若干条指令语句的功能。
    178.            ;注释
    179.操作码用来指明操作的性质或功能。指令中的助记符都是操作码。MOV、ADD都是操作码。
    180.CLC 操作数默认在CF中。
    181.对于十六进制数,当以A~F开头,前面加数字0,以避免和名字混淆,如十六进制A6H,应该写成0A6H,否则容易和名字A6H混淆。
    182.常数用符号名来代替就是符号常数。
    用COUNT EQU 3或COUNT=3定以后COUNT就是一个符号常数,与数值常数3等价。
    183.两个地址相加、相乘、相除是没有意义的。
    184.MOV AL,4*8+5   ;数值表达式
    MOV SI,OFFSET BUF+12   ;D地址表达式
    185.逻辑运算符只能用于数值表达式中,不能用于地址表达式中。
    186.关系运算符
    EQ  相等
    LT   小于
    LE   小于等于
    GT   大于
    GE   大于等于
    NE   不等于
    运算结果为真时,表示为0FFFFH,运算结果为假时,为0000H

    MOV BX,32 EQ 45   等价于   MOV BX,0000H
    MOV BX,56 GT 30   等价于   MOV BX,0FFFFH

    187.一条语句可以写在多行上,续行符是&
    188.分离运算符
    (1)LOW 运算符
    格式:LOW 表达式
    功能:取表达式的低字节部分

    (2)HIGH运算符
    格式:HIGH 表达式
    功能:取表达式的高字节部分

    188.CONSTANT EQU 256
    DATA EQU HEIGHT+12   ;HEIGHT是标号,地址表达式赋以符号名DATA
    ALPHA EQU 7
    BETA EQU ALPHA-2
    ADDR EAU VAR+BETA
    B EQU [BP+8]
    P8 EQU DS:[BP+8]

    189.EQU伪操作中的表达式是不允许重复定义的,而=伪操作允许重复定义。
    190.解除定义伪指令 PURGE
    Y1 EQU 7
    PURGE Y1
    Y1 EQU 88
    191.DB :伪指令用来定义字节,其后的每一个操作数都占有一个字节(8位)的存储单元。
    DW:伪操作定义字,其后的每个操作数占有一个字(16位),低位字节在第一个字节地址中,高位字节在第二个字节地址中。
    DD:定义双字。

    191.操作数“?”可以保留存储空间。但不存入数据。待到程序运行时存放中间或最终结果。
    192.汇编源程序定义:
    DATA_SEG1 SEGMENT   ;定义数据段

    DATA_SEG1 ENDS
    DATA_SEG2 SEGMENT    ;定义附加段

    DATA_SEG2 ENDS

    CODE_SEG SEGMRNT
    ASSUME CS:CODE_SEG,DS:DATA_SEG1,ES:DATA_SEG2
    START:            ;开始执行的入口地址
    MOV AX,DATA_SEG1
    MOV DS,AX
    MOV AX,DATA_SEG2
    MOV ES,AX

    CODE_SEG ENDS    ;代码段定义结束
    END START          ;源程序结束

    193.实现两个32位数的乘法程序
    解:
    DATA SEGMENT
    NUM1 DD 12345678H
    NUM2 DD 5A4BEF06H
    RESULT DD 2 DUP(?)
    DATA ENDS
    CODE SEGMENT
    ASSUME CS:CODE,DS:DATA
    START:
    MOV AX,DATA
    MOV DS,AX
    MOV EAX,NUM1
    MUL EAX,NUM2
    MOV RESULT,EAX
    MOV RESULT+4,EDX
    MOV AH,4CH
    INT 21H
    CODE ENDS
    END START

    194.将一个字节压缩BCD码转化成两个ASCII码
    分析:一个字节的压缩BCD码就是用一个字节的二进制数表示两位十进制数,如十进制96表示成压缩BCD码就是96H,转化成ASCII码就是把压缩BCD码表示的十进制数的高位和低位分开,并以ASCII码表示,即装化成39H,36H
    解:
    DATA SEGMENT
    BCDBUF DB 96H
    ASCBUF DB 2 DUP(?)
    DATA ENDS

    CODE SEGMENT
    ASSUME CS:CODE,DS:DATA
    START:
    MOV AX,DATA
    MOV DS,AX
    MOV AL,BCDBUF    ;取出BCD码
    MOV BL,AL       ;送BL暂存
    MOV CL,4
    SHR AL,CL      ;高四位变低四位,高四位补零(96H09H)
    ADD AL,30H     ;变成ASCII码(39H)
    MOV ASCBUF,AL    ;存储第一个ASCII码
    AND BL,0FH      ;屏蔽高四位,只保留低四位(96H06H)
    ADD BL,30H     ;变成BCD码(36H)
    MOV ASCBUF+1,BL     ;存储第二个码
    MOV AH,4CH
    INT 21H

    CODE ENDS
    END START


    195.利用直接查表法完成将键盘输入的一位十进制数(0~9)转换成对应的平方值,并存放在SQRBUF中。
    分析:0~9的平方值分别为0,1,4,9,16,25,36,49,64,81.把平方值放在一起形成一个平方值表,根据输入的值和对应平方值所在单元地址之间的关系(表首地址加上输入的值),查出相应的平方值。
    解:
    DATA SEGMENT
    SQRTAB DB 0,1,4,9,16,25,36,49,64,81
    SQRBUF DB ?
    DATA ENDS

    CODE SEGMENT
    ASSUME CS:CODE,DS:DATA
    START:
    MOV AX,DATA
    MOV DS,AX
    MOV BX,OFFSET SQRTAB   ;平方表首地址
    MOV AL,1
    INT 21H    ;由键盘输入一个数,得到其ASCII码
    SUB AL,30H    ;由ASCII码得到相应的数
    XLAT     ;查表
    MOV SQRBUF,AL    ;存储结果
    MOV AH,4CH
    INT 21H

    CODE ENDS
    END START

    196.从键盘输入一个小写字母,将其转化成大写字母在屏幕上显示出来。
    分析:用DOS功能调用来实现   ASCII-32

    解:
    STACK SEGMENT STACK
    DB 200 DUP(?)
    STACK ENDS

    CODE SEGMENT
    ASSUME CS:CODE,SS:STACK
    BEGIN:
    MOV AH,01H    ;一号调用,从键盘输入字符存入AL
    INT 21H
    SUB AL,20H    ;十六进制20就是十进制的32
    MOV DL,AL
    MOV AH,02H   ;二号调用,在屏幕上显示DL中的内容
    INT 21H
    MOV AH,4CH
    INT 21H

    CODE ENDS
    END BEGIN

    197.在内存中有一个字节单元NUM,存有带符号数据,要求计算绝对值,放入RESULT单元中。
    分析:NEG   求反
    解:
    DATA SEGMENT
    X DB -25
    RESULT DB ?
    DATA ENDS
    CODE SEGMENT
    ASSUME DS:DATA,CS:CODE
    START:
    MOV AX,DATA
    MOV DS,AX
    MOV AL,X
    TEST AL,80H    ;测试AL的正负
    JZ NEXT    ;为正,转NEXT
    NEG AL   ;否则,求反

    NEXT:
    MOV RESULT,AL
    MOV AH,4CH
    INT 21H

    CODE ENDS
    END START

    198.多分支结构实现方法:条件选择法,跳跃表法,地址表法
    199.求:Y=1,X>0
            Y=0,X=0
            Y=-1,X<0
    输入数据为X,输出数据为Y,都是字节变量。
    解:
    DATA SEGMENT
    X DB -25
    Y DB ?
    DATA ENDS

    CODE SEGMENT
    ASSUME CS:CODE,DS:DATA

    START:
    MOV AX,DATA
    MOV DS,AX
    MOV AL,X
    CMP AL,0    ;AL中内容和0比较
    JGE BIG    ;>=0,转BIG
    MOV BL,-1  ;否则为负数,-1送BL
    JMP EXIT    ;结束
    BIG:JE EE     ;AL中内容是否为0,为零转EE
    MOV AL,1    ;否则为大于零,1送BL
    JMP EXIT

    EE:MOV BL,0
    EXIT:
    MOV Y,BL
    MOV AH,4CH
    INT 21H

    CODE ENDS
    END START

    200.SHL:将操作数逻辑左移指定次数
    SHR:将操作数逻辑右移指定次数

    201.除法指令要求被除数的长度必须是除数的两倍。
    字节除法是用16位数除以8位数,字除法是用32位数除以16位数。
    DIV:无符号数除法
    IDIV:带符号数除法
    202.格式:DIV SRC
    操作:
    字节操作:
    (AL)(AX)/(SRC)的商
    (AH) (AX)/(SRC)的余数

    字操作
    (AX)(DX,AX)/(SRC)的商
    (DX) (DX,AX)/(SRC)的余数

    在除法中,被除数也即目的操作数隐含在AX(字节运算)或DX-AX(字运算)中,除数即源操作数。

    203.
    (1)DIV CL    ;AX的内容除以CL的内容,无符号商存于AL,余数存于AH
    (2)IDIV DL    
    (3)DIV BYTE PTR[BP]   ;AX的内容除以堆栈段中由BP寻址的字节存储单元的内容。无符号的商存于AL中,余数存储AH中。

    204.CS  指令寻址
    SS   堆栈寻址
    DS   数据寻址

    205.OF   是否溢出标识符
    DF    方向标识符
    IF    中断标志符
    SF    符号标识符
    ZF     是否为零标识符
    AF    辅助进位标识符
    PF    奇偶标识符
    CF    进位标识符

    206.AX,BX,CX,DX     16位数据寄存器,2字节
    SP,BP,SI,DI           16位指针与变址寄存器  2字节

    AX可以分别访问高位字节AH和低位字节AL。
    AX,BX,CX,DX可以以字(16位)形式访问,也可以以字节(8位)访问,都是通用寄存器。
    SP,BP,SI,DI只能以字(16位)访问。

    207.使用ASSUME伪操作来明确段和段寄存器的关系。
    其中段寄存器名必须是CS,DS,ES,SS,而段名必须是由SEGMENT定义的段中的段名。
    208.ASSUME伪操作只是指定某个段分配给哪一个段寄存器,并不能把段地址装入段寄存器。
    数据段和堆栈段需要这样做,CS不需要这样做,这是在程序初始化时完成的。
    209.从CISC体系结构转变为RISC体系结构后,在同样的工艺水平(即同样的主频,同样的工艺尺寸,同样的芯片面积下),使CPU的速度和性能有了很大的提高。
    210.microprocessor   微处理器
    Microcomputer   微型计算机

    211.操作码:指明要完成操作的性质
    地址码:指明规定操作的数据存放地址或操作数
    212.assemble language  汇编语言
    汇编语言程序翻译成机器语言程序的过程称为汇编。
    213.汇编语言依赖于某一具体计算机,是面向机器的语言。
    214.八进制表示  O  Q
    十进制表示   D
    二进制表示    B
    十六进制表示    H
    215.反码的特点:
    (1)“0”有两种表示法
    (2)8位二进制反码所能表示的范围-128~127
    (3)当一个带符号数由反码表示时,最高位为符号位。当符号位为0时,后面的7位为数值部分;当符号位为1时,一定要按位取反,才能得到数值。

    216.补码特点:
    (1)[+0]补=[-0]补=00000000
    (2)8位二进制补码表示的数值为-128~127
    (3)用补码表示的二进制数,最高位为符号位,当符号位为0时,其余7位是此数的二进制值;当符号位为1时,数值获取方法是按位取反加1.

    217.数字0~9的ASCII码值用十进制数表示是48~57
    用十六进制表示是30H~39H
    218.双字是任何字节地址开始的两个相邻字,其中每个字节都有自己的地址,最小字节地址就是双字的地址。
    219.非压缩BCD码是用一个字节只表示一位0~9的十进制数,这些数作为无符号字节值存放,数的大小由低字节确定。
    220.压缩BCD码是用一个字节来表示两个十进制数(0~9),每半个字节保存一个0~9的数字。
    221.结果的显示或打印,可使用DOS功能调用02号功能来实现。是把要显示字符的ASCII码送入DL寄存器,功能调用02号送入AH寄存器,通过指令INT 21H即可实现结果的显示与打印。
    222.
    MOV DL,’?’
    MOV AH,02H
    INT 21H
    ‘?’原先放在何处并不重要,但一定是要送入DL寄存器才能显示。
    223.显示字符串
    将在缓冲区中的字符串送屏幕显示或打印。使用9号功能调用。要显示的字符串应该存入由数据段定义的缓冲区中。且以‘$’为结束标志。
    解:
    DATA SEGMENT
    BUF DB ‘HOW ARE YOU!$’
    DATA ENDS

    CODE SEGMENT
    ASSUME CS:CODE,DS:DATA
    MOV AX,DATA
    MOV DS,AX

    MOV DX,OFFSET BUF
    MOV AX,09H
    INT 21H

    CODE ENDS

    224.

    225.IP是指向下一次要取出的指令,与CS寄存器配合才能形成真正的物理地址。
    226.通用寄存器共有8个:
    EAX/EBX/ECX/EDX可作为8位,16位或32位寄存器使用。
    ESI/SDI/EBP/ESP可作为16位或32位寄存器使用。


    227.AF:Auxitiary Carry Flag 辅助进位标志
    在字节操作时,由低半字节向高半字节进位或借位;在字操作时,低位字节向高位字节有进位或借位,则AF=1,否则为0.
    228.CF:Carry Flag  进位标志
    当结果的最高位产生一个进位或借位,则CF=1,否则CF=0.
    229.OF :Overflow Flag  带符号数的运算结果超出了8位或16位,即在字节运算时大于+127或小于-128,在字运算时大于32767或小于-32768,置1.
    230.CF和OF没有必然关系。
    231.奇偶标志PF:Parity Flag  ,若操作结果中“1”的个数为偶数,则PF=1,否则PF=0.
    可用于校验。
    232.零标志 ZF:(Zero Flag)若运算结果为0,则ZF=1,否则ZF=0.
    233.IF Interrupt-enable Flag  中断允许标志
    若指令中置IF=1,则允许CPU去接收外部的可屏蔽中断请求。若IF=0,则屏蔽上述的中断请求。
    234.CLC:Clear Carry Flag  标志CF清零。即CF0
    235.CLD:Clear Direction Flag   标志DF清零,即DF0,则在串操作时,使地址增量。
    236.方向标志 DF(Direction Flag)
    若DF=1,则引起串操作指令为自动减量指令,也就是从高地址到低地址处理字符串。
    若DF=0,则引起串操作指令为自动增量指令,也就是从低地址到高地址处理字符串。

    237.1个字节8位,1个字16位,1个双字32位。
                       Word         Double Word
    238.字节是微型计算机中存取信息的基本单位(存储单元)。
    一个双字占用4个存储单元(字节)。
    239.对于字,双字,四字数据类型,由于他们每个数据都要占用多个单元,访问时只需给出最低单元的地址号即可,然后依次存取后继字节。
    低地址中存放低位字节数据,高地址中存放高位字节数据。
    240.在内存中
    地址: 0     1     2     3     4     5
    数据:12H   34H   45H   67H   89H   0AH

    (1)字节=34H
    (1)字=4534H
    (1)双字=89674534H

    241.物理地址计算:
    10H*段基址+偏移量

    注:10H=16D
    就是二进制数向左移动4位。
    段基址和偏移量一般用十六进制数表示,简便的计算方法是在段基址的最低位补以0H,再加上偏移量。
    242.某内存单元的地址用十六进制数表示为1234:5678,则物理地址是:
    10H*1234H+5678H=179B8H

    注:
    1234:5678中,1234是段基址,5678是段内偏移量,就是偏移地址。

    243.若(CS)=1234H,(DS)=2000H,(IP)=0010H,(SS)=4000H,则下一条要执行指令的地址是:
    10H*(CS)+(IP)=12340H+0010H=12350H

    244.每个存储单元在存储器中所具有的地址称为存储单元的物理地址。段基地址是每一段的起始地址,单元与段基地址的距离称为段内偏移地址,也叫偏移量。
    245.
    (1)MOV AL,20H
    (2)MOV BX.2568H
    (3)MOV ECX 25685678H
    三条指令中的立即数依次是8位,16位,32位,对应的寄存器也分别是8位的AL,16位的BX和32位的ECX
    246.MOV AX,im      立即数im,低8位字节iml存储在低地址字节中,高8位字节imh存储在高地址字节单元中。
    247.寄存器寻址操作数直接存放在寄存器中,由指令指定的寄存器进行寻址,即操作数包含在指令规定的8位,16位,或32位寄存器中。
    INC DL
    MOV DS,AX
    MOV EBX,ECX
    三条指令操作数分别存于8位DL,16位AX和32位ECX中。

    248.直接寻址
    物理地址=10H*(DS)+有效地址     或
    物理地址=16D*(DS)+有效地址

    249.设操作数存放在DS所指向的数据段中,(DS)=2000H,(21000H)=34H,(21001H)=12H,(BX)=5678H,执行MOV BX,[1000H]

    物理地址=10H*(DS)+1000H=21000H
    (BX)=1234H
    低位字节在低地址存储单元中,
    高位字节在高地址存储单元中。

    250.默认情况下,认为操作数有效地址的作用域是DS所指向的数据段,但允许使用段超越前缀指定为其他段,即对于寻找操作数来说,还允许操作数在以代码段、堆栈段或附加段为基准的区域中,只要在指令中指明是段超越的。16位地址偏移量可以与CS,SS,ES相加,作为操作数的地址。如MOV AX,ES:[2000H]

    251.寄存器间接寻址可以是16位或32位的
    使用BX,SI,DI,BP,则为16位寻址。
    使用EAX,EBX,ECX,EDX,ESI,ESP,EDI,EBP,为32位寻址。

    252.以BX/SI/DI/EAX/EBX/ECX/EDX/ESI/EDI间接寻址时,则默认操作数在DS段中。以BP/EBP/ESP间接寻址,则默认操作数在SS段。
    253.以SI/DI/BX间接寻址,通常操作数在现行数据段中,即数据段寄存器DS左移4位后加上SI/DI/BX中的16位偏移地址作为操作数的地址。
    254.设(DS)=2000H,(SI)=1000H,21000H单元的内容为34H,21001H单元的内容为12H,执行MOV AX,[SI]后,(AX)=1234H

    254.若是以寄存器BP间接寻址,则操作数在堆栈段中,SS左移4位后与BP相加作为操作数的地址。
    如:
    (SS)=3000H,(BP)=2000H,32000H单元的内容为34H,32001H单元的内容为12H,执行MOV AX,[BP]后,(AX)=1234H.

    255.通用寄存器EAX,EBX,ECX,EDX,ESI,EDI默认段寄存器为DS。
    通用寄存器ESP,EBP默认段寄存器位SS。
    256.
    (1)MOV EBX,[EAX]   ;默认DS为段基址,传送双字给EBX
    (2)MOV DX,[EBX]    ;默认DS为段基址,传送字给DX
    (3)MOV CH,[EAX]    ;默认DS为段基址,传送字节给CH
    257.如果操作数在默认段之外,指令中必须加段超越前缀。
    如:
    (1)MOV AX,ES:[SI]    ;操作数在附加段寄存器ES中,不在默认段DS中。
    (2)MOV AX,DS:[BP]   ;操作数在数据段寄存器DS中,不在默认段SS中。

    “ES”和“DS”分别是两指令的段超越前缀。

    258.若在指令中规定是段超越的,则BP也可以与其他的段寄存器相加,形成操作数地址,如:
    MOV AX,DS:[BP]     ;BP不是与SS段寄存器形成操作数地址,而是与DS段寄存器形成操作数地址。

    259.设(DS)=2000H,(SI)=1200H,(21200H)=56H,执行指令MOV AH,[SI]的结果是:
    (AH)=56H

    260.设(DS)=2000H,(DI)=2100H,(22100H)=68H,(22101H)=41H,执行指令MOV BX,[DI]后,
    (BX)=4168H

    261.EA :Effective Address   有效地址 或偏移地址  偏移量
    262.基址寻址:由指定的基址寄存器内容,加上指令中给定的偏移量(要由一个段寄存器作为地址基准)作为操作数的地址的寻址方式称为基址寻址。
    263.在基址寻址方式下,EA=[基址寄存器]+位移量,位移量是常数且紧跟在操作码之后,与操作码一起放在代码段中。
    264.在16位寻址情况下,BX和BP作为基址寄存器。在缺省段超越前缀时,BX以DS作为默认段寄存器,BP以SS作为默认段寄存器。位移量为8位或16位。
    265.基址寻址适用于对一维数组的数组元素进行检索操作。位移量表示数组起始地址偏移量,基址表示可以变化的数组元素下标。
    266.EA的格式:
    [基址寄存器]+位移量
    位移量[基址寄存器]
    267.
    (1)MOV EAX,[BX+24]   或   MOV EAX,24[BX]
    (2)MOV ECX,[EBP+50]   或   MOV ECX,50[EBP]
    (3)MOV DX,[EAX+1500]  或  MOV DX,1500[EAX]

    268.设(DS)=2000H,(SI)=1200H,(21206)=56H,执行MOV AH,[SI+6],结果为:
    (AH)=56H
    269.基址变址寻址:由指令中的基址寄存器内容和变址寄存器内容相加得到操作数的有效地址EA的寻址方式。
    EA=[基址寄存器]+[变址寄存器]
    如:
    MOV AX,[BX+SI]   或  MOV AX,[BX][SI]
    MOV EAX,[EDX][EBP]  或  MOV EAX,[EDX+EBP]
    一般规定由基址寄存器来决定默认哪一个段寄存器作段基址指针。若使用BP、ESP或EBP,则默认操作数在SS中;若使用其他基址或变址寄存器,则默认操作数在DS中。
    270.MOV AX,[BX][SI]   ;基址寄存器是BX,默认DS为段基址寄存器。
    MOV EAX,[EBP][ECX]    ;基址寄存器是EBP,默认SS为段基址寄存器。

    271.设(DS)=2000H,(SI)=200H,(BX)=1000H,(21200H)=21H,执行MOV AL,[SI+BX],结果:
    (AL)=21H.

    272.执行MOV BX,[EDI+EAX]的结果是将内存中DS:[EDI+EAX]处开始的连续两个单元内容送BX中。
    273.相对基址变址寻址:由变址寄存器、基址寄存器内容和位移量一同相加而得到操作数有效地址的寻址方式。
    EA=[基址寄存器]+[变址寄存器]+位移量
    如:
    MOV AX,[BX+DI+MASK]   或   MOV AX,MASK[BX][DI]

    ADD EDX,[ESI][EBP+0FFFF000H]   或  ADD EDX,0FFFF000H[ESI][EBP]

    274.汇编语言对指令的大小写是不敏感的。
    275.传送100个数据,写出程序。
    分析:使用循环,每次循环都要修改原地址和目标地址,这就要把源、目的地址分别放在两个寄存器中,用寄存器间接寻址来寻找操作数,修改了寄存器的内容。
    解:
    MOV SI,OFFSET AREA1
    MOV DI,OFFSET AREA2
    MOV CX,100
    AGAIN:
    MOV AL,[DI]
    MOV [SI],AL
    INC SI
    INC DI
    DEC CX
    JNZ AGAIN

    276.OFFSET AREA1  是指地址单元AREA1在段内的地址偏移量。寻找内存操作数时,必须以段地址(在某个段寄存器中)加上此单元的段内地址偏移量,才能确定某一内存单元的物理地址。
    277.地址传送指令主要用于传送操作数的地址。
    LEA,装入有效地址指令
    Load Effective Address

    LDS:装入DS指令
    LES:装入ES指令
    LSS:装入SS指令

    278.装入有效地址指令 LEA
    格式:LEA reg,mem
    功能:将有效地址(偏移地址)mem而不是mem的内容装入到一指定寄存器reg中。
    说明:源操作数必须是一个内存操作数,目的操作数必须是一个16位的通用寄存器。
    279.LEA BX,LIST
    将变量LIST的地址偏移量送到BX
    280.若BX寄存器的内容是0400H,SI寄存器的内容是003CH,执行指令LEA BX,[BX+SI+0F62H]后,BX的内容是什么?
    解:
    将0400H+003CH+0F62H=139EH送BX,所以结果(BX)=139EH.
    与MOV BX,[BX+SI+0F62H]区别是MOV将139EH表示的单元内容送BX。

    281.LEA指令可以用相应的源操作数为立即数的MOV指令代替。
    如:
    MOV BX,OFFSET VARWORD   等价于  LEA BX,VARWORD

    282.LDS reg,mem
    LES reg,mem
    LSS reg,mem
    功能:将一个32位或48位的全地址指针(包括一个16位段选择符和一个16位或32位偏移值)装入一个段寄存器和一个通用寄存器。段寄存器由指令操作码LDS、LES、LSS分别指定为DS,ES,SS.通用寄存器由目的操作数reg指定。

    283.XCHG reg,reg
    XCHG mem,reg
    XCHG reg,mem
    reg是寄存器操作数,mem是存储器操作数。

    如:
    XCHG AL,CL
    XCHG AX,DI
    XCHG BX,SI
    XCHG AX,BUFFER
    XCHG BX,DATA[SI]
    XCHG BL,[1000H]

    284.查表转换指令XLAT
    格式:XLAT
    功能:完成一个字节的查表转换。在DS:EBX外,建立一个256字节的表,用寄存器EBX作为基址。寄存器AL作为表的无符号下标(即表指针)将AL指向的那个字节的内容送回AL,即
    ((EBX)+(AL))AL
    说明:
    (1)在使用该指令之前,存储器内需有一个代码转换表,表首地址送到EBX,相对于表首的位移量送到AL中,则转换后数据的有效地址为:
    有效地址=表首地址+位移量
    即以EBX寄存器内容作为表首,AL寄存器内容作为位移量所对应的表中数据送入寄存器AL中,并替换掉AL原先的内容。
    (2)该指令无显式操作数,操作数是隐含的。指令默认段的数据段DS,而偏移量总是从寄存器EBX中得到。
    (3)指令执行前AL是下标,执行后AL是查表的结果。若要在其他段中查表,可加段前缀。

    285.通过查表转换指令,求0~9中任意一个数的平方
    TAB DB 1,4,9,16,25,36,49,64,81
    MOV AX,SEG TAB
    MOV DS,AX
    MOV BX,OFFSET TAB
    MOV AL,5
    XLAT

    执行后:(AL)=25

    286.实现存储器操作数与立即数相加/减,与累加器或别的寄存器相加/减,和/差放到该存储单元中。
    ADD BETA[SI],100
    ADD BETA[SI],AX
    ADD BETA[SI],DX
    SUB BUF[SI],200
    SUB BUF[SI],AX
    SUB BUF[SI],DX

    287.指令SBB [DI],100 实现的功能是用DS:[DI]所指单元的内容减去100再减去CF,结果送到DS:[DI]指向的字节单元中。

    288.求补指令 NEG
    格式:NEG OPRD
    功能:对OPRD取补,相当于执行“OPRD0-OPRD”

    如:
    若(AH)=13H,执行NEG AH指令后,(AH)=0EDH;若(BX)=03H,执行NEG BX指令后,(BX)=0FFFDH.
    说明:是求补,而不是求反。

    289.CMP AX,BX
    根据CMP指令的功能,应做AX-BX的操作。若结果没有产生借位(CF=0),则AX>=BX;若产生借位(CF=1),则AX<BX.
    290.求最大值
    MOV BX,OFFSET BLOCK
    MOV AX,[BX]
    INC BX
    INC BX
    MOV CX,99

    AGAIN:
    CMP AX,[BX]
    JG NEXT
    MOV AX,[BX]

    NEXT:
    INC BX
    INC BX
    DEC CX
    JNE AGAIN
    MOV MAX,AX
    HLT

    说明:JG为判断带符号数的大小,若大,则转移到后面的标号。

    291.MUL OPRD
    IMUL OPRD
    IMUL OPRD1,OPRD2
    IMUL OPRD1,OPRD2,OPRD3

    MUL:实现两个无符号数相乘,AL,AX或EAX的内容和OPRD的内容是两个无符号数,且如果OPRD长度为8位,则与AL内容相乘,相乘结果送到AX中;
    如果OPRD长度为16位,则与AX内容相乘,相乘结果送到DX:AX中;
    如果OPRD长度为32位,则与EAX内容相乘,相乘结果送到EDS:EAX中;

    292.MUL CL     ;AX(AL)*(CL)
    MUL BX      ;DX:AX(AX)*(BX)
    MUL DWORD[ESI]    ;EAX中32位数与[ESI]所指双字单元中的32位数相乘,结果在EDX:EAX中。

    293.IMUL OPRD
    被乘数是累加器(AL,AX或EAX),乘以指定的操作数;字节运算时乘积返回到AX,字运算时乘积返回到DX:AX,双字运算时乘积返回到EDX:EAX

    294.IMUL OPRD1,OPRD2
    在双字操作数格式下,用OPRD1乘以OPRD2,积存放在OPRD1指定的寄存器中。
    295.IMUL OPRD1,OPRD2,OPRD3
    用OPRD2乘以OPRD3,积放到OPRD1
    296.格式:
    DIV OPRD
    IDIV OPRD
    功能:
    DIV无符号数除法,OPRD内容作为除数,如果OPRD长度为8位,则AX内容作为被除数,运算后商送到AL中,余数送到AH中。

    297.DIV CL
    (AX)/(CX) ,商在AL中,余数在AH中。
    298.DIV WORD PTR[SI]
    (DX:AX)中的32位数,除以(SI)所指单元中的16位数,商在AX中,余数在DX中。

    299.某个操作数,自己和自己相“与”,操作数不变,可以使CF=0.
    某个操作数,自己和自己相“或”,操作数不变,可以使CF=0.
    某个操作数,自己和自己相“异或”,操作数置零,使CF=0.
    300.检测AL中的最低位是否为1,为1则转移。
    TEST AL,01H
    JNZ THERE

    THERE:

    301.在实地址方式下,段寄存器的内容左移4位而得到段基地址。
    302.NAME MAIN_PROGMODULE
    NAME是保留字,用于定义程序模块的名称,MAIN_PROGMODULE是程序名称,可用任意标识符为程序命名。
    303.显示一行字符串
    NAME SIMPLE_EXAMPLE
    FIRST_DATA SEGMENT
    STRING_DA DB ‘This is my program$’
    FIRST_DATA ENDS

    FIRST_STACK SEGMENT PARA STACK ‘STACK’
               DB 100 DUP(?)
    FIRST_STACK ENDS

    FIRST CODE SEGMENT
    ASSUME DS:FIRST_DATA,SS:FIRST_STACK,CS:FIRST_CODE
    START:
    MOV AX,FIRST_DATA
    MOV DS,AX
    LEA DX,STRING_DA
    MOV AH,09H
    INT 21H
    MOV AH,4CH
    INT 21H

    FIRST_CODE ENDS
    END START

    304.根据程序的实际情况,SS,DS,ES也可以没有,只有CS是必不可少的。每个程序至少必须有一个。
    305.每个源程序在其代码段中都必须有返回到DOS的指令语句,以保证程序执行完后能自动返回DOS,可继续向计算机键入命令。
    306.作为存储器操作数的标号和变量有三种共同属性:
    (1)段值:段基址,可用SEG运算符求得。
    (2)偏移值:段内偏移地址,可用OFFSET运算符求得。
    (3)类型。。。
    307.“?”表示不确定值,只表示预留规定长度的存储空间。
    308.DUP:建立单个值的多次拷贝。
    309.
    (1)VAR1 DB ?     ;变量VAR1分配一个字节,但不赋初值。
    (2)VAR2 DD ?      ; 变量VAR1分配四个字节,但不赋初值。
    (3)STR1 DB ‘ABCDE’    ;给字符串分配5个字节,并赋初值。
    (4)ARRAY DW 20 DUP(1)   ;给数组ARRAY分配20个字,初值均为1
    (5)BUFF DB 6 DUP(?)    ;相当于  DB ?,?,?,?,?,?
    (6)COUNT DB 25,35,45    ;给变量COUNT分配3个字节,并赋初值

    310.操作数是字符串时,内存中存放的是每个字符的ASCII码
    STR1 DB  ‘ABCDE’
    STR1 DB  ‘A’,’B’,’C’,’D’,’E’
    STR1 DB  41H,42H,43H,44H,45H
    三者等价。

    311.复制操作符DUP,表示操作数重复若干次。
    (1)BUFFER1 DB 2 DUP(2,3,4)
    等价于
    BUFFER1 DB 2,3,4,2,3,4
    BUFFER2 DW 1,2,3 DUP(6)
    等价于
    BUFFER2 DW 1,2,6,6,6
    BUFFER3 DB 2 DUP(5,6,3 DUP(7))
    等价于
    BUFFER3 DB 5,6,7,7,7,5,6,7,7,7

    312.指令单元 NEAR 和FAR
    若一个单元的类型是NEAR,汇编程序产生一个段内JMP或CALL指令
    若一个单元的类型是FAR,汇编程序产生一个段间JMP或CALL指令

    313.DATA EQU 7
    PURGE DATA
    DATA EQU 28

    314.MOV AX,SEG DATA
    功能:把DATA的段地址存入AX寄存器中。
    315.MOV SI,OFFSET DATA
    功能:把DATA的偏移地址存入SI寄存器中。
    等价于
    LEA SI,DATA

    316.PTR操作符
    格式:类型 PTR 表达式
    类型:BYTE,WORD,DWORD,NEAR,FAR
    功能:给表达式(变量或标号)指定类型,不管有无类型或是什么类型,均以PTR前的类型为准。(有没有像C语言中的强制类型转换呢,嘿嘿)

    对于变量,可以指定的类型是BYTE,WORD,DWORD
    对于标号,可以指定的类型是NEAR(段内引用型),FAR(段间引用型)。

    317.MASM:Microsoft Macro Assembler    汇编器,汇编开发环境
    318.ASSUME:段寄存器说明语句
    格式:ASSUME 段寄存器:段名/组名
    功能:说明源程序中定义的段或组由哪个段寄存器去寻址。指出了段与段寄存器的关系。

    319.三个数相加把结果放在SUM单元中。
    解:
    DATA SEGMENT
    BUF DB 35H,78H,0A5H
    SUM DB ?
    DATA ENDS

    CODE SEGMENT
    ASSUME CS:CODE,DS:DATA
    START:
    MOV AX,DATA
    MOV DS,AX
    MOV AL,0
    MOV SI,OFFSET BUF
    ADD AL,[SI]
    INC SI
    ADD AL,[SI]
    INC SI
    ADD AL,[SI]
    MOV SUM,AL
    MOV AH,4CH
    INT 21H

    CODE ENDS
    END START

    320.子程序定义

    子程序名 PROC FAR /NEAR

    RET
    子程序名 ENDP

    321.调用
    CALL [NEAR/FAR PTR]  子程序名

    322.宏定义
    宏名 MACRO 形参

    宏名 ENDM

    调用:
    宏名 实参

    323.宏调用展开在编译处,在EXE文件中有N份。
    子程序展开在执行处,在EXE文件中有1份。
    324.同一个变量可以在两行定义
    如:
    X DB 12H,34H
     DB 78H,96H

    325.
    错误:
    INC [SI]

    正确:
    INC WORD PTR [SI]
    INC BYTE PTR [SI]

    326.在汇编中字符就和字符串一样,是同一个概念,都用单引号。字符就是长度为1的字符串。
    327.AND AL,78H AND 0FH
    第一个AND是指令,在执行时起作用。
    第二个AND是运算符,在编译时起作用。

    328.ADD AX,5+3
    第一个ADD是指令,在执行时处理。
    第二个“+”是一个表达式,编译时处理。

    329.MOV AX,WORD PTR X
    X是其他类型的,AX是WORD类型的,用WORD PTR进行类型转换。

    330.DB可以定义:
    (1)单字节数据
    (2)字符串(按顺序放)

    以下是内存单元:
    MESSAGE DB ‘HELLO’



    331.DW可以定义:
    (1)双字节数据
    (2)只能为长度为2的字符串
    (3)地址表达式 EA

    以下是内存单元:



    332.DD可以定义:
    (1)双字数据
    (2)只能放长度为4的字符串
    (3)地址表达式

    以下是内存单元:



    333.子程序结束  ENDP
    源程序结束   END

    334.$表示当前地址




    335.汇编上机过程:
    (1)用编辑程序建立ASM源文件;
    (2)用MASM程序把ASM文件汇编成OBJ文件;
    (3)用LINK程序把OBJ文件连接成EXE文件;
    (4)用DOS命令直接键入文件名就可执行该程序;

    336.汇编程序的主要功能:
    (1)检查源程序语法是否正确;
    (2)测出源程序中的语法错误,并给出错误信息;
    (3)产生目标程序;
    (4)展开宏指令

    337.OBJ是二进制文件。
    338.汇编过程生成3个文件,
    EXAM.OBJ   :一定需要
    EXAM.LST   :可有可无
    EXAM.CRF   :可有可无

    339.警告错误:WARNING ERRORS
    严重错误:  SEVERE ERRORS

    340..ASM (MASM汇编).OBJ(LINK 连接).EXE
    341.DEBUG命令
    A命令(汇编命令),逐行输入汇编程序

    —A 回车
    2A7D :  0100  MOV AX,0201     ;地址自动给出
    2A7D :  0103  MOV BX,0200
    2A7D :  0106  MOV CX,0001
    2A7D :  0109  MOV DX,0000
    2A7D :  010C  INT 13
    2A7D :  010E  INT 3
    2A7D :  010F                ;结束输入
    段地址:偏移地址 自动给出

    342.G命令  执行
    —G=100 回车     ;从地址100H处开始执行

    343.T命令  跟踪执行
    每条指令执行后,都要暂停并显示各寄存器的内容。实际上是单步执行。

    —T=0100  3      ;从地址0100H开始执行,执行3条命令

    344.U命令   反汇编
    —U 100 回车           ;从地址100H处开始反汇编
    可以看到源代码的段地址和偏移地址。

    345.D命令    显示内存
    将调入内存的程序以十六进制形式以及对应的ASCII形式显示出来。

    —D 100,200  回车
    显示内存地址从100至200这一段的内容。

    346.地址计数器 $
    JNZ $+6     ;JNZ指令的首地址加上6
    当$用在指令中,表示本条指令的第一个字节的地址。$+6必须是另一条指令的首地址。

    $用在伪操作的参数字段时,表示的是地址计数器的当前值。

    347.ORG伪操作:用来设置当前地址计数器的值。

    格式:
    ORG 常数表达式

    如常数表达式的值为N,则ORG伪操作可以使下一个字节的地址成为常数表达式的值N。

    VECTORS SEGMENT
    ORG 10
    VECT1 DW 47A5H
    ORG 20
    VECT DW 0C596H
    VECTORS ENDS

    348.ORG $+8        ;表示跳过8个字节的存储区,亦即建立起8字节的未初始化的数据缓冲区。
    349.TYPE运算符:返回变量或标号的类型值(属性值)
    350.LENGTH运算符:返回变量数据区分配的数据项总数
    351.SIZE运算符:返回变量数据区分配的字节个数
    352.    8086CPU在基址变址寻址方式中,基址寄存器可以是(B)
    A.AX或CX   B.BX或BP       C.SI或BX      D.DX或DI

    353下列传送指令中有语法错误的是(A)
    A.MOV CS,AX     B.MOV DS,AX    C.MOV SS,AX        D.MOV ES,AX
    解:不允许给CS/IP/PSW三个寄存器传送数据,即这三个寄存器的值用户无法改变。

    354.逻辑移位指令SHR用于:D
    A.带符号数乘2              B.带符号数除2
    C.无符号数乘2              D.无符号数除2

    355.逻辑移位指令
    (1)SHL
    (2)SHR
    都用于无符号数

    356.算数移位指令
    (1)SAL
    (2)SAR
    用于有符号数

    357.
    STR1 DW ‘AB’
    STR2 DB 14 DUP(?)
    CNT EQU $-STR1
    MOV CX,CNT
    MOV AX,STR1
    则寄存器CL的值是(A)
    A.10H        B.12H            C.0EH            D.0FH

    J寄存器AX的值是(C)
    A.00ABH         B.00BAH         C.4142H           D.4241H

    358.简述汇编语言的上机过程:
    (1)用编辑软件编辑扩展名为.ASM的源程序;
    (2)用汇编程序MASM汇编源程序产生目标文件.OBJ;
    (3)用连接程序LINK连接目标程序产生可执行文件 .EXE;
    (4)用DOS直接键入文件名运行可执行程序,或进入DEBUG调试;

    259.执行段内返回RET指令时,执行的操作是:
    IP((SP)+1,(SP))
    SP(SP)+2

    260.执行段间返回RET指令时,执行的操作是:
    IP((SP)+1,(SP))
    SP(SP)+2
    CS((SP)+1,(SP))
    SP(SP)+2

    261.当中断发生时,由中断机构自动完成哪些动作?(中断过程)
    (1)取中断类型号,标志寄存器内容入栈;
    (2)当前代码段寄存器入栈,当前指令计数器入栈;
    (3)禁止硬件中断和单步中断,从中断向量表取4N的字内容送IP及4N+2的字内容送CS,转中断处理程序;

    262.
    DATA SEGMENT
    ORG 0020H
    BUFF DB 6,5,’78’
    ARRAY DW 5,67,8
    BASUB EQU ARRAY-BUFF
    DATA ENDS
    该数据段已占有的存储字节数是:10字节
    BASUB的值:4

    263.
    A1 DB 10 DUP(?)
    A2 DB 0,1,2,3,4,5,6,7,8,9

    MOV CX,LENGTH A1
    MOV SI,SIZE A1-TYPE A1
    LOP:MOV AL,A2[SI]
    MOV A1[SI],AL
    SUB SI,TYPE A1
    DEC CX
    JNZ LOP

    执行后,A1单元开始的10个字节的内容:0,1,2,3,4,5,6,7,8,9
    功能:将A2中的10个数据传送到A1中的10个字节单元。

    264.当执行指令ADD AX,BX 后,若AX的内容为2BA0H,设置的奇偶标志位PF=1,则正确的是(D)   ???不懂
    A.表示结果中含1的个数为偶数
    B.表示结果中含1的个数为奇数
    C.表示该数为偶数
    D.表示结果中低8位含1的个数为偶数

    265.串重复前缀指令
    REP :     (CX)=0,则退出本条指令的执行,否则继续执行。
    REPZ/REPE:   当(CX)=0即数据串比较完成或ZF=0即某次比较结果不相等时退出。

    266.在串操作指令前使用重复前缀指令REPE,终止串的重复操作条件是(C)
    A.CX=0且ZF=0
    B.CX=0且ZF=1
    C.CX=0或ZF=0
    D.CX=0或ZF=1

    267.下面指令中,合理而有意义的指令是(D)
    A.REP LODSB
    B.REP SCASB
    C.REP CMPSB
    D.REP MOVSB

    MOVS是串传送指令,MOVSB传送一个字节

    268.下面的数据传送指令中,错误的操作是(D)
    A.MOV SS:[BX+DI],1000H
    B.MOV DX,1000H
    C.MOV WORD PTR[BX],1000H
    D.MOV DS,2000H

    立即数不能直接送段寄存器,即段寄存器只能通过寄存器或存储单元传送数据。

    269.执行下列指令后,正确的结果是(B)
    MOV AL,100
    MOV BL,-2

    A.AL=100H,BL=02H
    B.AL=64H,BL=0FEH
    C.AL=64H,BL=82H
    D.AL=100H,BL=0FEH

    270.
    根据某一个标志位的值来决定是否转移。测试的标志位有S/Z/C/P/O五个。适用于测试某一次运算的结果并根据不同的结果做不同的处理。
    (1)JZ    ;条件ZF=1时转移。结果为零则转移。
    (2)JNZ   ;条件ZF=0时转移。结果不为零则转移。
    (3)JS   ;条件SF=1时转移。结果为负则转移。
    (4)JNS  ;条件SF=0时转移。结果为正则转移。
    (5)JO   ;条件OF=1时转移。结果为溢出则转移。
    (6)JNO   ;条件OF=0时转移。结果无溢出则转移。
    (7)JP    ;条件PF=1时转移。奇偶位为1则转移。
    (8)JNP   ;条件PF=0时转移。奇偶位为0则转移。
    (9)JC    ;条件CF=1时转移。有进位则转移。
    (10)JNC   ;条件CF=0时转移。无进位则转移。

    JZ 同JE
    JNZ 同JNE

    JMP是无条件转移。

    271.测试BL寄存器内容是否与4FH相等,若相等则转NEXT处执行,代码为(B)
    A.TEST BL,4FH
    JZ NEXT

    B.XOR BL,4FH
    JZ NEXT

    C.AND BL,4FH
    JZ NEXT

    D.OR BL,4FH
    JZ NEXT

    272.
    D1 DB 20H DUP(?)
    D2 DW D1
    用一条指令实现取D1的偏移地址放到SI  3种方法
    MOV SI,OFFSET D1
    LEA SI,D1
    MOV SI,D2

    273.PSW寄存器共有6位条件状态位,3位控制状态位。
    274.ADD/ADC/INC除INC不会影响CF外,其他都会影响CF/ZF/SF/OF

    275.SHL/SHR/SAL/SAR  对标志位的影响是一样的。

    276.注意NEG是求补,而不是求反。
    277.假定(DX)=10111001B,(CL)=3,(CF)=1,试确定下列各条指令单独执行后DX中的值。
    (1)SHR DX,1
    (2)RCR DL,1
    (3)RCL DX,CL


    DX:0000 0000 1011 1001
    移动后:
    DX:0000 0000 0101 1100
    所以:
    (DX)=005CH

    RCR:带进位循环右移指令
    操作:操作数循环右移指定次数

    RCL:带进位循环左移指令
    操作:操作数循环左移指定次数

    DX:0000 0000 1011 1001
    移动后:
    DX:0000 0000 1101 1100
    所以:
    (DX)=00DCH

    执行后:
    DX:0000 0101 1100 1000
    所以
    (DX)=05C8H

    278.
    MOV AL,25H
    SHL AL,1
    MOV BL,15H
    MUL BL
    执行后,AX的内容为?

    解:
    25H*2*15H=1554D

    全都化成十进制计算。

    279.程序:
    DATA SEGMENT
    ORG 0020H

    DA1 DW 12H,23H
    DA2 DB 11H,21H
    DA3 EQU 1234H
    DA4 EQU $-DA2
    DA5 DB 31H,32H
    DATA ENDS

    该程序段已占有的存储字节数是多少?
    DA4的值? DA5的值?
    解:
    (1)8
    (2)2   0026H

    注意:EQU定义的符号名不占存储空间。

    280.
    ORG 1221H
    NUM DW 12H

    MOV CH,TYPE NUM
    MOV AX,NUM
    MOV BX,OFFSET NUM
    MOV CL,BYTE PTR NUM+1
    HLT

    所以:
    (AX)=0012H,(BX)=1221H,(CX)=0200H

    ORG是设置该程序段的偏移地址。

    281.程序
    ADRR DB XXH,XXH,…,XXH
    NUM EQU $-ADRR
    RETT DB ?

    MOV CX,NUM
    MOV BX,-1
    DON:INC BX
    CMP ADRR[BX],0
    LOOPZ DON
    JNZ NEXT
    MOV BL,0FFH
    NEXT:MOV RETT,BL
    HLT

    功能?
    RETT的内容是什么?

    解:
    在以ADRR为起始地址的数组中,查找第一个非零数据。
    若找到则将第一个非零数据在数组中的偏移量送入RETT单元中。若无非零数据,则将0FFH送入RETT单元中。

    282.循环控制指令测试条件



    283.循环控制指令LOOPNZ/LOOPNE控制循环继续执行的条件是(B)
    A.CX≠0且ZF=1
    B.CX≠0且ZF=0
    C.CX≠0或ZF=1
    D.CX≠0或ZF=0

    284.压缩BCD码指每个字节存储两个BCD码
    非压缩BCD码指每个字节存储一个BCD码,其中低4位存储数字的BCD码,高4位为0.

    285.使计算机执行某种操作的命令是(B)
    A.伪指令
    B.指令
    C.标号
    D.助记符

    286.将数据5618H存放在存储单元中的伪指令是(B)
    A.DATA1 DW 1856H
    B.DATA1 DB 18H,56H
    C.DATA1 EQU 5618H
    D.DATA1 DB 18H,00H,56H,00H

    287.设DS=2200H,BX=1000H,SI=0100H,偏移量D=0A2B1H,计算出下列各种寻址方式的有效地址:
    (1)使用D的直接寻址:0A2B1H
    (2)使用BX的寄存器间接寻址:1000H
    (3)使用BX和D的寄存器相对寻址:0B2B1H
    (4)使用BX、SI和D的相对基址变址寻址:0B3B1H
    (5)使用BX、SI的基址变址寻址:1100H

    288.如TABLE为数据段中0100单元的符号名,其中存放的内容为0FF00H,以下两条指令有什么区别?AX寄存器的内容分别是什么?
    (1)MOV AX,TABLE
    (2)MOV AX,OFFSET TABLE

    是传送TABLE中的内容,(AX)=0FF00H
    是传送TABLE的地址,(AX)=0100H

    289.对于下面的数据定义,三条MOV指令分别汇编成什么?
    TAB1 DW 10 DUP(?)
    TAB2 DB 10 DUP(?)
    TAB3 DB ‘1234’

    MOV AX,LENGTH TAB1
    汇编成:
    MOV AX,10

     MOV BL,LENGTH TAB2
    汇编成:
    MOV BL,10

    MOV CL,LENGTH TAB3
    汇编成:
    MOV CL,1

    290.MOV CX,DATA[SI]     ;寄存器相对寻址
    注意:没有存储器间接寻址!!!也没有存储器相对寻址!!!

    立即寻址
    寄存器寻址(寄存器直接寻址)
    寄存器间接寻址
    直接寻址(存储器直接寻址)
    寄存器相对寻址
    基址变址寻址
    相对基址变址寻址

    291.无符号数比较时,用“高于”或“低于”来做判断依据。
    有符号数比较时,用“大于”或“小于”来做判断依据。

    低于  Below
    高于  Above
    大于  Greater
    小于  Less

    转移指令中,大部分指令可以用两种不同的助记符来表示。比如,一个数低于另一个数和一个数不高于也不等于另一个数是等同的。
    即JB和JNAE是等同的。

    292.比较两个无符号数的大小
    两个无符号数比较大小时,机器根据CF标志位来判断大小。若两无符号数相减,若不够减,则最高位有借位,CF=1,否则CF=0.
    所以
    当CF=1时,说明被减数低于减数;
    当CF=0且ZF=0时,说明被减数高于减数;
    当CF=0且ZF=1时,说明被减数等于减数

    293.
    无符号数比较条件转移指令表


    294.变量TABLE中存放了一个偏移地址,当无符号数X小于、等于或大于此偏移地址时,应去执行三个不同的程序段。
    MOV BX,TABLE
    MOV AX,X
    CMP AX,BX
    JA SS3
    JZ SS2
    SS1:…   ;低于程序段
    SS2:…   ;等于程序段
    SS3:…   ;高于程序段

    295.比较两个有符号数
    两个有符号数比较大小时,机器根据SF标志位来判断大小。
    无溢出时,OF=0.若被减数小于减数,差值为负,则SF=1;否则SF=0.
    溢出时,OF=1,此时SF标志位显示的正负性与应该得的正确结果值的正负性相反。SF=0表示被减数小于减数;SF=1表示被减数大于减数。
    当OF=0且SF=1或OF=1且SF=0时,即SF∨OF=1,表示被减数一定小于减数。
    当OF=0且SF=0且ZF=0或OF=1且SF=1时,(此时ZF=0),前数一定大于后数。

    有符号数比较条件转移指令


    296.试分析下面程序段的功能是什么?
    CMP AL,’A’
    JC OTHER
    CMP AL,’Z’
    JNZ OTHER
    JMP LETTER

    OTHER:…
    LETTER:…

    判断AL的内容,若为‘A’~‘Z’的大写字母时,程序段 LETTER处理,否则转OTHER处理。

    297.计算机中为便于存储及计算机的物理实现,采用(A)。
    A.二进制数     B.十进制数    C.八进制数     D.十六进制数
    298.在86系列的CPU中,访问IO设备采用(B)方式。
    A.统一地址    B.独立地址    C.混合地址     D.直接地址

    299.机器指令是在程序运行期间由计算机来执行的。
    伪指令是汇编程序对源程序进行汇编时处理的,只提供有关信息,不产生机器代码。

    300.伪指令在程序(B)阶段被处理。
    A.编写    B.汇编    C.连接    D.运行

    301.在程序的开始可以用NAME或TITLE作为模块的名字。但NAME和TITLE伪指令不是必要的。

    302.一个完整、独立的汇编语言源程序可以没有(C)伪指令。
    A.段定义    B.存储模式定义    C.程序开始   D.程序结束

    303.JMP NEAR PTR [BX]使用(A)段寄存器。
    A.CS,DS    B.DS,ES     C.ES,SS      D.DS,SS

    304.响铃符的ASCII编码为(D)
    A.0DH    B.OAH     C.20H    D.07H

    305.   0~9的ASCII值为30H~39H
    而字母A的ASCII值为41H

    306.从微处理器的角度来看,计算机结构可分为CPU、内存、和IO子系统三个主要部分。
    307.汇编语言源程序中的每个语句由4部分组成,分别是:名字、操作码助记符、操作数、和注释。
    308.指令MOV DL,1000H[SI]中,源操作数的地址是SI+1000H.
    309.汇编语言程序的最后一条指令是汇编结束伪指令。
    310.可以修改其值的定义符号常量的伪指令是等号(=)伪指令。
    311.MOV AX,@DATA 中AX的值是由操作系统在程序运行之前传过来的。
    312.     .STACK伪指令默认分配1024字节的栈空间。
    313.在8086中,一个逻辑段最长为64K字节。
    314.8086CPU加电后执行的第一条指令的物理地址为FFFF:0000  或写成 FFFF0。
    315.DB ‘AB’定义了2个字节,在内存中的16进制代码按顺序为41H,42H。
    316.将寄存器AX置零:
    MOV AX,0
    或者
    XOR AX,AX
    317.将寄存器AL的内容乘以BL的内容,结果送到BX寄存器中。
    MUL BL
    MOV BX,AX
    318.若AX为零则转向短标号LABLE
    CMP AX,0
    JZ LABEL
    或者
    OR AX,AX
    JZ LABEL

    319.将AX的一个字输出到端口3D9H
    MOV DX,3D9H
    OUT DX,AX

    320.操作系统1号功能调用(输入一个字符)
    MOV AH,01H
    INT 21H

    321.已知在内存中有一个字节单元NUM,存有带符号数据,要求计算它的绝对值后,放入RESULT单元中。
    解:
    DATA SEGMENT
    X DB,?
    DATA ENDS
    CODE SEGMENT
    ASSUME DS:DATA,CS:CODE
    START:
    MOV AX,DATA
    MOV DS,AX
    MOV AL,X
    CMP AL,0
    JGE NEXT
    NEG AL
    NEXT:
    MOV RESULT,AL
    MOV AH,4CH
    INT 21H
    CODE ENDS
    END START

    322.编写计算下面函数值的程序:
    Y=1,X>0
     =0,X=0
     =-1,X<0
    设输入数据为X,输出数据为Y,且都是字节变量。
    解:
    DATA SEGMENT
    X DB -25
    Y DB ?
    DATA ENDS
    CODE SEGMENT
    ASSUME CS:CODE,DS:DATA
    START:
    MOV AX,DATA
    MOV DS,AX
    MOV AL,X
    CMP AL,0
    JGE BIG
    MOV BL,-1
    JMP EXIT
    BIG:JE EE
    MOV BL,1
    JMP EXIT
    EE:MOV BL,0
    EXIT:MOV Y,BL
    MOV AH,4CH
    INT 21H
    CODE ENDS
    END START

    323.程序:把BX寄存器内的二进制数用十六进制数的形式在屏幕上显示。

    解:
    CODE SEGMENT
    MAIN PROC FAR
    ASSUME CS:CODE
    START:PUSH DS
    SUB AX,AX
    PUSH AX
    MOV CH,H    ;CH存放循环计数值
    LP:MOV CL,4
    ROL BX,CL
    MOV AL,BL
    AND AL,0FH
    ADD AL,30H
    CMP AL,3AH
    JL PRINTA
    ADD AL,07H
    PRINTA:MOV DL,AL
    MOV AH,2
    INT 21H
    DEC CH
    JNZ LP
    RET
    MAIN ENDP
    CODE ENDS
    END START

    324.程序:在ADDR单元中存放着数Y的地址,编一程序把Y中1的个数存入COUNT单元中。
    解:要测出Y中1的个数,就应逐位测试。可以根据最高有效位是否为1来计数,然后用移位的方法把各位数逐次移到最高位去。

    TITLE 数1程序
    DATA SEGMENT
    ADDR DW NUMBER
    NUMBER DW Y
    COUNT DW ?
    DATA ENDS
    CODE SEGMENT
    MAIN PROC FAR
    ASSUME CS:CODE,DS:DATA
    START:PUSH DS
    SUB AX,AX
    PUSH AX
    MOV AX,DATA
    MOV DS,AX
    MOV CX,0
    MOV BX,ADDR
    MOV AX,[BX]
    REPEAT:CMP AX,0
    JZ EXIT
    JNS SHIFT
    INC CX
    SHIFT:SHL AX,1
    JMP REPEAT:REPEAT
    EXIT:MOV COUNT,CX
    RET
    MAIN ENDP
    CODE ENDS
    END START

    325.JS   SF=1    ;结果为负则转移
       JNS  SF=0    ;结果为正则转移

    326.冒泡排序

    解:
    DATA SEGMENT
    A DW N DUP(?)
    DATA ENDS
    PROGRAM SEGMENT
    MAIN PROC FAR
    ASSUME CS:PROGRAM,DS:DATA
    START:PUSH DS
    SUB AX,AX
    PUSH AX
    MOV AX,DATA
    MOV DS,AX
    MOV CX,N
    DEC CX
    LOOP1:MOV DI,CX
    MOV BX,0
    LOOP2:MOV AX,A[BX]
    CMP AX,A[BX+2]
    JGE CONTINUE
    XCHG AX,A[BX+2]
    MOV A[BX],AX
    CONTINUE:ADD BX,2
    LOOP LOOP2
    MOV CX,DI
    LOOP LOOP1
    RET
    MAIN ENDP
    PROGRAM ENDS
    END START

    327.偏移量=偏移地址=有效地址=段内地址
    328.程序:在数组中有50个单字节有符号数,分别统计0,负数,正数个数。

    解:
    DATA SEGMENT
    X DB 50 DUP(?)
    N0 DB 0
    N1 DB 0
    N2 DB 0
    DATA ENDS
    CODE SEGMENT
    ASSUME CS:CODE,DS:DATA
    START:MOV AX,DATA
    MOV DS,AX
    MOV CX,50
    MOV SI,0
    PO:CMP X[SI],0
    JNZ P1
    INC N0
    JMP P5
    P1:JL P3
    INC N2
    JMP P5
    P3:INC N1
    P5:INC SI
    DEC CX
    JNZ P0
    MOV AH,4CH
    INT 21H
    CODE ENDS
    END START



    注意:
    DEC CX
    JNZ P0
    等价于
    LOOP P0

    329.过程定义伪指令
    可把具有独立功能的程序段定义为过程,供其他程序调用。

    <过程名> PROC NEAR/FAR

    RET
    <过程名> ENDP

    调用:
    CALL [NEAR/FAR PTR] 子程序名

    330.标志设置指令




    331.字长为n
    (1)无符号数范围:
    (2)有符号数范围:
    补码:
    原码、反码:

    332.BCD都是无符号数。
    333.  17D
    (1)压缩BCD码:0001 0111B     17H
    (2)非压缩BCD码:0000 0001 0000 0111B    0107H

    334.   235D
    (1)压缩BCD码:0010 0011 0101B    235H
    (2)非压缩BCD码:。。。。。。。。。    020305H

    335.    14个寄存器
    (1)通用寄存器:
    AX,BX,CX,DX
    变址:SI,DI,BP,SP

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

    控制寄存器:
    IP
    FLAG(PSW)

    336.H计算机刚一启动时,物理地址是多少?
    CS:FFFF   其他寄存器全为0
    物理地址=(CS)*10H+(IP)=FFFF0H

    337.代码段:(CS)*10H+IP
    数据段:(DS)*10H+EA
    堆栈段:(SS)*10H+SP

    338.复习端口号指令:  IN  OUT

    IN AL,78H   ;78H是地址,是把78H端口的内容送AL
    IN AL,DX    ;DX是地址,用DX去找外设的地址,然后取出内容送AL

    339.实模式就是一般模式,就是我们常用的模式。
    340.宏定义:

    宏名 MACRO 形参

    宏名 ENDM

    调用:
    宏名 实参

    341.8086微处理器由哪几部分组成?
    EU   BIU
    342.80X86中,存储器为什么采用分段管理?
    (1)内部16位,外部20位,所以要把20位地址分为不超过16位的段,便于访问。
    (2)便于模块化编程。

    343.IN输入指令
    格式:IN AL,IO地址表达式
      或  IN AX,IO地址表达式

    操作:
    AL(IO地址表达式)

    AL(IO地址表达式+1),(IO地址表达式)

    功能:完成IO端口对累加器的数据输入。

    344.OUT输出指令
    格式:OUT IO地址表达式,AL

    OUT IO地址表达式,AX

    操作:(IO地址表达式)AL

    (IO地址表达式+1),(IO地址表达式)AL

    功能:完成累加器对IO端口的数据输出。

    345.AND AL,    
    TEST AL,     
    对标志位的影响一样,AND最后结果送AL,TEST最后结果不送AL。

    类比:
    SUB AX,     
    CMP AX,     


    346.空格的ASCII码是:20H
    347.显示字符代码:
    MOV DL,’字符’
    MOV AH,02H
    INT 21H

    348.输入字符代码:
    MOV AH,01H
    INT 21H
    等待用户输入

    349.试编制一程序:从键盘输入一行字符,要求第一个键入的字符必须是空格符,如不是,则退出程序;如是,则开始接收键入的字符并顺序存放在首地址为BUFFER的缓冲区中(空格符不存放),直到接收到第二个空格符时退出程序。
    分析:这一程序要求接收的字符从空格符开始又以空格符结束,因此程序中必须区分所接收的字符是否是第一个字符。所以,设立作为标志的存储单元FLAG。一开始将其置为0,接收第一个字符后可将其置1.

    解:
    DATA SEGMENT
    BUFFER DB 80 DUP(?)
    FLAG DB ?
    DATA ENDS
    CODES SEGMENT
    MAIN PROC FAR
    ASSUME CS:CODES,DS:DATA1
    START:PUSH DS
    SUB AX,AX
    PUSH AX
    MOV AX,DATA1
    MOV DS,AX
    LEA BX,BUFFER
    MOV FLAG,0
    NEXT:MOV AH,01H
    INT 21H
    TEST FLAG,01H
    JNZ FOLLOW
    CMP AL,20H
    JNZ EXIT
    MOV FLAG,1
    JMP NEXT
    FOLLOW:CMP AL,20H
    JZ EXIT
    MOV [BX],AL
    INC BX
    JMP NEXT
    EXIT:RET
    MAIN ENDP
    CODES ENDS
    END START

    350.NEAR调用改变IP,不改变CS;
    FAR调用改变IP,改变CS;

    351.调用程序和子程序在同一代码段中
    SEGX SEGMENT

    MAIN PROC FAR   ;主程序

    CALL SUBR1       ;子程序调用

    RET
    MAIN ENDP

    SUBR1 PROC NEAR   ;子程序定义

    RET
    SUBR1 ENDP

    SEGX ENDS

    352.调用程序和子程序不在同一个代码段中
    SEGX SEGMENT

    SUBT PROC FAR    ;子程序定义

    RET
    SUBT ENDP

    CALL SUBT    ;子程序调用(同一个段中调用)
    SEGX ENDS

    SEGY SEGMENT

    CALL SUBT    ;子程序调用(不同段中调用)

    SEGY ENDS

    353.普通子程序
    CODE SEGMENT
    ASSUME CS:CODE
    START:

    CALL 子程序1

    MOV AH,4CH
    INT 21H

    子程序1  PROC NEAR

    RET
    子程序1  ENDP
    CODE ENDS
    END START

    354.子程序作主程序
    CODE SEGMENT
    ASSUME CS:CODE
    MAIN PROC FAR
    START:PUSH DS
    XOR AX,AX
    PUSH AX
    CALL 子程序1

    RET
    MAIN ENDP

    子程序1  PROC NEAR

    RET
    子程序1  ENDP

    355.状态标志位

    0011 1101
    +1101 1011
     0001 1000


    356.各种DEBUG命令
    A命令——汇编
    G命令——执行
    T命令——跟踪执行
    U命令——反汇编
    D命令——显示内存
    E命令——将内容写入内存
    R命令——修改寄存器

    357.寻址方式
    (1)立即寻址:MOV AX,7896H
    (2)寄存器寻址:MOV AX,BX
    (3)存储器直接寻址:MOV AX,[3792H]
    (4)寄存器间接:MOV AX,[BX]

    358.不考:
    (1)串操作指令
    (2)BCD调整失灵·指令
    (3)折半查找

    359.  P73 中断  要保护PSW
    360.
    ORG 200H
    X DB 78H,96H,’ABCD’,2 DUP(?)
    Y DW 78H,’AB’,X+5,$



    361.
    选择 2’*10
    填空 1’*20
    读程序 5’*6
    判断 1’*5
    编程 25’
    必考冒泡排序

    362.RET返回指令
    (1)段内返回
    操作:
    IP((SP)+1,(SP))
    SP(SP)+2

    (2)段间返回
    操作:
    IP((SP)+1,(SP))
    SP(SP)+2
    CS((SP+1),(SP))
    SP(SP)+2

    363.
    MOV AX,1234H      立即寻址
    MOV AX,BX          寄存器直接寻址
    MOV AX,[BX]       寄存器间接寻址
    MOV AX,TABLE     TABLE是一个变量名,存储器直接寻址
    MOV AX,[1234H]    存储器直接寻址
    MOV AX,[BX+1234H]   寄存器相对寻址
    MOV AX,[BP][SI]     基址变址寻址
    MOV AX,[BX+SI-1234H]    相对基址变址寻址

    364.求AL中的内容
    ABC EQU 2
    DATA1 DB 20H
    DATA2 DW 1000H

    START:MOV AL,DATA1+ABC


    所以:(AL)=10H
    365.MOV CS,AX     ;错误
    因为:
    不能直接向段寄存器传送数据;
    CS的值不能由人为修改;

    366.在8086/8088微处理器中,PUSH和POP指令在堆栈与寄存器或存储单元之间传送数据时,一次总是传送2个字节。
    367.INC [BX]    ;错误
    因为:[BX]所指单元中的内容类型不确定,不知道是字节类型还是字类型,不同类型自加的大小不一样。字节类型自加1,字类型自加2

    368.ENDS
    ENDP
    ENDM
    369.做P106   4.3
    P107   4.12

    370.子程序作主程序,必须用FAR
    371.如何进行宏展开
    INOUT MACRO X,Y     ;X,Y是形参
    MOV AH,X
    LEA DX,Y
    INT 21H
    ENDM

    程序中遇到:
    INPUT 9,INPUT    ;9,INPUT是实参

    则展开为
    + MOV AH,9
    + LEA DX,INPUT
    + INT 21H

    372.期中考试2个编程。
    373.XLAT换码指令
    格式:XLAT

    XLAT 地址标号
    操作:(AL)((BX)+(AL))
    说明:(1)XLAT指令是将AL的内容替换成存储单元中的一个数,往往用于代码转换,例如把字符的扫描码转换成ASCII码或者把十六进制数0~F转换成七段数码管显示代码。
    使用该指令前,先在数据段建立一个表格,表格首地址存入BX寄存器中,欲取代码的表内位移量存入AL寄存器。

    374.(期中)
    -64D的补码是C0H。

    375.(期中)
    执行CALL指令,寄存器IP的内容一定改变。

    376.下列指令中哪条是正确的(D)
    A.MOV DS,0200H       B.MOV AX,[SI][DI]
    C.MOV BP,AX          D.MOV BYTE PTR [BX],1000

    A错:立即数不能直接送段寄存器,即段寄存器只能通过寄存器或存储单元传送。
    B错:源操作数都是变址寄存器。
    C错:普通寄存器不能向变址寄存器传数据。

    377.使8086/88的标志寄存器F中的中断标志I置为关中断的命令是CLI。
    378.指令LOOPZ标号转移到标号(循环)的条件是 CX!=0且ZF=1.
    379.SUB AX,[BX]目的操作数的寻址方式是寄存器直接寻址,源操作数采用的寻址方式是寄存器间接寻址。
    380.   8086CPU内部按功能分为两大部分即EU和BIU。
    381.   8088微处理器段内直接寻址64KB字节空间。若寻址1MB字节空间必须通过段寄存器管理实现。
    382.设(SS)=2000H,(SP)=0486H,若在堆栈中取出3个数据,则栈顶的物理地址为2048CH。如果又在堆栈中存入3个数据,则栈顶的物理地址是20486H。

    注意:堆栈中数据的压入弹出必须以字节为单位,所以PUSH和POP指令只能作字操作。

    383.中断系统的中断矢量表用来存放中断类型号,共预留了1KB个字节空间。
    384.A、B两数相等的条件可以用FR中的ZF标志位为1来判断。
    385.15D的原码是00001111,反码是00001111,补码是00001111,压缩BCD码是15H。
    386.MOV AX,9876H
    MOV DL,0
    MOV CX,16
    AGAIN:SHL AX,1
    JNC NEXT
    INC DL
    NEXT:LOOP AGAIN
    MOV SUM,DL
    程序的功能是:数AX中1的个数。
    SUM的值是:8

    387.已知AL=3,分析下列程序段:
    SHL AL,1
    MOV BL,AL
    SHL AL,1
    SHL AL,1
    ADD AL,BL
    SHL AL,1
    程序完成的功能是AL扩大20倍,执行后结果是AL=60.

    388.画图说明下列语句所分配的存储空间及初始化的数据值。
    (1)BYTE_VAR DB ‘BYTE’,12,-12H,3 DUP(0,?,2 DUP(1,2),?)
    (2)WORD_VAR DW 5 DUP(0,1,2),?,-5,’BY’,’TE’,256H

    389.
    DATA_BYTE DB 10,4,10H
    DATA_WORD DW 100,100H,-5
    DATA_DW DD 3C,0FFFDH



    390.



    391.操作数?可以保留存储空间,但不存入数据。得到程序运行时存放中间或最终结果。
    ABC DB 0,?,?,0
    DEF DW ?,52,?



    392.ARRAY1 DB 2 DUP(0,1,2,?)
    ARRAY2 DB 100 DUP(?)



    393.ARRAY3 DB 100 DUP(0,2 DUP(1,2),0,3)



    394.根据伪指令代码写内存情况是难点和必考点。应该再次复习。尤其搞懂关于字符串的存放问题,DB和DW是不一样的,应再次学习。

    395.BP、SP可称为指针寄存器
    SI、DI可称为变址寄存器

    396.一般在作双字长运算时把DX和AX组合在一起存放一个双字长数,DX用来存放高位字。

    397.        

    第7位                                                                第0位

    398.段寄存器也是一种专用寄存器,专用于存储器寻址,用来直接或间接的存放地址。段寄存器的长度为16位。
    注:SP/BP/SI/DI也是16位。

    399.在存储器里以字节为单位存储信息。
    400.为了正确的存放或取得信息,每一个字节单元给出一个唯一的存储器地址,称为物理地址。地址从0开始编号,顺序的每次加1,因此存储器的物理地址空间是线性增长的,在机器里,地址是用二进制表示的,是无符号整数,书写格式使用十六进制数形式。
    401.地址编号的范围用十六进制数表示为0000H~FFFFH。
    402.存储器特性:内容是可以反复读取的,只有当存入新的信息后,原来的内容就自动被覆盖了。
    403.8080/8088只能在实模式下工作,只需了解实模式。
    404.80X86存储器在实模式下允许的最大寻址空间为1MB,因为地址总线宽度为20位。
    405.每个段的大小可达64KB,因为地址寄存器是16位的,这样段内地址可用16位表示。
    406.在1MB的存储器里,每一个存储单元都有一个唯一的20位地址,称为该存储单元的物理地址。
    407.CS存放当前正在运行的程序;
    DS存放当前运行程序的数据;
    SS定义了堆栈所在区域;
    ES是附加数据段;

    408.段寄存器和偏移地址的默认组合


    409.寻址方式分为:数据寻址和指令寻址
    410.如果指令中指定的寄存器是BX/SI/DI,则操作数默认在DS中,如果指定的寄存器是BP,则操作数默认在SS中。
    411.立即数不能直接送段寄存器,即段寄存器只能通过寄存器或存储单元传送数据。
    412.两个段寄存器之间不能直接传送数据。
    413.PUSH:
    (SP)(SP)-2
    ((SP)+1,(SP))(SRC)     //理解
    414.POP:
    (DST)((SP)+1,(SP))
    (SP)(SP)+2

    415.XCHG指令
    (1)源、目的操作数的寻址方式不允许是立即寻址方式;
    (2)两个寻址方式中,必须有一个是寄存器寻址,两个存储单元之间不能直接互换数据;

    416.NEG指令
    0-操作数=-操作数。在微型计算机中,带符号的二进制数都采用补码表示。所以此处的操作数是补码,所以求 –操作数 就是求补操作。

    417.将(AX)乘以10
    分析:十进制数10的二进制形式为1010,即权为2和权为8的位为1,故采用2*(AX)+8*(AX),结果为10*(AX)

    SHL AX,1
    MOV BX,AX
    SHL AX,1
    SHL AX,1
    ADD AX,BX

    418.

    419.有符号数比较大小:机器根据SF标志位来判断大小,即若被减数小于减数,差值为负,则SF=1;否则SF=0;前提是无溢出 OF=0.

    420.语句格式:
    [标号:] 助记符 [操作数] [;注释]
    即汇编语句由4部分组成:标号,助记符,操作数,注释

    421.名字的定义规则:
    (1)数字不能作为名字的第一个符号;
    (2)单独的问号(?)不能作为名字;
    (3)一个名字的最大有效长度为31,超过31的部分计算机不再识别;
    (4)特定含义的保留字,操作码,寄存器名,不能作为名字;

    422.汇编字符串用单引号,如:‘ABC’
    423.逻辑运算符和逻辑运算指令是有区别的。
    逻辑运算符的功能在汇编阶段完成,逻辑运算指令的功能在执行时完成。
    424.
    AND AL,78H AND 0FH
    汇编后,等价于:
    AND AL,08H

    第一个AND是逻辑运算指令,第二个AND是逻辑运算符

    425.在汇编阶段处理:伪指令、宏指令、运算符
    426.为什么说程序开始伪指令是可以省略的?
    答:因为程序开始是用NAME或TITLE作为模块的名字,并不是必须的。
    而结束伪指令 END则是必须的。
    427.对于下面的数据定义,各条MOV指令单独执行后,有关寄存器的内容是什么?
    FLDB DB ?
    TABLEA DW 20 DUP(?)
    TABLEB DB ‘ABCD’

    MOV AX,TYPE FLDB
    MOV AX,TYPE TABLEA
    MOV CX,LENGTH TABLEA
    MOV DX,SIZE TABLEA
    MOV CX,LENGTH TABLEB

    428.某系列微机对存储器分段,如果每一个段最多的字存储单元(16位二进制)是32K,那么表示段内字节单元偏移地址的二进制位数应是(B)
    A.20位        B.16位           C.15位           D.12位

    429.
    ORG 0030H
    DA1 DB 0,’0’,30H
    DW DA1
    数据为3000H字存储单元的偏移地址是(A)
    A.0030H     B.0031H     C.0032H        D.0033H

    430.NUM1 DB (12 OR 6 AND 2) GE 0EH
    NUM2 DB (12 XOR 6 AND 2) LE OEH
    上述数据定义中,NUM1和NUM2字节单元的内容分别是(B)
    NUM1=0,NUM2=0
    NUM1=0,NUM2=0FFH
    NUM1=0FFH , NUM2=0
    NUM1=0FFH , NUM2=0FFH

    431.MOV指令中目的操作数不能为立即数和CS。
    432.R命令:显示寄存器的内容,然后修改其值。
    433.8086/8088 CPU可访问2个独立的地址空间,一个为存储器地址空间,大小为1MB个字节;另一个为IO端口,大小为64KB字节。

    434.执行下列指令后,AX寄存器中的内容是什么?
    START DW 10H,20H,30H,40H,50H
    EE1 DW 3

    MOV BX,OFFSET START
    ADD BX,EE1
    MOV AX,[BX]


    解:(AX)=3000H

    435.指令的操作数中,允许出现表达式,例如BUF1与BUF2均为变量名,下面指令中语法正确的是(D)
    A.MOV AX,BUF1*BUF2
    B.MOV AX,BUF1/BUF2
    C.MOV AX,BUF1+ES:BUF2
    D.MOV AX,BUF2-BUF1

    436.在8086/8088的立即数寻址方式中,对寄存器的使用下列说法正确的是(D)
    A.使用AX,BX,CX,DX
    B.使用SI,DI,BP,SP
    C.使用任一个通用寄存器
    D.不使用任何寄存器

    437.在DEBUG中,为查看或修改内存单元的内容,使用的命令是(A)
    A.  D或E     B.   D或R      C.   R或E     D.    D或U

    E命令:将内容写入内存
    R命令:显示寄存器的内容,然后修改其值

    438.对CS段寄存器赋段地址的方法是(B)
    A.MOV AX,CODE
    MOV CS,AX

    B.ASSUME CS:CODE

    C.END起始地址

    D.MOV CS,2050H

    439.设SP=4AH,执行段内返回指令RET 4后,SP的值是(A)
    A.50H        B.48H       C.4CH             D.44H

    解:
    (1)段内带立即数返回
    格式:RET 表达式
    执行的操作:
    IP((SP+1),(SP))
    SP(SP)+2
    SP(SP)+16位表达式的值

    (2)段间带立即数返回
    格式:RET 表达式
    执行的操作:
    IP((SP)+1,(SP))
    SP(SP)+2
    CS((SP)+1,(SP))
    SP(SP)+2
    SP(SP)+16位表达式的值

    440.8086CPU中,一个段最大可定义的字节数是(C)
    A.61K      B.32K      C.64K      D.1M

    441.软中断指令INT 21H执行,若AH=9时则完成的功能是显示字符串。
    442.8086存储器地址分段时,每个段起始地址的特征是段首地址能被16整除。

    443.JMP NEAR LAB   ;错误
    改成:
    JMP NEAR PTR LAB

    444.编写指令将附加段中的一个字节变量COUNT送给AL寄存器。

    MOV BX,OFFSET COUNT
    MOV AL,ES:[BX]

    445.CMP [SI][DI]     ;错误 ,源、目的操作数不能同时为变量

    446.最后移位指令吐血总结:
    (1)SAL/SHL:作用一样,最低位补0;
    (2)SAR:算术右移,最高位补原先的那个最高位的数值;
         SHR:逻辑右移,最高位补0;
    ROL:循环左移,依次移到最低位
    ROR: 循环右移,依次移到最高位

    RCL:带进位的循环左移,每一位先加上CF的值,然后循环左移到最低位,原来的CF移到最低位;
    RCR:带进位的循环右移,每一位先加上CF的值,然后依次右移到最高位,原来的CF移到最高位;


    github主页:https://github.com/chenyufeng1991  。欢迎大家访问!

    展开全文
  • 关于数据库的基本概念性问题

    千次阅读 2011-05-13 16:22:00
    关于数据库的基本概念性问题
    关于数据库的基本概念性问题
    2009-06-22 13:27
    文件系统阶段的数据管理有些什么缺陷?试举例说明。
    :文件系统有三个缺陷:
     (1)数据冗余性(redundancy)。由于文件之间缺乏联系,造成每个应用程序都有对应的文件,有可能同样的数据在多个文件中重复存储。
     (2)数据不一致性(inconsistency)。这往往是由数据冗余造成的,在进行更新操作时,稍不谨慎,就可能使同样的数据在不同的文件中不一样。
     (3)数据联系弱(poor data relationship)。这是由文件之间相互独立,缺乏联系造成的。

    2 数据库阶段的数据管理有些什么特点?
    答:有五方面的特征:
     (1)采用复杂的数据模型表示数据结构。
     (2)有较高的数据独立性。
     (3)数据库系统为用户提供方便的用户接口。
     (4)系统提供四个方面的数据控制功能:数据库的恢复、并发控制、数据完整性、数据安全性,以保证数据库中数据是安全的、正确的、可靠的。
     (5)对数据的操作不一定以记录为单位,也可以以数据项为单位,增加了系统的灵活性。

    3 你怎样理解实体、属性、记录、字段这些概念的类型和值的差别?试举例说明。
    答:实体(entity):是指客观存在可以相互区别的事物。实体可以是具体的对象,如:一个男学生,一辆汽车等;也可以是抽象的事件,如:一次借书、一声场球赛等。
      属性(attribute):实体有很多特性,每一个特性称为属性。每个属性有一个值域,其类型可以是整数型、实数型、字符串型。如:学生(实体)有学号、姓名、年龄、性别等属性,相应值域为字符、字符串、整数和字符串型。
      字段(field):标记实体属性的命名单位称为字段或数据项。它是可以命名的最小信息单位,所以又称为数据元素或初等项。字段的命名往往和属性相同,如:学生有学号、姓名、年龄、性别等字段。
      记录(record):字段的有序集合称为记录。一般用一个记录描述一个实体,所以记录又可以定义为能完整地描述一个实体的字段集。如:一个学生记录,由有序的字段集(学号、姓名、年龄、性别等)组成。

    4 逻辑记录与物理记录,逻辑文件与物理文件有些什么联系和区别?
    答:数据描述有两形式:物理描述和逻辑描述。
      物理数据描述是指数据在存储设备上的存储方式,物理数据是实际存放在存储设备上的数据。
      物理记录、物理文件(还有物理联系、物理结构等术语),都是用来描述存储数据的细节。
      逻辑数据描述是指程序员或用户用以操作的数据形式,是抽象的概念化数据。
      逻辑记录、逻辑文件(还有逻辑联系、逻辑结构等术语),都是用户观点的数据描述。

    5 为某百货公司设计一个ER模型。
      百货管辖若干个连锁商店,每家商店经营若干商品,每家商店有若干职工,但每个职工只能服务于一家商店。
      实体类型“商店”的属性有:商店编号,店号,店址,店经理。实体类型“商品”的属性有:商品编号,商品名,单价,产地。实体类型“职工”的属性有:职工编号,职工名,性别,工资。在联系中应反映出职工参加某商店工作的开始时间,商店销售商品的有销售量。
      试画出反映商店、商品、职工实体类型及联系类型的ER图,并将其转换成关系模式集。
    答:实体:商店(商店编号,店号,店址,店经理)
         商品(商品编号,商品名,单价,产地)
         职工(职工编号,职工名,性别,工资)
      联系:P1-商店销售商品的有销售量间
         P2-职工参加某商店工作的开始时
      ER图:
      关系模式集:商店模式(商店编号,店号,店址,店经理)
            商品模式(商品编号,商品名,单价,产地)
            职工模式(职工编号,职工名,性别,工资)
            P1模式(商店编号,商品编号,月销售量)
            P2模式(商店编号,职工编号,开始时间)

    6 试述ER模型、层次模型、网状模型、关系模型和面向对象模型的主要特点。
    答:ER模型的主要特点:(1)接近于人的思维,容易理解;(2)与计算机无关,用户容易接受。
      层次模型的特点:记录之间的联系通过指针实现,查询效率较高。
      网状模型的特点:记录之间联系通过指针实现,M:N联系也容易实现(每个M:N联系可拆成两个1:N联系),查询效率较高。
      关系模型的特点:用关鍵码而不是用指针导航数据,表格简单,用户易懂,编程时并不涉及存储结构、访问技术等细节。

    7 试述概念模式在数据库结构中的重要地位。
    答:概念模式(定义)是数据库中全部数据的整体逻辑结构的描述。它由若干个概念记录类型组成。概念模式不仅要描述概念记录类型,还要描述记录间的联系、操作、数据的完整性、安全性等要求。
      数据按外模式的描述提供给用户,按内模式的描述存储在磁盘中,而概念模式提供了连接这两级的相对稳定的中间观点,并使得两级的任何一级的改变都不受另一级的牵制。

    8 数据独立性与数据联系这两个概念有什么区别?
    答:数据独立性是指应用程序与数据之间相互独立,不受影响。
      数据联系是指同一记录内部各字段间的联系,以及记录之间的联系。

    9 试述DBMS在用户访问数据库过程中所起的作用。
    答:DBMS把用户对数据库进行的操作从应用程序带到外部级、概念级、再导向内部级,进而操作存储器中的数据。

    10 试述DBMS的主要功能。
    答:DBMS的主要功能有:
        (1)数据库的定义功能
        (2)数据库的操纵功能
        (3)数据库的保护功能
        (4)数据库的存储管理
        (5)数据库的维护功能
        (6)数据字典

    11 试叙DBMS对数据库的保护功能。
    答:DBMS对数据库的保护主要通过四个方面实现:
        (1)数据库的恢复。
        (2)数据库的并发控制。
        (3)数据库的完整性控制。
        (4)数据库的安全性控制。

    12 试叙DBMS对数据库的维护功能。
    答:DBMS中主要有四个实用程序提供给数据库管理员运行数据库系统时使用,起着数据库维护的功能:
        (1)数据装载程序(loading)
        (2)备份程序(backup)
        (3)文件重组织程序
        (4)性能监控程序

    13 从模块结构看,DBMS由哪些部分组成?
    答:从模块结构看,DBMS由两大部分组成:查询处理器和存储管理器
      (1)查询处理器有四个主要成分:DDL编译器,DML编译器,嵌入型DML的预编译器,查询运行核心程序
      (2)存储管理器有四个主要成分:授权和完整性管理器,事务管理器,文件管理器,缓冲区管理器

    14 DBS由哪几个部分组成?
    答:DBS由四部分组成:数据库、硬件、软件、数据库管理员。

    15 什么样的人是DBA?DBA应具有什么素质?DBA的职责是什么?
    答:DBA是控制数据整体结构的人,负责DBS的正常运行。DBA可以是一个人,在大型系统中也可以是由几个人组成的小组。
      DBA应具有下列素质:
          (1)熟悉企业全部数据的性质和用途;
          (2)对用户的需求有充分的了解;
          (3)对系统的性能非常熟悉。
      DBA的主要职责有五点:
          (1)概念模式定义
          (2)内模式定义
          (3)根据要求修改数据库的概念模式和内模式
          (4)对数据库访问的授权
          (5)完整性约束的说明

    16 试对DBS的全局结构作详细解释。
    答:略  

    17 使用DBS的用户有哪几类?   
    答:使用DBS的用户有四类:
        1)DBA
        2)专业用户
        3)应用程序员
        4)最终用户

    18 DBMS的查询处理器有哪些功能?
    答:DBMS的查询处理器可分成四个成分:
        1)DML编译器
        2)嵌入型DML的预编译器
        3)DDL编译器
        4)查询运行核心程序

    19 DBMS的存储处理器有哪些功能?
    答:DBMS的存储处理器提供了应用程序访问数据库中数据的界面,可分成四个成分:
        1)授权和完整性管理器
        2)事务管理器
        3)文件管理器
        4)缓冲区管理器

    20 磁盘存储器中有哪四类主要的数据结构?
    答:数据文件、数据字典、索引文件、统计数据组织

    21 为什么关系中的元组没有先后顺序?
    答:因为关系是一个集合,因此不考虑元组间的顺序,即没有行序。

    22 为什么关系中不允许有重复元组?
    答:如果关系中有重复元组,那么就无法用键来标识唯一的元组。因此在关系模型中对关系作了限制。

    23 关系与普通的表格、文件有什么区别?
    答:总而言之,关系是一种规范化了的二维表格,在关系模型中,对关系作了下列规范性限制:
       1)关系中每一个属性值都是不可分解的。
       2)关系中不允许出现相同的元组(没有重复元组)。
       3)由于关系是一个集合,因此不考虑元组间的顺序,即没有行序。
       4)元组中,属性在理论上也是无序的,但在使用时按习惯考虑列的顺序。

    24 笛卡尔积、等值联接、自然联接三者之间有什么区别?
    答:笛卡尔积对两个关系R和S进行操作,产生的关系中元组个数为两个关系中元组个数之积。等值联接则是在笛卡尔积的结果上再进行选择操作,挑选关系第 i个分量与第(r+j)个分量值相等的元组;自然连接则是在等值联接(以公共属性值相等为条件)的基础上再行投影操作,去掉S中的公共属性列,当两个关系没有公共属性时,自然连接就转化我笛卡尔积。

    25 如果R是二元关系,那么下列元组表达式的结果是什么?
       {t|( u)(R(t)∧R(u)∧t[1]≠u[1]∨t[2]≠u[2]))}
    解:这个表达式的结果是原关系R。

    26 假设R和S分别是三元和二元关系,试把表达式π1,52=4∨3=4 (R×S))转换成等价的:(1)汉语查询句子;(2)元组表达式;(3)域表达式。
    解:
    (1)汉语表达式:选择R×S关系中元组第2分量或第3分量与第4分量值相等的元组并取第1列与第5列组成的新关系。
    (2)元组表达式:{t|( u)( v)(R(u)∧S(v)∧(u[2]=v[1]∨u[3]=v[1])∧t[1]=u[1]∧t[2]=v[2])}
    (3)域表达式:{xv|( y)( z)( u)(R(xyz)∧S( uv)∧(y=u∨z=u))}

    27 假设R和S都是二元关系,试把元组表达式{t|R(t)∧( u)(S(u)∧u[1]≠t[2])}转换成等价的:(1)汉语查询句子;(2)域表达式:(3)关系代数表达式。
    解:
    (1)汉语表达式:选择R关系中元组第2分量值不等于S关系中某元组第1分量值的元组。
    (2)域表达式:{ xy|( u)( v)(S(uv)∧(u≠y))}
    (3)关系代数表达式:π1,2(σ2≠3(R×S))

    28 试把域表达式{ab|R(ab)∧R(ba)}转换成等价的:(1)汉语查询句子;(2)关系代数表达式;(3)元组表达式。
    解:(1)汉语查询句子:选择R中元组第1分量值与第2分量值互换后仍存在于R中的元组。
    (2)关系代数表达式:π1,2(σ1=4∧2=3(R×R));
    (3)元组表达式:{t|( u)(R(t)∧R(u)∧t[1]=u[2]∧t[2]=u[1])}

    29 设有两个关系R(A,B,C)和S(D,E,F),试把下列关系代数表达式转换成等价的元组表达式:(1)πA (R);(2)σB ='17' (R);(3)R×S;(4)πA,FC =D (R×S))
    解:(1){t|( u)(R(t)∧R(u)∧t[1]=u[1])}
    (2){ t|R(t)∧t[2]='17')}
    (3){t|( u)( v)(R(u)∧S(v)∧t[1]=u[1]∧t[2]=u[2]∧t[3]=u[3]∧t[4]=v[1]∧t[5]=v[2]∧t[6]=v[3])}
    (4){t|( u)( v)((R(u)∧S(v)∧u[3]=v[4]∧t[1]∧u[1]∧t[2]=v[3])}

    30 在教学数据库S、SC、C中,用户有一查询语句:检索女同学选修课程的课程名和任课教师名。(1)试写出该查询的关系代数表达式;(2)试写出查询优化的关系代数表达式。
    解:(1) πCNAME,TEACHER(σSEX='女'(S|X|SC|X|C))
    (2)优化为: πCNAME,TEACHER(πCNAME,TEACHER(C)|X|(πS#,C#(SC)|X|πS#(σSEX='女'(S))))

    31 为什么要对关系代数表达式进行优化?
    答:对关系代数表达式进行优化的主要是为了提高系统的操作效率,达到执行过程即省时间又省空间的目的。

    32 对于教学数据库的三个基本表
    学生 S(S#,SNAME,AGE,SEX)
       学习 SC(S#,C#,GRADE)
       课程 C(C#,CNAME,TEACHER)
       试用SQL的查询语句表达下列查询:
    (1)检索LIU老师所授课程的课程号和课程名。
        SELECT C#,CNAME
        FROM C
        WHERE TEACHER=‘LIU’
    (2)检索年龄大于23岁的男学生的学号和姓名。
        SELECT S#,SNAME
    FROM S
    WHERE (AGE>23) AND (SEX=‘M’)
    (3)检索至少选修LIU老师所授课程中一门课程的女学生姓名。
        SELECT
    SNAME
        FROM S
        WHERE SEX=‘F’ AND S# IN
         (SELECT S#   
      FROM SC
          WHERE C# IN
          (SELECT C#
           FROM C
          WHERE TEACHER=‘LIU’)
      (4)检索WANG同学不学的课程的课程号。
        SELECT C#
        FROM C
        WHERE C# NOT IN
         (SELECT C#
          FROM SC
         WHERE S# IN
          (SELECT S#
          FROM S
          WHERE SNAME='WANG'))
      (5)检索至少选修两门课程的学生学号。
        SELECT S#
        FROM SC
        HAVING COUNT(C#)>=2
      (6)检索全部学生都选修的课程的课程号与课程名。
        SELECT C#,CNAME
    FROM C
        WHERE NOT EXISTS
         (SELECT *
          FROM S
     WHERE NOT EXISTS
          (SELECT *
           FROM SC
           WHERE SC.S#=S.S# AND SC.C#=C.C#))
      (7)检索选修课程包含LIU老师所授课的学生学号。
        SELECT S#
        FROM S
        WHERE S# IN
         (SELECT S#
         FROM SC
         WHERE
    S.S#=SC.S# AND C# IN
          (SELECT C#
           FROM C
           WHERE TEACHER='LIU'))
       请讨论一下,本题是否可如此:SELECT DISTINGCT
    S# FROM SC WHERE EXISTS (SELECT C# FROM C WHERE TEACHER='LIU'))

    32 设有两个基本表R(A,B,C)和S(D,E,F),试用SQL查询语句表达下列关系代数表达式:
      
    (1)π A (R)  (2)σ B='17' (R)   (3)R×S  (4))π A,F C=D (R×S)
        (1)SELECT A FROM R
        (2)SELECT * FROM R WHERE B='17'
        (3)SELECT A,B,C,D,E,F FROM R,S
        (4)SELECT A,F FROM R,S WHERE R.C=S.D

    33 设有两个基本表R(A,B,C)和S(A,B,C)试用SQL查询语句表达下列关系代数表达式:
      
    (1)R∪S  (2)R∩S  (3)R-S  (4)π A,B (R)|X|π B,C (S)
        (1)SELECT A,B,C
          FROM R,S
          WHERE NOT EXISTS
           (SELECT A,B,C
           FROM R,S
           WHERE R.A=S.A AND R.B=S.B AND R.C=S.C)

     (2)SELECT A,B,C
          FROM R,S
          WHERE R.A=S.A AND R.B=S.B AND R.C=S.C
        (3)SELECT A,B,C
          FROM R
          WHERE NOT EXISTS
           (SELECT A,B,C
            FROM S
            WHERE R.A=S.A AND R.B=S.B AND R.C=S.C)
        (4)SELECT R.A,R.B,S.C
          FROM R,S
          WHERE R.B=S.B

    34 试叙述SQL语言的关系代数特点和元组演算特点。
    答:SQL语言是介乎关系代数和元组演算之间的一种语言:...

    35 试用SQL查询语句表达下列对教学数据库中三个基本表S、SC、C的查询:
       (1)统计有学生选修的课程门数。
        SELECT COUNT(DISTINCT C#) FROM SC
       (2)求选修C4课程的学生的平均年龄。
        SELECT AVG(AGE)
        FROM S
        WHERE S# IN
         (SELECT S#
          FROM SC WHERE C#='C4')
       (3)求LIU老师所授课程的每门课程的学生平均成绩。
         SELECT CNAME,AVG(GRADE)
           FROM SC ,C
          WHERE C# IN
         (SELECT C#
         FROM C
         WHERE TEACHER='LIU')
         GROUP BY C#   
       (4)统计每门课程的学生选修人数(超过10人的课程才统计)。要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列。
        SELECT DISTINCT C#,COUNT(S#)
        FROM SC
        GROUP BY C#
        HAVING COUNT(S#)>10
        ORDER BY 2,C# DESC
       (5)检索学号比WANG同学大,而年龄比他小的学生姓名。
        SELCET SNAME
        FROM S AS X
        WHERE X.S#>SOME
         (SELECT S#
          FROM S AS Y
          WHERE Y.SNAME='WANG' AND X.AGE<Y.AGE)< p>
       (6)检索姓名以WANG打头的所有学生的姓名和年龄。
        SELECT SNAME,AGE
        FROM S
        WHERE SNAME LIKE 'WANG%'
       (7)在SC中检索成绩为空值的学生学号和课程号。
        SELECT S#,C#
        FROM SC
        WHERE GRADE IS NULL
       (8)求年龄大于女同学平均年龄的男学生姓名和年龄。
        SELECT SNAME,AGE
        FROM S AS X
        WHERE X.SEX='M' AND X.AGE>
    (SELECT AVG(AGE) FROM S AS Y WHERE Y.SEX='F')
       (9)求年龄大于所有女同学年龄的男学生姓名和年龄。
        SELECT SNAME,AGE
        FROM S AS X
        WHERE X.SEX='M' AND X.AGE>ALL
    (SELECT AGE FROM S AS Y WHERE Y.SEX='F')

    36 试用SQL更新语句表达对教学数据库中三个基本表S、SC、C的各个更新操作:
       (1)往基本表S中插入一个学生元组(‘S9’,‘WU’,18)。
        INSERT INTO S(S#,SNAME,AGE) VALUES('59','WU',18)
       (2)在基本表S中检索每一门课程成绩都大于等于80分的学生学号、姓名和性别,并把检索到的值送往另一个已存在的基本表STUDENT(S#,SANME,SEX)。
        INSERT INTO STUDENT(S#,SNAME,SEX)
         SELECT S#,SNAME,SEX
         FROM S WHERE  NOT EXISTS
          (SELECT * FROM SC WHERE
           GRADE<80 AND S.S#=SC.S#)
      
       (3)在基本表SC中删除尚无成绩的选课元组。
        DELETE FROM SC
         WHERE GRADE IS NULL
       (4)把WANG同学的学习选课和成绩全部删去。
        DELETE FROM SC
         WHERE S# IN
          (SELECT S#
          FROM S
          WHERE SNAME='WANG')
       (5)把选修MATHS课不及格的成绩全改为空值。
        UPDATE SC   
     SET GRADE=NULL
        WHERE S# IN
          (SELECT S#
          FROM C WHERE CNAME='MATHS') AND SC.GRADE<60
       (6)把低于总平均成绩的女同学成绩提高5%。
        UPDATE SC  SET GRADE=GRADE*1.05
        WHERE GRADE<(SELECT AVG(GRADE) FROM SC)
    AND S# IN (SELECT S# FROM S WHERE SEX='F')
       (7)在基本表SC中修改C4课程的成绩,若成绩小于等于75分时提高5%,若成绩大于75分时提高4%(用两个UPDATE语句实现)。
        UPDATE SC
         SET GRADE=GRADE*1.05
         WHERE C#='C4' AND GRADE<=75
        UPDATE SC
         SET GRADE=GRADE*1.04
         WHERE C#='C4' AND GRADE>75

    37 预处理方式对于嵌入式SQL的实现有什么重要意义?
         答:预处理方式是先用预处理程序对源程序进行扫描,识别出SQL语句,并处理成宿主语言的函数调用形式;然后再用宿主语言的编译程序把源程序编译成目标程序。

    38 在宿主语言的程序中使用SQL语句有哪些规定?
         答:在宿主语言的程序中使用SLQ语句有以下规定:
          1)在程序中要区分SQL语句与宿主语言语句
          2)允许嵌入的SQL语句引用宿主语言的程序变量(称为共享变量)
          3)SQL的集合处理方式与宿主语言单记录处理方式之间要协调

    39 SQL的集合处理方式与宿主语言单记录处理方式之间如何协调?
         答:由于SQL语句处理的是记录集合,而宿主语言语句一次只能处理一个记录,因此需要用游标( cousor)机制,把集合操作转换成单记录处理方式。

    40 嵌入式SQL语句何时不必涉及到游标?何时必须涉及到游标?
          :1)INSERT、DELETE、UPDATE语句,查询结果肯定是单元组时的SELECT语句,都可直接嵌入在主程序中使用,不必涉及到游标。
           2)当SELECT语句查询结果是多个元组时,此时宿主语言程序无法使用,一定要用游标机制把多个元组一次一个地传送给宿主语言处理。

    41 关系模式R有n个属性,在模式R上可能成立的函数依赖有多少个?其中平凡的函数依赖集有多少个?非平凡的函数依赖有多少个?
    答:在模式R上可能成立的函数依赖最多的个数即为R上函数依赖集的闭包中函数依赖的个数。

    42 对函数依赖X→Y的定义加以扩充,X和Y可以为空属性集,用φ表示,那么X→φ,φ→Y,φ→φ的含义是什么?
    答:根据函数依赖的定义,以上三个表达式的含义为:
    (1)一个关系模式R(U)中,X,Y是U的子集,r是R的任一具体关系,如果对r的任意两个元组t 1 ,t 2 ,由t 1 [X]=t 2 [X]必有t 1 [φ]=t 2 [φ],即X函数决定空属性。即X→φ表示空属性函数依赖于X。这也是任何关系中都存在的。
    (2)φ→Y表示Y函数依赖于空属性。由此可知该关系中所有元组中Y属性的值均相同。
    (3) φ→φ表示空属性函数依赖于空属性。这是显然的。

    43. 数据系统的生存期分成哪几个阶段?数据库结构的设计在生存期中的地位如何?
    答:分成七个阶段:规划、需求分析、概念设计、逻辑设计、物理设计、实现、运行和 维护(规需概逻物现维)。数据库结构的设计在生存期中的地位很重要,只有通过逻辑设计、物理设计,才能把概念模式转化为与选用的具体机器上的DBMS所支 持的数据模型相符合的逻辑结构和物理结构。这个设计在整个数据库设计中处于承上启下的地位。

    44. 什么是数据库设计?数据库设计过程的输入和输出有哪些内容?
    答:数据库设计是指对于给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,使之能够有效地存储数据,满足各种用户的应用需求。
    数据库设计过程的输入包括四部分内容:1)总体信息需求;2)处理需求;(3)DBMS的特征;(4)硬件和OS(操作系统)特征。
    数据库设计过程的输出包括两部分内容:(1)完整的数据库结构,其中包括逻辑结构和物理结构;(2)基于数据库结构和处理需求的应用程序的设计原则。输出一般以说明书的形式出现。

    45. 基于数据库系统生存期的数据库设计分成哪几个阶段?
    答:分为5个阶段:简记为(规需概逻物):规划、需求分析、概念设计、逻辑设计和物理设计五个阶段。)。

    46. 什么是比较好的数据库设计方法学?数据库设计方法学应包括哪些内容?
    答:一个好的数据库设计方法应该能在合理的期限内,以合理的工作量产生一个有实用价值的数据库结构。数据库设计方法学应包括以下内容:设计过程、设计技术、评价准则、信息需求、描述机制。

    47. 数据库设计的规划阶段应做哪些事情?
    答:数据库设计中的规划阶段的主要任务是进行建立数据库的必要性及可行性分析,确定数据库系统在组织中和信息系统中的地位,以及各个数据库之间的联系。

    48. 数据库设计的需求分析阶段是如何实现的?目标是什么?
    答:数据库设计的需求分析通过三步来完成:即需求信息的收集、分析整理和评审,其 目的在于对系统的应用情况作全面详细的调查,确定企业组织的目标,收集支持系统总的设计目标的基础数据和对这些数据的要求,确定用户的需求,并把这些要求 写成用户和数据设计者都能够接受的文档。

    49. 评审在数据库设计中有什么重要作用?为什么允许设计过程中有多次的回溯与反复?
    答:评审的作用在于确认某一阶段的任务是否全部完成,通过评审可以避免重大的疏漏或错误。允许设计过程中的多次回溯与反复就是为了确保在设计完成数据库系统中不出现重大疏漏或错误。

    50. 数据字典的内容和作用是什么?
    答:数据字典的内容一般包括:数据项、数据结构、数据流、数据存储和加工过程。其作用是对系统中数据做出详尽的描述,提供对数据库数据的集中管理。

    51. 对概念模型有些什么要求?
    答:对概念模型一般有以下要求:
    概念模型是对现实世界的抽象和概括,它应真实、充分地反映现实世界中事物和事物之间的联系,有丰富的语义表达能力,能表达用户的各种需求,包括描述现实世界中各种对象及其复杂联系、用户对数据对象的处理要求和手段。
    概念模型应简洁、明晰,独立于机器、容易理解、方便数据库设计人员与应用人员交换意见,使用户能积极参与数据库的设计工作。
    概念模型应易于变动。当应用环境和应用要求改变时,容易对概念模型修改和补充。
    概念模型应很容易向关系、层次或网状等各种数据模型转换,易于从概念模式导出也DBMS有关的逻辑模式。

    52. 概念设计的具体步骤是什么?
    答:概念设计的主要步骤为:
    进行数据抽象、设计局部概念模式;
    将局部概念模式综合成全局概念模式;
    评审。

    53. 什么是数据抽象?主要有哪两种形式的抽象?数据抽象在数据库设计过程中起什么作用?
    答:数据抽象是对人、物、事或概念的人为处理,它抽取人们关心的共同特性,忽略非本质的细节,并把这些特性用各种概念精确地加以描述,这些概念组成了某种模型。
    数据抽象的形式有:系统状态的抽象,即抽象对象;系统转换的抽象,即抽象运算。

    54. 什么是ER图?构成ER图的基本要素是什么?
    答:ER图是用来描述某一组织(单位)的概念模型,提供了表示实体、属性和联系的方法。构成ER图的基本要素是实体、属性和关系。实体是指客观存在并可相互区分的事特;属性指指实体所具有的每一个特性。

    55. 试述采用ER方法的数据库概念设计的过程.
    答:利用ER方法进行数据库的概念设计,可分成三步进行:首先设计局部ER模式,然后把各局部ER模式综合成一个全局ER模式,最后对全局ER模式进行优化,得到最终的ER模式,即概念模式。

    56. 逻辑设计的目的是什么?试述逻辑设计过程的输入和输出环境。
    答:逻辑设计的目的是把概念设计阶段设计好的基本ER图转换为与选用的具体机器上的DBMS所支持的数据模型相符合的逻辑结构,包括数据库模式和外模式。
    逻辑设计过程中的输入信息有:(1)独立于DBMS的概念模式,即概念设计阶段产 生的所有局部和全局概念模式;(2)处理需求,即需求分析阶段产生的业务活动分析结果;(3)约束条件,即完整性、一致性、安全性要求及响应时间要求等; (4)DBMS特性,即特定的DBMS特性,即特定的DBMS所支持的模式、子模式和程序语法的形式规则。
    逻辑设计过程输出的信息有:(1)DBMS可处理的模式;(2)子模式;(3)应用程序设计指南;(4)物理设计指南。

    57. 试述逻辑设计阶段的主要内容。
    答:逻辑设计主要是把概念模式转换成DBMS能处理的模式。转换过程中要对模式进行评价和性能测试,以便获得较好的模式设计。逻辑设计的主要内容包括:
    (1)初始模式的形成
    (2)子模式设计
    (3)应用程序设计梗概
    (4)模式评价
    (5)修正模式。

    58. 规范化理论对数据库设计有什么指导意义?
    答:在概念设计阶段,已经把关系规范化的某些思想用作构造实体类型和联系类型的标准,在逻辑设计阶段,仍然要使用关系规范化的理论来设计模式和评价模式。规范化的目的是减少乃至消除关系模式中存在的各种异常,改善完整性,一致性和存储效率。
    展开全文
  • 数据结构基本概念

    2016-10-29 18:17:55
    基本概念基本概念 数据结构起源 数据结构基本概念 数据结构的逻辑关系 数据结构的物理结构 数据运算 算法 数据结构和算法的关系 算法特点 算法效率的度量 1事后统计法 2事前分析估算 3常规估算注意事项 大O表示法 ...

    基本概念

    1.数据结构起源

    计算机除了数值计算问题以外还需要解决现实生活中很多的问题,而这些问题涉及到现实中很多复杂的对象,不同对象之间具有复杂的关系,数据结构正是描述这些对象之间复杂关系的。但数据结构并非研究复杂算法的一门学科。

    2.数据结构基本概念

    • 数据:
        程序中要操作的对象,用于描述客观事物。可被输入到计算机,也可被计算机处理。如:
      int a,float pI;
    • 数据对象:
        性质相同的数据元素的集合
    int array[20];
    Teacher teachers[30];
    • 数据元素:
        组成数据的基本单位(集合中具体的一个元素/成员/节点)
    array[5],teachers[7];
    • 数据项:
        数据元素中基本组成部分

    • 数据结构:
        数据对象中数据元素(节点)之间的关系
        
      nice

    3.数据结构的逻辑关系

    这里写图片描述

    4.数据结构的物理结构

    这里写图片描述

    5.数据运算

    这里写图片描述

    6.算法

    特定问题的求解步骤,表现为指令的有序集合。语言不重要,思想更重要!是解决问题的思想和方法!

    7.数据结构和算法的关系

      数据结构只是静态的描述数据元素之间的关系,算法是在数据结构的基础上设计和现实相应的解决问题的步骤。高效的程序需要有效的结合数据结构和算法。相辅相成。

    8.算法特点

    • 输入:具有0个或多个输入
    • 输出:至少有一个输出
    • 有穷性:在有限步骤之后就会结束
    • 确定性:每一步都有确定的含义不出现二义性
    • 可行性:在计算机上可运行实现

    9.算法效率的度量

    • 算法最终要编译成具体的计算机指令
    • 每一条指令在具体的计算机CPU上运行时间是固定的
    • 通过具体的n的步骤的多少就可以推导出算法的复杂度

    9.1事后统计法

    含义:
      比较不同算法对同一组输入数据的运行处理时间
    缺陷

    • 为了获得不同算法的运行时间必须编写相应程序
    • 运行时间严重依赖硬件以及运行时的环境因素
    • 算法的测试数据的选取相当困难
    • 事后统计法虽然直观,但是实施困难且缺陷多

    9.2事前分析估算

    含义
      依据统计的方法对算法效率进行估算
    影响算法效率的主要因素

    • 算法采用的策略和方法
    • 问题的输入规模
    • 编译器所产生的代码
    • 计算机执行速度

    9.3常规估算注意事项

    • 注意1:判断一个算法的效率时,往往只需要关注操作数量的最高次项,其它次要项和常数项可以忽略。
    • 注意2:在没有特殊说明时,我们所分析的算法的时间复杂度都是指最坏时间复杂度。

    10.大O表示法

    • 算法效率严重依赖于操作(Operation)次数数量
    • 在判断时首先关注操作数量的最高次项
    • 操作数量的估算可以作为时间复杂度的估算
      O(5) = O(1)
      O(2n + 1) = O(2n) = O(n)
      O(n2+ n + 1) = O(n2)
      O(3n3+1) = O(3n3) = O(n3)
      这里写图片描述

    11.空间复杂度

    算法的空间复杂度通过计算算法的存储空间实现
    S(n) = O(f(n))
    其中,n为问题规模,f(n))为在问题规模为n时所占用存储空间的函数
    大O表示法同样适用于算法的空间复杂度
    当算法执行时所需要的空间是常数时,空间复杂度为O(1)

    空间与时间的策略

    多数情况下,算法执行时所用的时间更令人关注
    如果有必要,可以通过增加空间复杂度来降低时间复杂度
    同理,也可以通过增加时间复杂度来降低空间复杂度

    12.面试题(时间和空间的互换)

    在一个由自然数1-1000中某些数字所组成的数组中,每个数字可能出现零次或者多次。设计一个算法,找出出现次数最多的数字。

    #include <iostream>
    using namespace std;
    #define MAX 1000
    void search(int array[],int len,int *res_num,int *count)
    {
        int i = 0;
        int sp[MAX] = {0};
        int max = 0,tmp = 0;
        for (i = 0; i < len;i++)
        {
            sp[(array[i]-1)]++;
        }
    
        for (i = 0; i < MAX; i++)
        {
            if (max < sp[i])
            {
                max = sp[i];
                tmp = i + 1;
            }
        }
        *res_num = tmp;
        *count = max;
    }
    
    int main(void)
    {
        int array[] = {1,2,5,6,2,4,7,8,9,10,1,23,9,3,9,4,9,12,9,222,9,111,9};
        int max_num = 0,cnt = 0;
        int len = sizeof(array) / sizeof(array[0]);
        search(array, len, &max_num,&cnt);
    
        cout << "max_num: " <<max_num<<"count : "<<cnt<< endl;
        cout<<"Hello!"<<endl;
        return 0;
    }
    展开全文
  • OLAP分类的基本概念和基本操作

    千次阅读 2017-12-20 11:47:13
    OLAP存储分类 OLAP存储有多种实现...**旋转(Pivot):**即维的位置的互换,就像是二维表的行列转换,如图中通过旋转实现产品维和地域维的互换。 转自:http://blog.csdn.net/rgb_rgb/article/details/8662447

    OLAP存储分类

    OLAP存储有多种实现方法,根据存储数据的方式不同可以分为ROLAP、MOLAP、HOLAP。

    ROLAP:表示基于关系数据库的OLAP实现(Relational OLAP)。以关系数据库为核心,以关系型结构进行多维数据的表示和存储。ROLAP将多维数据库的多维结构划分为两类表:一类是事实表,用来存储数据和维关键字;另一类是维表,即对每个维至少使用一个表来存放维的层次、成员类别等维的描述信息。维表和事实表通过主关键字和外关键字联系在一起,形成了“星型模式”。对于层次复杂的维,为避免冗余数据占用过大的存储空间,可以使用多个表来描述,这种星型模式的扩展称为“雪花模式”。ROLAP的最大好处是可以实时地从源数据中获得最新数据更新,以保持数据实时性,缺陷在于运算效率比较低,用户等待响应时间比较长。

    MOLAP:表示基于多维数据组织的OLAP实现(Multidimensional OLAP)。以多维数据组织方式为核心,也就是说,MOLAP使用多维数组存储数据。多维数据在存储中将形成“数据立方体(Cube)”的结构,此结构在得到高度优化后,可以最大程度地提高查询性能。随着源数据的更改,MOLAP 存储中的对象必须定期处理以合并这些更改。两次处理之间的时间将构成滞后时间,在此期间,OLAP对象中的数据可能无法与当前源数据相匹配。维护人员可以对 MOLAP 存储中的对象进行不中断的增量更新。MOLAP的优势在于由于经过了数据多维预处理,分析中数据运算效率高,主要的缺陷在于数据更新有一定延滞。

    HOLAP:表示基于混合数据组织的OLAP实现(Hybrid OLAP),用户可以根据自己的业务需求,选择哪些模型采用ROLAP,哪些采用MOLAP。一般来说,会将非常用或需要灵活定义的分析使用ROLAP方式,而常用、常规模型采用MOLAP实现。

    Cubes:是数据立方体。何为数据立方体?这主要是和维度的概念一起理解,我们现实是分三维,x,y,z三个坐标决定的空间。而数据库,可能会包含很多维度,只是在我们的认知中无法想像超越三维的事物,这只是个概念。可见,Cube是依赖于维度的。所以在我们建立Cube的时候,需要理解下面的Dimension是什么。
    Dimensions:Cube的维度,每个Cube依赖哪些维度来做统计,就需要在这里建。虽然在创建立方的时候会自动帮我们创建维度,但是有时候他创建的维度并不能达到我们的目的。所以,我们先建Dimension,再建Cube。
    Mining structures:数据挖掘用的东西,咱这里就不说了,因为我还没用过,只是看了下Webcast的视频,里面介绍了集成了大量的现有挖掘算法,很方便的可以做出相应的分析趋势。 还是看似厉啊。

    OLAP的基本操作

    我们已经知道OLAP的操作是以查询——也就是数据库的SELECT操作为主,但是查询可以很复杂,比如基于关系数据库的查询可以多表关联,可以使用COUNT、SUM、AVG等聚合函数。OLAP正是基于多维模型定义了一些常见的面向分析的操作类型是这些操作显得更加直观。
    OLAP的多维分析操作包括:钻取(Drill-down)、上卷(Roll-up)、切片(Slice)、切块(Dice)以及旋转(Pivot),下面还是以上面的数据立方体为例来逐一解释下:
    这里写图片描述
    **钻取(Drill-down):**在维的不同层次间的变化,从上层降到下一层,或者说是将汇总数据拆分到更细节的数据,比如通过对2010年第二季度的总销售数据进行钻取来查看2010年第二季度4、5、6每个月的消费数据,如上图;当然也可以钻取浙江省来查看杭州市、宁波市、温州市……这些城市的销售数据。
    **上卷(Roll-up):**钻取的逆操作,即从细粒度数据向高层的聚合,如将江苏省、上海市和浙江省的销售数据进行汇总来查看江浙沪地区的销售数据,如上图。
    **切片(Slice):**选择维中特定的值进行分析,比如只选择电子产品的销售数据,或者2010年第二季度的数据。
    **切块(Dice):**选择维中特定区间的数据或者某批特定值进行分析,比如选择2010年第一季度到2010年第二季度的销售数据,或者是电子产品和日用品的销售数据。
    **旋转(Pivot):**即维的位置的互换,就像是二维表的行列转换,如图中通过旋转实现产品维和地域维的互换。
    转自:http://blog.csdn.net/rgb_rgb/article/details/8662447

    展开全文
  • 传感器基本概念

    千次阅读 2018-12-23 15:19:08
    经研究证明晶体管发射结上的正向电压随温度上升而近似性下降,这种特性与二极管十分相似,但晶体管表现出比二极管更好的线性和互换性。 10、压电式与压磁式传感器 压电式与压磁式传感器均是由外界力作用而引起电...
  • 关系模型的基本概念

    千次阅读 2020-05-24 14:25:28
    关系模型的基本概念关系模型简述关系模型研究的问题关系模型的三个要素一些数学描述的概念 关系模型简述 1.最早由E.F.Codd在1970年提出。 2.是从表(Table)及表的处理方式中抽象出来的,是在对传统表及其操作进行...
  • 云计算基本概念

    千次阅读 2014-05-15 22:11:43
     (3) 高可靠:在这方面,云计算中心在软硬件层面采用了诸如数据多副本容错、心跳检测和计算节点同构可互换等措施来保障服务的高可靠,还在设施层面上的能源、制冷和网络连接等方面采用了冗余设计来进一步确保...
  • 处理机调度基本概念

    千次阅读 2018-10-18 00:10:29
    处理机调度: 多道程序环境下,动态的把处理机分配给...一、处理机调度的基本概念 作业进入系统驻留在外存的后备队列上,再至调入内存运行完毕,可能要经历下述三级调度。 高级调度(High Scheduling) 中级调...
  • 数据库MySQL关系模型之基本概念

    万次阅读 2019-01-31 16:11:44
    1.什么是关系模型 1.1关系模型研究什么 一个关系(relation)就是一个Table 关系模型就是处理Table...描述这些操作所应遵循的约束条件(完整约束) 1.2 关系模型的三个要素 基本结构: Relation/Table 基本操作...
  • 生信-基本概念

    千次阅读 2018-09-25 15:54:00
    同源染色体是在二倍体细胞中,形态、结构基本相同的染色体,并在减数第一次分裂的四倍体时期发生联会,最后分开到不同生殖细胞的一对染色体。 同源染色体上常含有不同的等位基因,减数分裂时进行随即交换产生了...
  • OLAP基本概念 度量:数据度量的指标,数据的实际含义 维度:描述与业务主题相关的一组属性 事实:不同维度在某一取值下的度量   OLAP特点: (1)快速:用户对OLAP的快速反应能力有很高的要求。...
  • 关系模型概述 什么是关系 关系模型的完整约束 重点与难点 一组概念的区分: 围绕关系的相关概念:域、笛卡儿积、关系、关系...关系模型就是处理table的,他由三部分组成:包括描述数据库各种关系的基本结构...
  • 蓝牙的基本概念以及发展轨迹 - 蓝牙的前生后世

    千次阅读 多人点赞 2020-07-20 18:01:58
    第一篇:蓝牙综合介绍 ,主要介绍蓝牙的一些概念,产生背景,发展轨迹,市面蓝牙介绍,以及蓝牙开发板介绍。 第二篇:Transport层介绍,主要介绍蓝牙协议栈跟蓝牙芯片之前的硬件传输协议,比如基于UART的H4,H5,BCSP,...
  • 三 关系模型之基本概念

    千次阅读 2018-09-03 13:11:37
    - 描述DB各种数据的基本结构形式(Table/Relation) - 描述Table与Table之间所可能发生的各种操作(关系运算) - 描述这些操作所应遵循的约束条件(完整约束) 所以要研究,Table如何描述,有哪些操作、 结果是什么.....
  • 软件度量基本概念理解

    千次阅读 2007-07-29 22:31:00
    软件度量基本概念理解 转自: http://blog.edu.cn/user2/mindware/archives/2006/1091478.shtml Roger
  • 进程间通信基本概念

    千次阅读 2016-12-23 17:09:27
    封闭:(运行环境的封闭) 确定 可再现 并发程序特征 共享 并发 随机 进程互斥 由于各进程要求共享资源,而且有些资源需要互斥使用,因此各进程间竞争使用这些资源,进程的这种关系为进程的...
  • UML基本概念——动态视图

    千次阅读 2020-08-23 23:50:20
    不论是静态视图还是动态视图都是建模的重要工具,熟练掌握它们除了学习基本概念之外,诀窍就是多用。这些视图不但可以用在软件建模过程中,也可以用在分析现实生活中的一些事例。只要愿意,总可以从生活中找到非常多...
  • Docker基本原理与基础概念

    千次阅读 2018-11-25 16:11:26
    rootfs表现为Docker容器的根文件系统,传统模式中,系统启动之时,内核挂载rootfs时会首先将其挂载为“只读”模式,完整自检完成后将其重新挂载为读写模式;docker中,rootfs由内核挂载为“只读”模式,而后通过...
  • 安防产品基本概念

    千次阅读 2011-05-12 14:13:00
    互换性,但现已有通用型自动光圈镜头推出 17) C型接口与CS型接口的区别是什么?——(难度:容易) 答: 镜头安装有C型和CS型两种,C型安装的镜头在CCD 摄像机 与镜头间多了5mm 调整光圈值的环。C型安装的 摄像机 ...
  • 线程池的基本思想还是一种对象池的思想,开辟一块内存空间,里面存放了众多(未死亡)的线程,池中线程执行调度由池管理器来处理。当有线程任务时,从池中取一个,执行完成后线程对象归池,这样可以避免反复创建线程...
  • 线性代数基本概念1

    2011-03-23 17:28:00
     定理一 一个排列中的任意俩个元素对换,排列改变奇偶。  推理 奇排列变成标准排序的对换次数为奇数,偶排列变成标准排列的对换次数为偶数。  定理二 n阶行列式也可定义为,∑(-1) t a p1 1 a p2 2 ...
  • GPGPU基础(一):一些基本概念

    千次阅读 2018-05-17 12:01:40
    GLSL有三种基本数据类型:float,int和bool,以及有这些数据类型组成的数组和结构体。GLSL不支持指针。同时,GLSL将向量和矩阵作为基本数据类型。向量类型包括由上述三种基本数据类型构成的二维,三维和四维向量,...
  • 作者简介:Anatoly Burakov,英特尔软件工程师,目前在维护DPDK中的VFIO和内存子系统。 引言 内存管理是数据面开发套件(DPDK)的...本文将先介绍DPDK内存的基本原理,并解释它们是如何帮助DPDK实现高性能的。 请注意.
  • 树的基本概念和遍历规则

    千次阅读 2015-07-21 12:00:26
     (1)如果树中同层结点从左而右排列,其次序不容互换,这样的树称为有序树;  (2)如果同层结点的次序任意,这样的树称为无序树。 树的表示方法  ⑴自然界的树形表示法: 用结点和边表示树,例如上图...
  • 云计算入门--基本概念和特点

    千次阅读 2009-10-22 14:05:00
    基本概念和特点 英译:cloud;cloud computing;cloud computer;cloud-based。 1、狭义云计算 狭义云计算是指IT基础设施的交付和使用模式,指通过网络以按需、易扩展的方式获得所需的资源(硬件、平台、软件)。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 17,833
精华内容 7,133
关键字:

互换性的基本概念