8086汇编语言知识点整理
(进度:已完结)
前注
王爽汇编语言知识点整理,欢迎观看。
正文
一个字由两个字节组成,这两个字节分别称为高位字节和低位字节,一个字节由8个bit组成(也就是两个内存单元),可以存在8位寄存器中,8086cpu都是16位
CPU访问内存时由段寄存器提供段地址,8086CPU的四个段寄存器是:CS、DS、SS、ES
SS:SP始终指向栈顶;CS:IP指向执行的下一条代码;DS存储默认段地址;CX用来记录循环次数
载入程序时,CS保存了程序的长度(也是程序返回时的偏移地址),IP为0000h
用Debug的R命令查看、改变CPU寄存器的内容:
用Debug的D命令查看内存中的内容;
用Debug的E命令改写内存中的内容;
用Debug的U命令将内存中的机器指令翻译成汇编指令;
用Debug的T命令执行一条机器指令;
用Debug的A命令以汇编指令的格式在内存中写入一条机器指令。
用Debug的G命令执行指令到所指定的IP地址停止。
用Debug的P命令快速执行LOOP循环到结束。常用符号ASCII码值
: 58
[ 91
] 93PSP占用10H即256字节,虽然和程序区物理地址相连,但是段地址不同
使用p命令执行int 21
汇编源程序中,数据不能以字母开头,需要在前面加0
debug和编译器masm对于[data]有不同解释,debug将其作为一个内存单元,masm将其作为data处理。可以在masm中使用类似于ds:[data]显式地指定内存单元
mov指令当在寄存器之间时,占两个字节;当在寄存器和立即数之间时,占三个字节(其余指令不建议记,-u查看更好,太多了)
要知道assume是伪指令,是由编译器执行的,也是仅在源程序中存在的信息,CPU并不知道它们。我们不必深究assume的作用,只要知道需要用它将你定义的具有一定用途的段和相关的寄存器联系起来就可以了。
[bx+idata]一次移动两个字节
si和di是8086中和bx功能相近的寄存器
只有bx、si、di和bp四个寄存器可以用于内存单元寻址
bx、si、di和bp这四个寄存器可以单独出现,或者只能以四种组合出现:bx和si、bx和di、bp和si、bp和di
只要在[…]中使用寄存器bp,而指令中没有显性地给出段地址,段地址就默认在ss中。
用操作符Xptr指明内存单元的长度,X在汇编指令中可以为word或byte
push指令只进行字操作
div指令——除数:有8位和16位两种,在一个reg或内存单元中。被除数:默认放在AX或DX和AX中,如果除数为8位,被除数则为16位,默认在AX中存放(结果在al存放,余数在ah存放);如果除数为16位,被除数则为32位,在DX和AX中存放,DX存放高16位,AX存放低16位(结果在ax存放,余数在dx存放)。
dup 用来进行数据的重复
offset功能是取得标号的偏移地址(CSAPP讲过这个欸)
jmp word ptr 内存单元地址(段内转移)
jmp dword ptr 内存单元地址(段间转移)(CS)=(内存单元地址+2)(IP)=(内存单元地址)
我们从jcxz的功能中可以看出,“jcxz标号”的功能相当于:if((cx)==0)jmp short标号;
nop 空操作指令
ret指令用栈中的数据,修改IP的内容,从而实现近转移;retf指令用栈中的数据,修改CS和IP的内容,从而实现远转移(第一个pop的是IP)。
call+ret=子程序
mul指令:8位一个默认放在AL中,另一个放在reg或者内存字节单元中;16位一个默认放在AX中,另一个放在16位reg或者内存字单元中;结果8位在AX中,16位高位在DX中,低位在AX中
flag寄存器(使用蓝色标出)
ZF标志位如果指令执行之后结果为0那么zf=1反之zf=0;
PF标志位,它记录相关指令执行后,其结果中所有bit位的个数是否为偶数,偶数为1奇数为0;
SF标志位,记录指令执行以后,结果是否为负(默认进行的运算是有符号运算),负数为1,非负为0
CF标志位记录无符号运算结果的进位值/借位值
OF标志位记录有符号运算结果是否溢出
传送指令、inc指令、loop指令不影响标志位
or指令和and指令等逻辑操作对标志寄存器的影响是:OF和CF位被清零,SF、ZF、PF位的状态依计算结果而定,AF位的状态未定义。
adc带进位加法指令 sbb带借位减法指令 cmp比较指令
因为溢出导致了实际结果为负(sf值为正),那么真正的结果必然为正,反之亦然
movsb的功能是将ds:si指向的内存单元中的字节送入es:di中,然后根据标志寄存器df位的值,将si和di递增或递减。df=0增加,df=1减少。(传送的原始位置:ds:si;传送的目的位置:es:di;传送的长度:cx;传送的方向:df。)
movsw的功能是将ds:si指向的内存字单元中的字送入es:di中,然后根据标志寄存器df位的值,将si和di递增2或递减2。df=0增加,df=1减少。
上面两个指令常配合rep使用,rep表示根据cx的值重复当前命令。
pushf将标志寄存器的值压栈,popf从栈中弹出数据送入标志寄存器
中断向量表中一个表项存放一个中断向量,一个表项占用两个字。高地址存放段地址,低地址存放偏移地址。
可以使用offset a-offset b的方法计算代码段的长度
存储N号中断源对应的中断处理程序入口的偏移地址的内存单元的地址为:N*4
存储N号中断源对应的中断处理程序入口的段地址的内存单元的地址为:N*4+2
TF=1,执行单步中断程序
CPU可以直接读写以下3个地方的数据。
(1)CPU内部的寄存器;
(2)内存单元;
(3)端口。mov ax,ds:[8];
假设执行前(ds)=0
执行时与总线相关的操作如下所示:
①CPU通过地址线将地址信息8发出;
②CPU通过控制线发出内存读命令,选中存储器芯片,并通知它,将要从中读取数据:
③存储器将8号单元中的数据通过数据线送入CPU。in al,60h;
从60h号端口读入一个字节执行时与总线相关的操作如下:
①CPU通过地址线将地址信息60h发出;
②CPU通过控制线发出端口读命令,选中端口所在的芯片,并通知它,将要从中读取数据;
③端口所在的芯片将60h端口中的数据通过数据线送入CPU。访问8位端口用al,访问16位端口用ax
端口写入out,端口读出in
shl是逻辑左移指令,它的功能为:
(1)将一个寄存器或内存单元中的数据向左移位;
(2)将最后移出的一位写入CF中;
(3)最低位用0补充。shr是逻辑右移指令,它和shl所进行的操作刚好相反。
(1)将一个寄存器或内存单元中的数据向右移位;
(2)将最后移出的一位写入CF中;
(3)最高位用0补充。cli 禁止中断发生
sti 允许中断发生按下一个键时产生的扫描码称为通码,松开一个键产生的扫描码称为断码。断码=通码+80h。
键盘缓冲区高字节存放扫描码,低字节存放ASCII码
int 16h从键盘缓冲区读取一个键盘输入,并将其从缓冲区中删除
组合类型
与其它模块中的同名段在满足定位类型的前提
下具有的组合方式:
NONE: 不组合
PUBLIC: 依次连接(顺序由LINK程序确定)
COMMON: 覆盖连接
STACK: 堆栈段的依次连接
AT 表达式:段定义在表达式值为段基的节边界
MEMORY: 相应段在同名段的最高地址处。宏: 源程序中由汇编程序识别的具有独立功能的一段程序代码
1 宏命令伪指令由宏汇编程序处理,过程由CPU处理
2 宏指令:简化源程序,不能简化目标程序
子程序:产生相应的机器代码,每次调用用call,不重复出现机器代码,节省内存
3 执行时间
总结:
我用了大概一个月学完本书,如果将全部精力放在上面的话,大概2~3星期就可以学完。
毫无疑问,这是一本理论实践俱全的书籍,在DosBox上敲指令也是比较愉快的学习经历。对于在学校要接触到8086汇编的童鞋来说,我非常推荐这本书。
剩下的部分等我学完x86再来总结吧。
8086汇编语言知识点整理相关推荐
- 第二章:计算思维——知识点整理
第二章:计算思维--知识点整理 第二章:计算思维 知识梳理 高频考点 2.1 计算思维的概念与应用 2.1.1 计算思维的概念 2.1.2 计算思维的特征 2.1.3 计算思维的内涵 2.1.4 计算 ...
- 微机原理与接口技术知识点整理复习--纯手打
关注公众号,回复"微机必考",免费获取文件版资源,方便打印,方便随时阅读. 明天就要考试了,来一波知识点整理.都会了,期末考试你不过你来找我! 第一章 1.按微处理器的字节分类 4 ...
- C语言考研复试知识点整理
C语言考研复试知识点整理 1.由float x=3e-6,y=3e-6;不能得到x= =y的逻辑值为真. 解析:float类型的变量只能进行>或<运算,不能进行==运算 2.自增和自减运算 ...
- 【Android 面试基础知识点整理】
针对Android面试中常见的一些知识点整理,Max 仅仅是个搬运工.感谢本文中引用文章的各位作者,给大家分享了这么多优秀文章.对于当中的解析,是原作者个人见解,有错误和不准确的地方,也请大家积极指正 ...
- mysql 存储引擎 面试_搞定PHP面试 - MySQL基础知识点整理 - 存储引擎
MySQL基础知识点整理 - 存储引擎 0. 查看 MySQL 支持的存储引擎 可以在 mysql 客户端中,使用 show engines; 命令可以查看MySQL支持的引擎: mysql> ...
- mysql 全面知识点_Mysql知识点整理
1.存储引擎区别 MyISAM:不支持事物.仅支持表级锁.支持B+树索引 MEMORY:不支持事物.仅支持表级锁.支持B+树和HASH索引 InnoDB:支持事物.支持行级锁.支持B+树索引 2.锁机 ...
- 04741计算机网络原理知识点,04741计算机网络原理知识点整理.doc
04741计算机网络原理知识点整理 1.计算机网络大发展 计算机网络从20世纪70年代开始发展,他的演变可以概括为 面向终端的计算机网络.计算机-计算机网络.开放式标准化网络以及因特网广泛应用和高速网 ...
- python基础知识整理-python入门基础知识点整理-20171214
一.知识点整理 1.python2与python3的区别: (1)宏观比对 python2 源码不标准,较为混乱,并且重复的代码很多. python3 源码统一了标准,同时也去除了重复代码. (2)编 ...
- python基础知识整理-python爬虫基础知识点整理
首先爬虫是什么? 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动的抓取万维网信息的程序或者脚本. 根据我的经验,要学习Python爬虫 ...
最新文章
- 解读最新的 Xamarin 更新
- 二分+01分数规划+最大化平均值 Dropping tests POJ - 2976
- java比赛题目_【蓝桥杯2016第七届比赛题目】JAVA A组
- Linkedln技术高管Jay Kreps:Lambda架构剖析
- 企业信息化投入中咨询服务_全过程工程咨询服务核心价值是什么
- ssh 脚本 空格字符转换
- DotNetTextBox编辑器
- 圆环和环形是一样的吗_EXCEL圆环图与柱形图的组合
- 分析JQ作者的类实现过程
- 43. Know how to access names in templatized base classes.
- PLC模糊控制之模糊化
- 基于Flash的开源网页播放器使用方法(FlowPlayer/AdobePlayer)
- FreeBSD安装MySQL
- 阿里云主机迁移 配置域名解析 顶级域名配置子域名
- NPOI导出数据,设置格式,锁定单元格
- 要命!《程序员延寿指南》火爆 GitHub,日涨1500+星,跟着码农干多活 20 年
- 有所为有所不为,泽塔云异军突起的背后
- 2020年双十一销售额破亿的新品牌达16个与往年三倍之多
- JavaSE基础(79) BigInteger(能够存取比Long更大的整数,可以任意大小)
- PDF转换器注册码(支持所有版本)
热门文章
- onethink入门笔记(一)
- 大话Linux之 跟我走吧,现在就出发[0]引子
- S7-200SMART案例分析——运动控制编程三轴控制(一)
- CFA FRM CPA三证同持,你做到了吗?
- 干货 | Tabu Search求解作业车间调度问题(Job Shop Scheduling)-附Java代码
- 通信原理与MATLAB(九):DPSK的调制解调
- 全民K歌下载伴奏(tkm格式转化)
- maya安诺德渲染噪点降低_【渲染噪点】maya渲染有噪点原因及解决方案
- 仿android微信视频编辑,Android 仿微信短视频录制
- 在现有dataframe中凭空添加一层索引