第一章

  • 计算机组成

五部分:(运算器、控制器)、存储器、输入/输出设备

↑↑ CPU ↑↑ ↑内存↑

三条总线:控制总线、地址总线、数据总线

  • 不同进制及BCD码的转换
  • 特殊ascll

‘0’~‘9’—— 30H ~ 39H

‘A’~‘F’—— 41H ~ 46H

回车 —— 0DH

换行 —— 0AH

  • 溢出判断
  1. 运算器对有符号数和无符号数同等对待
  2. 进位保存在CF9(进位标志位)中
  3. 当参与运算的两数符号相同,结果符号却他们相异时,判断溢出

第二章

  • 16位寄存器

AX、BX、CX、DX

SI、DI

BP、SP

其中AX、BX、CX、DX可分为高位,低位两个八位寄存器使用

如:

  • 32位操作系统工作模式

a. 实模式

b. 保护模式

c. 虚拟86模式

  • 实模式的特点

a. 加电复位之后,486工作在实模式下,系统在Dos管理下

b. 只能访问 1M 内存

c. 存储管理部件对存储器只分段,不分页,每段最大64KB

d. 段寄存器中存放段基址

  • 实模式下段寄存器存放相应逻辑段基址

逻辑段 段基址 偏移地址

代码段 CS IP

堆栈段 SS SP

数据段 DS 根据不同的寻

附加段 ES 址方式,选择BX/SI/DI

  • 物理地址 = 段基址 * 2^4 + 偏移量
  • 虚拟地址、线性地址、物理地址

虚拟地址 ——> 分段部件 = 线性地址

线性地址 ——> 分页部件 = 物理地址

在实模式下,没有分页部件,即 线性地址 = 物理地址

第三章

  • 指令

指令 = 操作码 + 操作数

指令格式如下:

标号:操作码助记符 [TAB] 操作数(多个操作数用 , 隔开) ;注释

其中,标号表示该条指令的符号地址(逻辑地址),以下划线或字母开始不超过31个字符

  • 标志寄存器

C、A、S、P、Z、O

  1. C(进位/借位标志)

加减法执行后,最高位产生进位或借位,则C置1,否则置0

2. A(辅助进位/借位)

加法或减法执行后,D3向D4有进位或借位,则A置1,否则置0

3. S(符号寄存器)

S标志记录结果的最高位的值

4. P(奇偶标志)

根据运算结果低8位中 1 的个数判定,个数为偶数则P置1,奇数则置0(P只关心低8位)

5. Z(全〇标志)

isZero( ) 若全为零则置1

6. O(溢出标志位)

若溢出则置1

  • 寻址方式
  1. 立即寻址

只能用于源操作数,不能用于目标操作数

常用于赋值

16进制表示时,开头为 A~F时,需要在开头加0

2. 寄存器寻址

立即数在寄存器中

3. 直接寻址

形式:

a. 段寄存器:[偏移地址] 如:Mov AX, DS:[45H]

b. 段寄存器:变量名 如:Mov AX, DS:Buf

4. 间接寻址

BP SS

BX SI DI DS

5. 基址寻址

BP SS

BX DS

段寄存器:[基址寄存器 + 位移量]

6. 变址寻址

SI DI DS

段寄存器:[比例因子 * 变址寄存器 + 位移量]

7. 基+变

段寄存器:[基址寄存器 + 比例因子 * 变址寄存器 + 位移量]

  • 符号指令和伪指令
;数据定义伪指令  用于定义变量
DB      定义字节变量
DW      定义字变量
DD      定义双字变量;符号定义伪指令   用于定义常量和符号名
EQU      等值伪指令(定义出来视为常量)
=      等号伪指令(等号伪指令定义出来的常量值可变,EQU定义出来的不可变);数值回送运算符
SEG      回送逻辑段的段基址或标号/变量所在逻辑段的段基址
OFFSET   回送标号/变量的偏移地址
TYPR     回送标号或变量的类型(字节返回1,字返回2,双字返回3)
$        使用 $ 统计之前的所有字符长度, 常数不算(紧跟在DBDWDD之后可以统计字符串长度);属性操作符
PTR 格式
类型说明符  PTR   标号或变量的地址表达形式
1. 寄存器前不能加  PTR, 内存数前才可以
2. 长度不确定时使用,MOV WORD PTR [BX], 1234
3. 有变量且长度不一致,MOV AX, WORD PTR BUF

  • 基本指令集
1. MOV
格式:MOV  目标操作数, 源操作数立即数不能做目标操作数
不可同时操作内存数
不可同时操作段寄存器
不允许将立即数传入段寄存器2. LEA 偏移地址传送指令
格式:LEA  目标操作数, 源操作数MOV  BX, OFFSET BUF
LEA  BX, BUF
上两句等价目标操作数要为16/32位寄存器,不影响6个标志位3. XCHG
格式:XCHG  目标操作数, 源操作数
将目标操作数和源操作数数据交换不能同时为内存数,段寄存器,立即数4. 堆栈操作
进出堆栈 的数据长度必须为字或双字
4.1 PUSH
格式:PUSH  操作数
将源操作数压入栈中,16位时 (sp)-2 -> (sp)
4.2 POP
格式:POP   操作数
将栈顶元素弹出,(sp)+ 2 ->   (sp)
4.3 PUSHA/POPA
全部压入栈/弹出栈5.加减法
5.1 加法
5.1.1 ADD
格式:ADD  目标操作数, 源操作数
源操作数 + 目标操作数 -> 目标操作数
两数等长,且不可同为内存数,段寄存器
5.1.2 ADC
格式:ADC  目标操作数, 源操作数
(CF)+ 目标操作数 + 源操作数
5.2 减法
5.2.1 SUB
格式:SUB  目标操作数, 源操作数
目标操作数 - 源操作数 -> 目标操作数
5.2.2 SBB
格式:SBB  目标操作数, 源操作数
目标操作数 - 源操作数 - (CF) -> 目标操作数
6 CMP
格式:CMP  目标操作数,源操作数
只改变6个标志位,不保存运算结果
目标操作数不可为立即数
7 自增自减
7.1 INC
格式:INC 目标操作数
目标操作数自增1
7.2 DEC
格式:DEC 目标操作数
目标操作数自减1
8 NEG
格式:NEG 目标操作数
将目标操作数求补后(即0-目标操作数)的结果(补码的形式)送入目标操作数
9 逻辑运算
9.1 AND(与)
格式:AND  目标操作数,源操作数
将目标操作数与源操作数相与,送入目标操作数
常常用于指定位清零(置0)
9.2 OR(或)
格式:OR 目标操作数,源操作数
将源操作数与目标操作数相或,放入目标操作数
常用于指定位置1
9.3 NOT(非)
格式:NOT 目标操作数
将目标操作数按位取反,送回目标操作数中
9.4 XOR(异或)
格式:XOR 目标操作数,源操作数
将目标操作数和源操作数异或,送入,目标操作数中
常用于指定位取反
10 TEST(测试指令)
格式:TEST 目标操作数,源操作数
将两数进行与运算,结果不保存,C、O置0,对A未定义,S、P、Z按结果设置
11 移位指令
11.1 开环移位指令 算术左移: SAL  操作数,移位次数算术右移: SAR  操作数,移位次数逻辑左移: SHL  操作数,移位次数逻辑右移: SHR  操作数,移位次数
11.2 闭环移位指令含进位的循环左移: RCL 操作数,移位次数含进位的循环右移: RCR 操作数,移位次数不含进位的循环左移:ROL 操作数,移位次数不含进位的循环右移:ROR 操作数,移位次数
12 循环转移指令
12.1 JMP(无条件转移)
格式:JMP  标号
12.2 LOOP
格式:LOOP  标号
例:MOV  CX, 7
A:  ...LOOP A
即循环7次
12.3 条件转移指令
JZ/JE                        Z为1
JNZ/JNE                      Z为0
JS                           S为1
JNS                          S为0
JO                           O为1
JNO                          O为0
JP                           P为1
JNP                          P为0
JC                           C为1
JNC                          C为0
12.4 无符号数大小比较(CMP X, Y)
JA                           X > Y
JNA                          X <= Y
JC                           X < Y
JNC                          X >= Y
12.5 有符号数大小比较(CMP X, Y)
JG                           X > Y
JGE                          X >= Y
JL                           X < Y
JLE                          X <= Y
13 子程序
子程序格式:
CALL [子程序名]
...
...
[子程序名] PROC
...
RET
ENDP

第四章

  • EXE源程序的编程结构

DATA SEGMENT USE16

......

(数据定义)

DATA ENDS

CODE SEGMENT USE16

BEG: ...

... ...

CODE ENDS

END BEG

  • 开发过程

a. 编辑程序,设该程序为 a.asm

b. 汇编该程序 masm a.asm(书上为:ml/c a.asm)产生 a.obj文件

c. 链接 link a.obj

d. 执行 a.exe

  • 部分dos/bios功能
  1. 01H

例子: MOV AH, 1

INT 21H

等待从键盘输入一个字符,同时将该字符显示在显示器上

入口参数:无

出口参数:AL = 按键 ASCLL值

2. 02H

例子:MOV DL, 'A'

MOV AH, 2

INT 21H

在屏幕上显示一个字符,光标右移一位

入口参数:DL = 显示字符的ASCLL

出口参数:无

注:会破坏AL寄存器

3. 09H

显示字符串

入口参数:DS:DX = 字符串首地屏幕上 ,字符串必须'$'结尾

出口参数:无

注:会破坏AL

4. 0AH

等待字符串输入,保存入缓冲区,同时在屏幕上显示

入口参数:DS: DX = 输入数据缓冲区首地址

以回车为标志,缓冲区首单元放置预计可接受字符个数,buf+1格放置实际字符数(不包含回车),符串由buf+2 开始存储。缓冲区不接受超长字符。

5. 0EH

bios:输出字符。

MOV AH 0EH

MOV AL ‘A’

INT 10H

汇编 cmp_汇编复习相关推荐

  1. # 汇编期末考试复习【选择易错题】

    汇编期末考试复习[选择易错题] (来自南大科院周权来题库--战无不胜的毛泽东思想) 1.用汇编语言编写的程序称为 ( ) A. 汇编程序 B. 源程序 C.可执行文件 D.目标程序 答案:B 注意区分 ...

  2. ARM汇编:汇编中proc、endp、ret、near、far指令用法

    ARM汇编:汇编中proc.endp.ret.near.far指令用法 子程序名 PROC NEAR ( 或 FAR ) -- ret 子程序名 ENDP (1)NEAR属性(段内近调用): 调用程序 ...

  3. 汇编:汇编的基本介绍

    文章目录 1.编程语言的发展 2.汇编语言的特点 3.汇编语言 VS 高级语言 4.汇编语言的用途 5.汇编语言的种类 1.编程语言的发展 机器语言 由0和1组成 汇编语言(Assembly Lang ...

  4. 1、Linux汇编——初识汇编

    2019独角兽企业重金招聘Python工程师标准>>> 前序 本来想Qt能继续坚持下来,可是绕了一大圈,最终还是选择回到学期伊始的Linux汇编编程上来.鉴于图书馆只能借到这本书,虽 ...

  5. GNU ARM汇编--(二)汇编编译链接与运行

    GNU的汇编器是GNU Tools的一部分,可以用来ARM的汇编语言源代码编译为二进制文件.关于GNU汇编器的介绍可以搜索<GNU Assembler Manual>.这里我们只是做一个简 ...

  6. 汇编 div_Solidity汇编开发简明教程

    在用Solidity开发以太坊智能合约时,使用汇编可以直接与EVM交互,降低 gas开销成本,更精细的控制智能合约的行为,因此值得Solidity开发者学习 并加以利用.本文是Solidity汇编开发 ...

  7. 【汇编】汇编学习入门-系列更新20180705

    版权 写在前面 小学期"硬件综合训练"需要用到"汇编",博主是在大二上学期学习的这门课,算下来半年没接触了,乘着这几天空闲梳理一下,一来找找当时学汇编的感觉以更 ...

  8. c语言gcc汇编文件,[汇编]gcc生成汇编.s文件 $ gcc -Og -S sum.c /$ gcc -Og -S -masm=intel sum.c 与 反汇编 objdump...

    目录 - C语言源码文件:sum.c - gcc 生成的汇编语言文件 sum.s x86-64 AT&T 语法格式 x86-64 Intel格式 - 反汇编 objdump 3.1 输出 AT ...

  9. 汇编jnl_汇编指令集

    1 X86和X87汇编指令大全(有注释)2 ---------- 一.数据传输指令 ---------------------------------------------------- 3 它们在 ...

最新文章

  1. Oracle11完全卸载方法
  2. java - 条件嵌套
  3. Django + react + 阿里云ecs 前后端分离部署上线
  4. react-native无法在react-native-gesture-handler中解析符号android.support.v4.util.Pools解决方案...
  5. 万向区块链与生态圈合作伙伴形成RISC-V国际区块链SIG
  6. VMware 安装LINUX系统(一)
  7. Express框架是什么
  8. 快递鸟电子面单对接文档(顺丰、ESM、圆通通用)
  9. 基于单片机的数字频率计设计
  10. morning 是字符串的内容变成good_小洁详解《R数据科学》--第十章 使用stringr处理字符串(上)...
  11. c语言编程后怎么做成软件,编程软件是用来编程的,那编程软件是怎么做出来的?...
  12. 计算机按键去抖动的方式,键盘去抖动原则和方法
  13. 我开发了一个机器人应用,让 HEXA 机器人可以追逐光——HEXA The Light Chaser
  14. 黑客软件大众化 【爆吧机的出现】杨丞琳贴吧遭网友攻陷
  15. c++ 构造函数 which is of non-class type奇葩问题
  16. KaTex的一个简单例子
  17. IP地址分类及子网掩码划分网段详解!!!
  18. switch case 穿透
  19. java什么是枚举_【JAVA】浅谈java枚举类
  20. A_A05_002 sscom33串口调试助手使用

热门文章

  1. Servlet和JSP之间的区别
  2. Java XMPP负载测试工具
  3. vue 动态组件组件复用_真正的动态声明性组件
  4. 使用Spring Security在Spring Boot中进行缓存
  5. glassfish 4配置_自己构建GlassFish 4.0快照
  6. cdh搭建hadoop集群_Hadoop宿醉:使用Apache Whirr启动hadoop集群CDH4
  7. 模拟Spring Security上下文进行单元测试
  8. 在ECR上推送Spring Boot Docker映像
  9. 将Infinispan版本映射为最低Java版本
  10. javaone_JavaOne 2012:向上,向上和向外:使用Akka扩展软件