汇编 cmp_汇编复习
第一章
- 计算机组成
五部分:(运算器、控制器)、存储器、输入/输出设备
↑↑ CPU ↑↑ ↑内存↑
三条总线:控制总线、地址总线、数据总线
- 不同进制及BCD码的转换
- 特殊ascll
‘0’~‘9’—— 30H ~ 39H
‘A’~‘F’—— 41H ~ 46H
回车 —— 0DH
换行 —— 0AH
- 溢出判断
- 运算器对有符号数和无符号数同等对待
- 进位保存在CF9(进位标志位)中
- 当参与运算的两数符号相同,结果符号却他们相异时,判断溢出
第二章
- 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
- 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
- 寻址方式
- 立即寻址
只能用于源操作数,不能用于目标操作数
常用于赋值
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功能
- 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.用汇编语言编写的程序称为 ( ) A. 汇编程序 B. 源程序 C.可执行文件 D.目标程序 答案:B 注意区分 ...
- ARM汇编:汇编中proc、endp、ret、near、far指令用法
ARM汇编:汇编中proc.endp.ret.near.far指令用法 子程序名 PROC NEAR ( 或 FAR ) -- ret 子程序名 ENDP (1)NEAR属性(段内近调用): 调用程序 ...
- 汇编:汇编的基本介绍
文章目录 1.编程语言的发展 2.汇编语言的特点 3.汇编语言 VS 高级语言 4.汇编语言的用途 5.汇编语言的种类 1.编程语言的发展 机器语言 由0和1组成 汇编语言(Assembly Lang ...
- 1、Linux汇编——初识汇编
2019独角兽企业重金招聘Python工程师标准>>> 前序 本来想Qt能继续坚持下来,可是绕了一大圈,最终还是选择回到学期伊始的Linux汇编编程上来.鉴于图书馆只能借到这本书,虽 ...
- GNU ARM汇编--(二)汇编编译链接与运行
GNU的汇编器是GNU Tools的一部分,可以用来ARM的汇编语言源代码编译为二进制文件.关于GNU汇编器的介绍可以搜索<GNU Assembler Manual>.这里我们只是做一个简 ...
- 汇编 div_Solidity汇编开发简明教程
在用Solidity开发以太坊智能合约时,使用汇编可以直接与EVM交互,降低 gas开销成本,更精细的控制智能合约的行为,因此值得Solidity开发者学习 并加以利用.本文是Solidity汇编开发 ...
- 【汇编】汇编学习入门-系列更新20180705
版权 写在前面 小学期"硬件综合训练"需要用到"汇编",博主是在大二上学期学习的这门课,算下来半年没接触了,乘着这几天空闲梳理一下,一来找找当时学汇编的感觉以更 ...
- 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 ...
- 汇编jnl_汇编指令集
1 X86和X87汇编指令大全(有注释)2 ---------- 一.数据传输指令 ---------------------------------------------------- 3 它们在 ...
最新文章
- Oracle11完全卸载方法
- java - 条件嵌套
- Django + react + 阿里云ecs 前后端分离部署上线
- react-native无法在react-native-gesture-handler中解析符号android.support.v4.util.Pools解决方案...
- 万向区块链与生态圈合作伙伴形成RISC-V国际区块链SIG
- VMware 安装LINUX系统(一)
- Express框架是什么
- 快递鸟电子面单对接文档(顺丰、ESM、圆通通用)
- 基于单片机的数字频率计设计
- morning 是字符串的内容变成good_小洁详解《R数据科学》--第十章 使用stringr处理字符串(上)...
- c语言编程后怎么做成软件,编程软件是用来编程的,那编程软件是怎么做出来的?...
- 计算机按键去抖动的方式,键盘去抖动原则和方法
- 我开发了一个机器人应用,让 HEXA 机器人可以追逐光——HEXA The Light Chaser
- 黑客软件大众化 【爆吧机的出现】杨丞琳贴吧遭网友攻陷
- c++ 构造函数 which is of non-class type奇葩问题
- KaTex的一个简单例子
- IP地址分类及子网掩码划分网段详解!!!
- switch case 穿透
- java什么是枚举_【JAVA】浅谈java枚举类
- A_A05_002 sscom33串口调试助手使用
热门文章
- Servlet和JSP之间的区别
- Java XMPP负载测试工具
- vue 动态组件组件复用_真正的动态声明性组件
- 使用Spring Security在Spring Boot中进行缓存
- glassfish 4配置_自己构建GlassFish 4.0快照
- cdh搭建hadoop集群_Hadoop宿醉:使用Apache Whirr启动hadoop集群CDH4
- 模拟Spring Security上下文进行单元测试
- 在ECR上推送Spring Boot Docker映像
- 将Infinispan版本映射为最低Java版本
- javaone_JavaOne 2012:向上,向上和向外:使用Akka扩展软件