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
- 执行效率<-----------------------> 编写效率
- 大型系统中
ASM | C | VC++ |
---|---|---|
底层内核驱动 | 中层接口 | 界面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 -
寄存器相对寻址方式
在上面的基础上 + 位移量 -
基址变址寻址方式
-
相对基址变址方式
再加一个偏移地址