汇编语言【HFUT software】

1.定义

面向机器
软件 software

instruction set(汇编语言)

硬件 hardware

软件和硬件的界面:ISA(Instruction Set Architecture )指令集体系结构


机器语言:

  • 由机器指令构成,机器指令是二进制编码的指令,以指示计算机要进行的操作及操作对象 (指令 = 操作码 + 操作数)
  • B024 B344 F6E3 050A00 表示36*68 + 10

汇编语言:机器语言的符号化,与机器密切相关(不同机器不一样)

  • MOV AL,36; MOV BL,68; MUL BL; ADD AX,10
  • 需要翻译成机器语言:需要连接

高级语言

  • 接近自然语言或数学表达式形式的设计语音,pascal,c,c++

特点

汇编语言和机器语言一一对应

  • 速度最快,占用空间最少
  • 编程需要从机器指令角度出发

汇编语言是面向机器的语言

  • 可以直接控制计算机的硬件
  • 不同的机器有自己的汇编语言
  • 高级语言应用到不同的机器上也需要相应的编译器

应用场合

  • 程序需要快的执行时间,或者只能占用小的存储容量
    操作系统的核心程序段(任务切换),实时控制系统的软件等
  • 程序与计算机硬件密切相关,要直接,有效的控制硬件
    I/O接口电路的初始化程序段,外部设备的低层驱动程序
    如何编写sleep()函数
  • 大型软件需要提高性能,优化处理的部分
    计算机系统频繁调用的子程序,动态链接库等
  • 其他
    系统的低层软件,加密解密软件,分析和防治计算机病毒

应用实例

机器语言-----ASM------结构化------VIsual/oo

  • 执行效率<-----------------------> 编写效率
  • 大型系统中
ASMCVC++
底层内核驱动中层接口界面GUI

为什么学习汇编语言

  • 编写底层驱动程序,实时控制程序等:但很少独立使用
  • 理解计算机的工作原理,OS调度过程
  • 了解高级语言转换可执行代码的过程,提高高级语言编程质量;
  • 借助反汇编工具,测试,分析目标代码

1.1 数的表示

进制;数进制转换;

常用数:
0-00H;128-80H;255-FFH;256-100H;
32767-7FFFH ;65535FFFFH

  • 无符号数:直接使用二进制表示

  • 有符号数:
    (原码 最高位符号+数值)
    (反码,最高位符号 + 反过来的原码)

    补码:

    • 最高有效位为符号位:0–正;1–负
    • 正数的补码为它本身(二进制值);负数的补码由2^N - |X|表示 n为机器的字长
    • 注:2^n -|x| 等价于对|X| 取反 +1
    • 注: 长度一样的时候是唯一的 变长(正数加0,负数加1)

    求补:

    • 求补:取反加1
    • [x]补<-----------------> [-x]补 (相反数的补码)
    • 补码为11001100,十进制数为
    • 加减
      • [x+y]补 = [x]补 + [y]补
      • [x-y] = [x] - [y]
      • [x-y] = [x] + [-y]
      • 没有乘法和除法
  • 浮点数: 尾数)规格化 + 指数) 移码减一

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
14个寄存器
在这里插入图片描述

  • 进位标志CF
    当运算结果的最高有效位有进位或减位时,进位标志置1,即CF = 1;否则CF = 0
  • ZF零标志
    若运算结果为0,ZF = 1
  • OF溢出标志
    算法结果有溢出,则OF = 1
    针对有符号数OF = 1代表错误
    无符号数不一定
  • SF符号标志
    和最高有效位一样
    (1)00H 最高位为0
  • PF奇偶标志
  • AF辅助进位标志
    D3位有进位错位时,AF = 1

溢出

处理器内部以补码表示有符号数

  • 8个二进制位能够表达的整数范围是 : +127 ——-128
  • 16位的表达范围 +32767—— -32768
  • 如果运算结构超过了这个范围,就是产生了溢出
  • 有溢出,说明有符号数的运算结果不正确
  • 无符号数溢出不算错

溢出判断:

  • 方法一
    两个正补码相加为负
    两个负补码相加为正
    正补码 - 负补码 为负
    负补码 - 正补码 为正
  • 方法二
    如果最高位与次高位同时向前有或无进/借位,则OF = 0;
    如果最高位与次高位不同时向前有或无进/借位,则OF = 1;

如何运用溢出和进位

  • 处理器对两个操作数进行运算时,并不知道操作数是有符号数还是无符号数,所以全部设置,按各自规则来

8060存储器组织

  • 内存是存放指令和数据的部件,由若干内存单元构成
  • 80X86的内存以字节编址: 每个内存单元有唯一的地址,可存放一个字节
  • 内存单元的两个要素:地址(编号)与值(内容)
    (100H) = 34H

分段管理

  • 将储存器分为若干个逻辑段
  • 段首地址必须位:****0H。其有效地址 “****H” 存放在段寄存器中,称作段地址
  • 段中某一个单元相对于段首的距离称为偏移地址,偏移地址存放在偏移地址寄存器中。
  • 段的长度不超过2^16 = 64K

地址概念

  • 物理地址
    20位 唯一
  • 逻辑地址
    段地址 程序开始时预定
    偏移地址 高级语言的变量 A,B

寻址方式

  • 机器码格式:
    指令以二进制数0和1进行编码的形式
    操作码 Mod Reg R/M 位移量 立即数
  • 操作码 说明计算机要执行哪种操作
  • MOd Reg R/M: 表明寻找操作数的方式
  • 指令的一般格式
    操作码 操作数1 操作数2

内存操作数寻址方式

  • 直接寻址方式
    内存操作数的偏移地址由指令直接给出
    MOV AX,[2000H] 数地址

  • 寄存器间接寻址方式
    SI DI BX BP

  • 寄存器相对寻址方式
    在上面的基础上 + 位移量

  • 基址变址寻址方式

  • 相对基址变址方式
    再加一个偏移地址

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值