汇编 cmp_汇编复习

第一章

  • 计算机组成

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

↑↑ 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可分为高位,低位两个八位寄存器使用

如:

b366fc3403122d50ef43307ab23da558.png
  • 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

  • 开发过程

17e4ab3bbb8e90d723bae2bf04af1ade.png

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/336184.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

junit5和junit4_JUnit 5 –设置

junit5和junit42015年11月&#xff0c; JUnit Lambda团队展示了他们的原型 。 此后&#xff0c;该项目更名为JUnit 5&#xff0c;并于2016年2月发布了Alpha版本。我们将在一系列简短文章中进行探讨&#xff1a; 建立 基本 建筑 条件 注射 … 本节讨论JUnit 5的设置&…

markdown 生成目录_github上如何为markdown文件生成目录

写在前面熟悉markdown都知道可以使用[TOC]自动生成markdown文件的标题目录&#xff0c;比如在typora&#xff0c;vscode(需要插件)等本地编辑器中&#xff0c;或者在CSDN等网页编辑器中&#xff0c;但是github却不支持[TOC]标签&#xff0c;至于为什么不支持感兴趣的可以深入搜…

【WebRTC---进阶篇】(五)mediasoup的信令系统

mediasoup demo分析 app 客户端部分 broadcasters 推拉流部分 server 服务端部分 config.js 相当于一个配置文件&#xff0c;获取一些基本配置信息。获取的信息来交给server.js。 server.js 先从config.js获取信息&#xff0c;然后启动HTTPS webSocket服务等&#xff0c;…

axure html尺寸,axure怎么确定尺寸

回答&#xff1a;您好如做的是室内设计的话&#xff0c;那么来说可能会些参数提供给您的(例如长宽高)如果没有参数的话&#xff0c;只要把比例做好就可以了。只要比例做好了&#xff0c;东西看起来就自然像。至于教程的话&#xff0c;一般录制教程前都会有做好准备的&#xff0…

exe打包工具哪个最好_为你的 Python 程序写个启动工具箱

到目前为止&#xff0c;公众号已经介绍了不少图形界面的软件&#xff0c;比如猜数游戏、PDF阅读器、贪吃蛇游戏、天气查询软件、PDF 阅读器等。为了方便他人使用&#xff0c;我们常把图形界面打包成 exe 文件。但是如果我们只是为了自己使用方便的话&#xff0c;我们有必要把程…

【WebRTC---进阶篇】(六)SELECT网络模型

select函数原型 int WSAAPI select(_In_ int nfds,_Inout_opt_ fd_set FAR * readfds,_Inout_opt_ fd_set FAR * writefds,_Inout_opt_ fd_set FAR * exceptfds,_In_opt_ const struct timeval FAR * timeout); 函数功能:监视多个文件描述符的状态变化,在IO中负责IO的第一步…

计算机管理没有打印机列队,在Windows清除打印队列如果打印机被卡住,也没有打印输出...

我相信自己已经勾起回忆一拉似曾相识 &#xff0c;右侧的主题&#xff1f; 我们每个人&#xff0c;在一段时间或其他&#xff0c;都在打印过程中面临的问题&#xff0c;特别是给打印命令&#xff0c;并打印输出不休后等待。 无论是在家里还是办公室里&#xff0c;那就是我们所有…

gatling 使用_使用Gatling + Gradle + Jenkins Pipeline为您的JAX-RS(和JavaEE)应用程序进行连续压力测试...

gatling 使用在这篇文章中&#xff0c;我将解释如何使用Gatling项目为您的JAX-RS Java EE端点编写压力测试&#xff0c;以及如何将它们与Gradle和Jenkins Pipeline集成&#xff0c;因此&#xff0c;除了进行简单的压力测试外&#xff0c;您还可以使用以下方法&#xff1a; 连续…

java comparator_【面试题】Java必考面试题全集(15)

Java基础面试题(15)1&#xff1a;Comparator 与Comparable 有什么不同&#xff1f;2&#xff1a;Object中有哪些方法&#xff1f;3&#xff1a;说下jdk8中的一些新特性4&#xff1a;在64 位 JVM 中&#xff0c;int 的长度是多数&#xff1f;5&#xff1a;java每改一点都需要重新…

px是什么意思计算机二级,px是什么意思?照片中的px是什么的缩写?

px是什么意思?px(Pixel&#xff0c;像素)是可以在数字显示设备上显示和表示的数字图像或图形的最小单位。像素是数字图形中的基本逻辑单元。将像素组合在一起以在计算机显示器上形成完整的图像&#xff0c;视频&#xff0c;文本或任何可见的东西。像素也称为图像元素。若把影像…

java 交替_Java 8:使用交替接口公开的类型安全地图生成器

java 交替动态展示您的课程 当我还是Java新手时&#xff0c;我记得当时以为应该有一种方法可以删除或隐藏我不想公开的类中的方法。 就像用private方法或类似方法覆盖public方法一样&#xff08;哪种情况是不可能的&#xff0c;也不应该是不可能的&#xff09;。 显然&#xff…

ieee期刊_论文绘图神器来了:一行代码绘制不同期刊格式图表,哈佛博士后开源...

贾浩楠 发自 凹非寺量子位 报道 | 公众号 QbitAI「一篇论文投多个期刊&#xff0c;每个期刊对图表格式要求不一&#xff0c;同一组数据要用多种工具分别绘图。」不光是你&#xff0c;哈佛大学天文研究所的博士后&#xff0c;也不堪忍受论文重复绘图之苦。他的解决办法是&#x…

微课与计算机技术的论文,微课在高校计算机教学的运用论文

微课在高校计算机教学的运用论文摘要&#xff1a;现代信息社会不断发展进步&#xff0c;高校计算机教学也面临着复杂的形势&#xff0c;为全面提高计算机教学质量&#xff0c;提升学生的专业素质及综合能力&#xff0c;应当微课加以科学化应用。本文基于微课的内涵及应用意义出…

spring 启动加载数据_12个很棒的Spring数据教程来启动您的数据项目

spring 启动加载数据Spring Data的任务是为数据访问提供一个熟悉且一致的&#xff0c;基于Spring的编程模型&#xff0c;同时仍保留基础数据存储的特​​殊特征。 它使使用数据访问技术&#xff0c;关系和非关系数据库&#xff0c;map-reduce框架以及基于云的数据服务变得容易…

concurrenthashmap_ConcurrentHashMap是如何保证线程安全的

文章已同步发表于微信公众号JasonGaoH&#xff0c;ConcurrentHashMap是如何保证线程安全的之前分析过HashMap的一些实现细节&#xff0c;关于HashMap你需要知道的一些细节, 今天我们从源码角度来看看ConcurrentHashMap是如何实现线程安全的&#xff0c;其实网上这类文章分析特别…

【OpenGL从入门到精通(三)】第一个点的理论

OpenGL状态机 一&#xff0c;OpenGL是一个状态机matrix中包括&#xff1a; model view (模型矩阵) worldpos(世界坐标,也称为顶点坐标)通过mv(模型矩阵)转到cameru摄像机下&#xff08;根据右手坐标系&#xff0c;只有在Z的负方向才可以看得见&#xff09; projection …

js find的用法_React常用库Immutable.js常用API

JavaScript 中的对象一般是可变的(Mutable)&#xff0c;因为使用了引用赋值&#xff0c;新的对象简单的引用了原始对象&#xff0c;改变新的对象将影响到原始对象。如 foo{a: 1}; barfoo; bar.a2 你会发现此时 foo.a 也被改成了 2。虽然这样做可以节约内存&#xff0c;但当应用…

教学案例 计算机,计算机教学案例

海量优秀的免费计算机教学案例范文供您参考与下载&#xff0c;关于计算机教学案例的免费论文范文参考资料是由2016年最新的相关论文题目按照标准论文格式模板写作的,适合不知道怎么写计算机教学案例的大学毕业生,对相关的本科论文和硕士毕业论文及职称论文发表写作有参考价值&a…

java 开发:md5_Java社区调查结果:74%的开发人员希望减少详细程度

java 开发:md5一个新的JDK增强建议&#xff08;JEP&#xff09;在Java社区中风起云涌&#xff1a;JEP286。该建议建议在Java的未来版本中引入局部变量类型推断&#xff0c;以简化Java应用程序的编写。 在下面的文章中&#xff0c;我们将解释它的含义以及它将如何影响您的代码。…

python获取当前目录_又有几个Python小技巧分享

今天这篇文章为大家带来几个Python使用的小技巧&#xff1a;快速生成依赖文件文件路径处理通过set将对象去重单元测试unitest捕获异常快速生成依赖文件Python通过requirements.txt来管理项目所依赖的库&#xff0c;通过pip install -r requirements.txt命令可以直接安装项目所需…