80x86汇编—80x86架构

本文详细解释了计算机如何通过8086架构执行汇编指令,涉及存储器的逻辑地址到物理地址映射、数据寄存器和指针寄存器的作用,以及堆栈、标志寄存器和中断的工作原理。阅读者无需计算机组成原理背景,但建议对基本概念有了解。

汇编入门简单,深入难
使用8086架构进行学习,本章节如果没有学过计算机组成原理将可能有点难以理解,由于我学过了,所以记笔记的时候我会加上计组的知识来解释,看不懂直接跳过解释即可。

计算机如何工作

在这里插入图片描述
简单来说就是我们的应用或者使用高级语言编程最终都会变成一条条的由01组成的计算机指令,那CPU要执行指令就要先使用总线系统控制或者说操控某几根线导通一条路出来,让我们要取的指令有一条路可以走到CPU中,这就是去存储器中拿数据的一个大概过程。
希望与外部设备进行交互或者通讯,我们计算机需要的是一个接口,接口连接上外部设备,并且与该计算机设计的接口规范一致就能够接上,我们使用汇编的指令中就是通过一种监听方式监听接口,在汇编中叫做 端口,但是这个端口需要注意和web中的端口进行区别。
文言一心对两种端口的解释:"端口"是指网络通信中的端口号,而在汇编语言中,"端口"是指硬件接口中的端口地址。

可能会产生的疑惑:
总线系统是什么?
首先总线这一个概念是在计组中详细介绍的,在汇编中只需要知道汇编的指令具体要实现对应的操作都是总线控制比如Lmov ax , 7 它就知道控制将7送进ax寄存器中。

还有一个要注意的就是:不用纠结于我们的汇编能不能或者到底怎样处理指令的,我解释一下,但是可以不看,这里用作我自己复习笔记

首先我们的CPU控制总线会根据节拍和阶段发出取指信号,PC程序计数器拿出指令的地址,然后到存储器中取出指令,给到IR指令寄存器,然后将指令送进CPU,CPU里面又分为硬布线或者微程序两种设计,不管哪一种,最后CPU会发出一个控制信号,这个信号能够完成对应的取过来的那一条指令的所有微操作,比如一条指令可能mov ax, 7的同时我们PC程序计数器还会指向下一条指令,所以我们需要知道这个信号能够完成这条指令即可,如此循环…
还有一个问题就是:不用担心或者说只是我自己担心而已,我以前一直觉着高级语言怎么能够让CPU执行这么复杂的东西,我连有的代码都看不懂!?
当然这个担心也是多余的,反过来推,CPU只执行01组合的数据指令,那我们在这之前可能是对应我们的汇编语言,汇编语言在转机器码的时候(机器码就是01组合的数据指令),这会有一个叫做汇编器的东西将其转换成机器码,OK截止到汇编,继续逆向推,继续往上就是高级语言了,C语言,那C语言如何转汇编,这就很简单了,那就是使用我们的编译器,(编译器里面怎么转就不深究了),那这就全部都解释清楚了,既然C语言能够转汇编,汇编转机器码,最后给到CPU,所以CPU根本不知道你在干嘛,只要给到正确的指令给他执行即可。同时这个也解释了我们计算机生态圈如此强大的由来,我们的底层可能就很少很少的指令,但是我们一步一步往上也就是说机器码可以编程编出汇编语言,那我们汇编就可以做程序,再用汇编编了一个C语言,那我们就可以用C语言写更牛b的程序,慢慢的我们windows就出现了(狗头保命)。

第1章 预备知识 1.1 机器语言与汇编语言 1.1.1 机器语言 1.1.2 汇编语言 1.1.3 书中使用符号的说明 1.2 Intel系列机简介 1.2.1 Intel 80X86微处理器简介 1.2.2 Intel 80X86微处理器结构 1.2.3 80X86的3种工作方式 1.3 主存储器和物理地址的形成 1.3.1 主存储器 1.3.2 堆栈 1.3.3 物理地址的形成 1.4 数据在计算机内的表示形式 1.4.1 数值数据在计算机内的表示形式 1.4.2 BCD码 1.4.3 字符数据在机内的表示形式 1.5 标志寄存器 1.5.1 标志位 1.5.2 标志寄存器操作指令 1.6 汇编源程序举例 第2章 寻址方式 2.1 寄存器寻址 2.2 寄存器间接寻址 2.3 变址寻址 2.4 基址加变址寻址 2.5 立即寻址 2.6 直接寻址 2.7 寻址方式的有关问题 2.8 寻址方式综合举例 第3章 宏汇编语言 3.1 宏汇编语言中的表达式 3.1.1 常量与数值表达式 3.1.2 变量、标号与地址表达式 3.2 常用的机器指令语句 3.2.1 数据传送指令 3.2.2 算术运算指令 3.2.3 位操作指令 3.3 伪指令语句 3.3.1 处理器选择伪指令 3.3.2 数据定义伪指令 3.3.3 符号定义伪指令 3.3.4 段定义伪指令 3.3.5 源程序结束伪指令 3.4 常用的DOS系统功能调用 3.4.1 概述 3.4.2 常用的输入/输出系统功能调用 3.5 MASM的功能 3.5.1 MASM的功能 3.5.2 汇编过程 3.5.3 汇编列表文件 3.5.4 符号交叉列表文件 第4章 程序设计的基本方法 4.1 概述 4.2 顺序程序设计 4.3 分支程序设计 4.3.1 转移指令 4.3.2 分支程序设计举例 4.4 循环程序设计 4.4.1 循环程序的结构和控制方法 4.4.2 单重循环程序设计 4.4.3 多重循环程序设计 4.5 子程序设计 4.5.1 子程序的概念 4.5.2 子程序的定义 4.5.3 子程序的调用与返回 4.5.4 子程序调用现场的保护方法 4.5.5 主程序与子程序之间传递参数的方式 4.5.6 子程序及其调用举例 4.5.7 子程序的嵌套 4.6 程序设计中的注意事项 第5章 程序设计的其他方法和技术 5.1 字符串操作 5.1.1 串操作指令简介 5.1.2 串操作指令 5.2 宏功能程序设计 5.2.1 宏定义 5.2.2 宏调用 5.2.3 宏定义与宏调用中的参数 5.2.4 重复汇编伪指令 5.2.5 条件汇编伪指令 5.2.6 宏库的使用 5.2.7 宏指令与子程序的比较 5.3 模块化程序设计 5.3.1 组合方式 5.3.2 通信方式 5.3.3 连接程序(LINK)的功能 5.3.4 地址分配文件举例 5.4 源程序综合举例 5.4.1 模块程序设计中的注意事项 5.4.2 模块程序设计举例 第6章 输入/输出和WIN32编程 6.1 输入/输出指令和数据的传送方式 6.1.1 输入/输出指令 6.1.2 数据的传送方式 6.2 中断与异常 6.2.1 中断的概念 6.2.2 中断矢量表 6.2.3 软中断及有关的中断指令 6.2.4 中断处理程序的设计 6.3 浮点运算 6.3.1 浮点数据格式 6.3.2 FPU中的寄存器 6.3.3 浮点指令与程序设计 6.4 WIN32编程 6.4.1 WIN32编程基础 6.4.2 WIN32程序的结构 6.4.3 Windows API函数简介 6.4.4 编程实例 第7章 上机操作 7.1 在DOS环境下运行汇编源程序的方法 7.1.1 在DOS环境下运行汇编源程序的必备软件 7.1.2 DOS环境下运行汇编源程序的流程 7.1.3 DOS环境下运行汇编源程序的命令(MASM 6.0及以下版本) 7.2 多模块程序的运行及子程序库的使用 7.2.1 多模块程序的运行 7.2.2 子程序库的使用 7.3 在Windows环境下运行汇编源程序的方法 7.3.1 在Windows环境下运行32位汇编源程序的必备软件 7.3.2 在Windows环境下运行汇编源程序的特点 7.3.3 在Windows环境下32位汇编源程序的运行命令 7.4 调试程序Turbo Debugger的使用 7.4.1 TD的启动和退出 7.4.2 利用TD调试汇编语言程序 7.4.3 调试举例 附录 附录Ⅰ ASCII码字符表 附录Ⅱ 80X86指令系统简表 附录Ⅲ 伪指令表 附录Ⅳ DOS的软中断与系统功能调用 附录Ⅴ 常用BIOS子程序的功能及其调用参数 附录Ⅵ 汇编连接程序错误信息
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

竹等寒

谢过道友支持,在下就却之不恭了

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值