• 20192418汇编程序设计1~4章学习知识点总结


    汇编程序设计

    20192418张曦


    汇编语言一般概念

    -机器语言

    优点:运行速度快,程序长度短。
    缺点:二进制数表示的内容不便于记忆,难以阅读。

    -高级语言

    特点:程序设计简单,程序效率较低。

    -汇编语言

    • 便于阅读,效率高;
    • 一条汇编语言的语句与一条机器语言指令对应。

    机器自检、系统初始化、实际的输入输出设备的操作等。


    进位计数制及其相互转换

    • 各个位置上表示的基本数值称为位权;
    • 每个数位上能使用不同数码的个数称为基数。
    B——二进制
    O——八进制
    D——十进制
    H——十六进制
    

    除基取余法

    减权定位法

    乘积取整法

    按权相加法


    带符号数的表示

    • 真值:+和-表示正负数

    • 机器数:0和1表示正数和负数

    原码

    最高位表示符号,8位二进制范围:-127~127

    补码

    带符号数X的补码,0为正,1为负

    • 正数:与原码相同

    • 负数:取反加一


    基本逻辑运算

    AND
    OR

    异或XOR


    IBM-PC微机基本结构

    • 运算器
    • 控制器
    • 存储器
    • 输入设备
    • 输出设备

    运算器+控制器=中央处理器(CPU)

    系统总线结构

    • 地址总线
    • 数据总线
    • 控制总线

    主存储器

    若干个存储单元构成
    编号地址来表示

    辅助存储器成为外存

    输入输出设备及接口

    输入:键盘鼠标
    输出:显示器打印机

    系统总线


    Intel 8086/8088 CPU的功能结构

    CPU执行指令:

    1. 从存储器中取指令
    2. 执行指令规定的操作

    串行方式/指令流水线方式

    执行单元EU

    • 取出指令代码
    • 对操作数执行算术或逻辑运算
    • 向总线接口单元BIU发送访问主存或I/O的命令

    总线接口单元BIU

    • 取指令
    • 存取数据

    EU和BIU既分工又合作,且并行工作


    CPU寄存器的结构和用途

    • 通用寄存器8个
    1. 数据寄存器:AX BX CX DX
    2. 指针寄存器:SP BP
    3. 变址寄存器:SI DI
    • 控制寄存器2个
      IP FLAGS

    • 段寄存器4个
      CS DS ES SS

    CPU访问存储器时:

    1. 访问的存储单元属于哪个段
    2. 该存储单元与段起始地址(段基址)的偏移量

    进位标志位CF
    奇偶标志位PF
    辅助进位标志位AF
    零标志位ZF
    符号标志位SF
    溢出标志位OF
    单步标志位TF
    中断允许标志位IF
    方向标志位DF


    存储器组织结构

    存储器的组成

    1. 若干个存储单元构成
    2. 编号地址来表示
    3. 存放相同长度的二进制数

    存储器的段结构

    段基址
    每16字节单元分为一小节
    1MB内存分为64K个小节

    逻辑段
    邻接的、间隔的、部分重叠、完全重叠 四种情况

    逻辑地址与物理地址及对应关系

    逻辑地址:段基值、偏移量

    逻辑地址转换为物理地址:
    逻辑地址的段基值左移4位,形成20位段基址然后与16位偏移量相加,结果可得20位物理地址。


    堆栈及其操作方法

    用途:主要用于暂存数据以及在过程调用或者处理中断时保存断点信息。

    • 专用堆栈存储器
    • 软件堆栈

    栈底是最大地址单元
    先进后出FILO

    堆栈操作

    • 设置堆栈
    • 进栈PUSH
    • 出栈POP

    寻址方式

    • 指令:
    1. 操作码
    2. 操作数
      立即数操作数
      寄存器操作数
      存储器操作数
      I/O端口操作数

    立即数只能作为源操作数,而不能作为目的操作数

    1. 立即数寻址
    2. 寄存器寻址
    3. 直接寻址
      (1)符号表示
      (2)常数表示
    4. 寄存器间接寻址
    5. 基址寻址/变址寻址
      段寄存器的隐含使用规则与寄存器间接寻址方式相同
      相对有位移量指定的初始单元,因此也叫寄存器相对寻址。
    6. 基址变址寻址
      EA=基址+变址+位移量
      当基址选用BX时隐含使用段寄存器DS,而选用BP时则隐含使用段寄存器SS。
    7. 串操作寻址方式
    8. I/O端口寻址
      特点:程序设计灵活,但需要占用存储地址空间。
      (1)直接端口寻址
      (2)寄存器间接端口寻址

    指令系统

    一种计算机能执行的各种类型的指令的集合成为计算机的指令系统

    传送类指令

    1. 通用数据传送指令
      MOV指令:
      (1)立即数只能作源操作数,且不能传送给段寄存器。
      (2)段寄存器CS只能作源操作数,段寄存器之间不能直接传送。
      (3)存储单元之间不能直接传送数据。
      (4)MOV指令不影响标志位。
    2. 交换指令
      作用:源操作数和目的操作数两者内容相互交换。
    3. 标志传送指令
      (1)取标志寄存器指令
      指令格式:LAHF
      (2)存储标志寄存器指令
      指令格式:SAHF
      (3)标志进栈指令
      指令格式:PUSHF
      (4)标志出栈指令
      指令格式:POPF
    4. 地址传送指令
      (1)装入有效地址
      格式:LEA DEST,SRC
      (2)装入地址指针指令
      格式:LDS DEST,SRC
      LES DEST,SRC

    算术运算类指令

    1. 加法指令
      指令格式:ADD DEST,SRC
    2. 带进位加法指令
      指令格式:ADC DEST,SRC
      可实现大于16位的两数相加
      高16位在AX,低16位在BX
    3. 加1指令
      指令格式:INC DEST
    4. 减法指令
      SUB DEST,SRC
    5. 带借位减法
      指令格式:SBB DEST,SRC
    6. 减1指令
      指令格式:DEC DEST
    7. 求负数指令
      NEG DEST

    位操作类指令

    1. 逻辑运算指令
    2. 测试指令
      指令格式:TEST DEST,SRC

    移位/循环移位指令

    (1)算术移位
    (2)逻辑移位
    (3)循环移位

    处理器控制类指令

    1. 标志位操作指令
      (1)清除进位标志
      (2)置1进位标志
      (3)进位标志取反
      (4)清除方向标志
      (5)置1方向标志
      (6)清除中断标志
      (7)置1中断标志
    2. 与外部事件同步的指令
      HLT暂停指令
      WAIT等待指令
      ESC外部协处理器指令前缀
    3. 空操作指令 NOP

    指令编码

    汇编:将汇编语言程序转换为机器语言程序的过程

    双操作数指令编码格式

    • 一个操作数在寄存器中,另一个操作数在寄存器或存储器中。
    • 目的操作数在寄存器或存储器中,源操作数是立即数。
    • 2~6个字节:操作特征1,寻址特征1,位移量2,立即数2.

    操作特征部分

    (1)OPCODE操作码字段
    (2)d方向字段
    (3)W字/字节字段

    寻址特征部分

    包括MOD、REG、R/M三个字段,REG字段确定一个操作数

    • REG字段
      寄存器寻址方式
    • MOD 和 R/M

    位移量部分

    • 没有位移量
    • 1字节位移量disp8
    • 2字节位移量disp16

    立即数部分

    总是位于指令编码的最后1~2个字节。

    单操作数指令编码格式

    2~3个字节
    操作特征,寻址特征,位移量

    与AX或AL有关的指令编码格式

    隐含指定AX/AL作为一个操作数的双操作数指令
    另一个操作数可以是立即数或存储单元

    其他指令编码格式


    汇编语言程序格式

    指令语句
    标号-:-指令助记符-操作数-;-注释

    1. 标号字段
    2. 指令助记符
    3. 操作数字段
    4. 注释字段(以分号开始)

    伪指令语句

    1. 符号名字段
    2. 伪指令符字段
    3. 操作数字段
    4. 注释字段

    标识符


    汇编语言数据

    数据由数值和属性组成

    常数

    二进制
    八进制
    十进制
    十六进制
    实数
    字符串常数

    变量

    存放数据的存储单元
    (1)段属性:表示变量存放在哪一个逻辑段中
    (2)偏移量属性(OFFSET):所在位置与段起点之间的字节数
    段属性和偏移量属性就构造了变量的逻辑地址
    (3)类型属性:数值表达式,?表达式,字符串表达式
    (4)DUP表达式:重复数据操作符

    变量的使用

    1. 在指令语句中引用
    2. 在伪指令语句中引用

    标号

    指令地址的别名
    标号三属性:段属性,偏移量属性,距离属性(类型属性)NEAR/FAR


    符号定义语句

    等值语句

    语句格式:符号名 EQU 表达式

    1. 常数或数值表达式
    2. 地址表达式
    3. 变量、寄存器名或指令助记符

    等号语句

    格式:符号名=表达式


    表达式与运算符

    算术运算符

    加减乘除余 都是整数
    SHR SHL 逻辑移位

    逻辑运算符

    关系运算符

    EQ等于
    NE不等于
    LT小于
    LE小于等于
    GT大于
    GE大于等于

    数值返回运算符

    1. SEG运算符
      取变量或标号所在段的段基值
    2. OFFSET运算符
      取变量或标号在段内的偏移量
    3. TYPE运算符
      取变量或标号的类型属性,并用数字形式表示
    4. LENGTH运算符
      用于取变量的长度
      5.SIZE运算符
      作用于变量,等于LENGTH 和TYPE 两个运算符返回值的乘积

    属性修改运算符

    1. PTR运算符
      类型 PTR 地址表达式
    2. HIGH/LOW运算符
      分离高低字节
    3. THIS运算符
      与等值运算符EQU连用,定义类型属性。

    程序的段结构

    伪指令定义和使用这些逻辑段

    段定义伪指令

    1. 段名
      符合标识符定义规则的一个名称,段名前后一致
    2. 定位类型
    • PAGE:表示该段从一个页面的边界开始
    • PARA:表示该段从一个小节的边界开始(缺省)
    • WORD:该段从一个偶数字节地址开始
    • BYTE:表示该段起始单元地址可以是任一地址值
    1. 组合类型
    • 无连接关系
    • PUBLIC:同名邻接
    • COMMON:产生一个覆盖段
    • STACK:把所有同名段连接成一个连续段,系统自动对SS段寄存器初始化为该连续段的段基址。并初始化堆栈指针SP。
    • AT表达式:表示本段可定位在表达式所指示的小节边界上。
    • MEMORY:表示本段在存储器中应定位在所有其他段之后的最高地址上。
    1. 类别名

    段寻址伪指令

    ASSUME 段寄存器名:段名,段寄存器名:段名,……
    NOTHING 将前面的设置删除

    段寄存器的装入

    1. DS和ES的装入
    2. SS的装入
    3. CS的装入

    过程定义伪指令(PROC/ENDP)

    在MASM宏编程程序中,用过程(PROCEDURE)来构造子程序。

    当前位置计数器$与定位伪指令ORG

    $在使用上完全类似变量的使用
    ORG——用于改变位置计数器的值
    格式:ORG 数值表达式

    标题伪指令
    语句格式 TITLE 表达式


    从程序返回操作系统的方法

    1. 使用程序段前缀PSP实现返回
    • 将用户程序编制成一个过程,类型为FAR
    • 将PSP的起始逻辑地址压栈
    1. 使用DOS系统功能调用实现返回
      两条指令:
    MOV AH,4CH
    INT 21H
    
  • 相关阅读:
    Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
    Centos安装openjdk
    centos7安装nodejs
    Linux服务器集群性能监控之Performance Co-Pilot(PCP)部署
    asp.net(c#)网页跳转七种方法小结
    C# 获取文件名及扩展名
    C#中的 具名参数 和 可选参数
    数据契约(DataContract)
    用LINQ在集合中查询特定对象
    jQuery中append、insertBefore、after与insertAfter方法注意事项
  • 原文地址:https://www.cnblogs.com/zhangxi2418/p/15995344.html
Copyright © 2020-2023  润新知