
汇编
文章平均质量分 99
汇编汇编
骆言
萌新
展开
-
【笔记】【一文解决】编码 - ASCII、Unicode(utf-8、utf-16、utf-32):码点(码位)、码元、平面、编码方式、BOM、乱码(排查、解决)、正则匹配
这里我们可能会想到,那就取个最大的,假如 Unicode 中最大的字符用 4 字节就可以表示了,那么我们就将所有的字符都用 4 个字节来表示,不够的就往前面补 0。这样确实可以解决编码问题,但是却造成了空间的极大浪费,如果是一个英文文档,那文件大小就大出了 3 倍,这显然是无法接受的。UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码,是目前互联网上使用最广泛的一种 Unicode 编码方式,它的最大特点就是可变长。原创 2019-12-05 15:09:43 · 3370 阅读 · 1 评论 -
汇编 - 3.4 - [...]和(...)、符号idata
[…]的规定与(…)的规定[...] (汇编语言规定)表示要给内存单元(...) (为学习方便做出的约定)表示一个内存单元或寄存器中的内容描述对象描述方法ax中的内容为0010H(ax)=0010H2000:1000处的内容为0010H(21000H)=0010Hmov ax,[2] 的功能(ax)=((ds)*16+2)mov [2],ax 的功能((ds)*16+2)=(ax)add ax,2 的功能(ax)=(ax)+2原创 2020-08-30 23:25:26 · 930 阅读 · 0 评论 -
汇编 - 3.3 - 用Debug跟踪程序的执行
续上一篇编译出的可执行文件,分析其执行过程。用Debug装载程序程序被装入内存的什么地方?根据这些信息,能画出一下的图其中,一共256(100H)字节的程序段前缀(PSP),作为数据区这里的“数据区”属于操作系统的细节,这里不展开(焦点放在对汇编指令的了解上)。通过u观察代码段代码小结程序加载后,DS中存放着程序所在的内存区的段地址,这个内存区的偏移地址位0,则程序所在的内存区的地址位:DS:0。这个内存区的前256个字节存PSP,DOS用来和程序进行通信。从原创 2020-08-30 22:52:38 · 1358 阅读 · 0 评论 -
汇编 - 3.2 - 由源程序到程序运行
由写出程序到可执行文件的过程编辑源程序文本中直接编辑在DOS的Edit.com中编辑在vc++的环境中编辑EditPlus编译用masm编译masm编译过程中,打印的信息目标文件(*.OB)是我们对一个源程序进行编译要得到的最终结果。列表文件(*.LST)是编译器将源程序编译为目标文件的过程中产生的中间结果。交叉引用文件(*.CRF)同列表文件一样,是编译器将源程序编译为目标文件过程中产生的中间结果。对源程序的编译结束,编译器输出的最后两行告诉我们这原创 2020-08-30 20:01:50 · 323 阅读 · 0 评论 -
汇编 - 3.1 - 用汇编语言写的源程序
用汇编语言编写程序的工作过程汇编程序包含汇编指令和伪指令的文本。伪指令没有对应的机器码指令,最终不被CPU所执行。谁来执行伪指令呢?伪指令是由编译器来执行的指令,编译器根据伪指令来进行相关的编译工作。汇编指令对应由机器码的指令,可以被编译位机器指令,最终被CPU执行。程序返回程序结束运行后,将CPU的控制权交还给它得以运行的程序(常为DOS系统)。...原创 2020-08-30 18:22:40 · 1076 阅读 · 0 评论 -
汇编 - 3.0 - 导学
用汇编语言写的源程序由源程序到程序运行用Debug跟踪程序的执行[…] 和 (…)Loop指令Loop指令使用再例段前缀的使用(内存空间引用的处理)在代码段中使用数据在代码段中使用栈将数据、代码、栈放入不同段...原创 2020-08-27 23:46:18 · 193 阅读 · 0 评论 -
汇编 - 2.10 - 段的总结
综合示例:按要求设置段并执行代码对于“数据段”和“栈段”,我们是可以在程序中做设置的。1 设置:寄存器2 设置:数据3 设置:代码段结果综合示例:三个段地址可以一样滴!原创 2020-08-27 23:42:44 · 135 阅读 · 0 评论 -
汇编 - 2.9 - 栈及栈操作的实现
栈结构栈是一种只能在一段进行插入或删除操作的数据结构栈有两个基本操作:入栈和出栈入栈:将一个新的元素放到栈顶出栈:从栈顶取出一个元素栈顶的元素总是最后入栈,需要出栈时,又最先被从栈中取出。栈的操作规则:LIFO(Last In First Out,后进先出)CPU提供的栈机制现今的CPU中都有栈的设计8086CPU提供相关的指令,支持用栈的方式访问内存空间。基于8089CPU的编程,可以将一段内存当作栈来使用。例:设将10000H~1000FH内存当作栈来使用…问原创 2020-08-27 22:43:34 · 4597 阅读 · 2 评论 -
汇编 -2.8 - DS与数据段
对内存单元中数据的访问对于8086PC机,可以根据需要将一组内存单元定义为一个段。物理地址=段地址x16+偏移地址将一组长度为N(N<=64k)、地址连续、起始地址为16的倍数的内存单元当作专门存储数据的内存空间,从而定义了一个数据段。例:用 123B0H~123B9H 的空间来存放数据处理方法:DS:([address])用DS存放数据段的段地址用相关指令访问数据段中的具体单元,单元地址由[address]指出将123B0H~123BAH的内存单元定义为数据段原创 2020-08-27 21:44:35 · 1078 阅读 · 0 评论 -
汇编 -2.7 - 用DS和[address]实现字的传送
要解决的问题:CPU从内存单元中要读取数据要求CPU要读取一个内存单元的时候,必须先给出这个内存单元的地址;原理在8086CPU中,内存地址由段地址和偏移地址组成(段地址:偏移地址)解决方案:DS和[address]结合用DS寄存器存放要访问的数据的段地址偏移地址用[...]形式直接给出...原创 2020-08-26 07:36:55 · 449 阅读 · 0 评论 -
汇编 -2.6 - 内存中的字的存储
事实:对8086CPU,16位作为一个字问题16位的字存储在一个16位的寄存器中,如何存储?回答高8位放在高字节,低8位放低字节问题16位的字在内存中需要2个连续字节存储,怎么存放?回答低位字节存在低地址单元,高位字节存在高地址单元例:20000D(二进制)(对应的十六进制为:4E20H)存放0、1两个单元,18D(0012H)存放在2、3两个单元字单元字单元:由两个地址连续的内存单元组成,存放一个字型数据(16位)原理:在一个字单元中,低地址单元存放..原创 2020-08-25 22:30:17 · 1098 阅读 · 0 评论 -
汇编 -2.5 - jmp
修改CS、IP指令事实:执行何处的指令,取决于CS:IP应用:可以通过改变CS、IP中的内容,来控制CPU要执行的目标指令问题:如何改变CS、IP的值?方法1:Debug中的R命令可以改变寄存器的值 – rcs、ripDebug 是调试手段,并非程序方式!方法2:用指令修改mov cs:2000mov ip:00008086CPU不提供对CS和IP修改的指令!ip希望是cpu自增长机制改变转移指令jmp同时修改CS、IP的内容jmp段地址:偏移地址jmp 2A原创 2020-08-25 21:57:43 · 318 阅读 · 0 评论 -
汇编 - 2.4 - Debug的使用、【寄存器与代码段】
Debug是什么?Debug是DOS系统中的著名的调试程序,也可以运行在windows系统实模式下使用Debug程序,可以查看CPU各种寄存器的内容、内存的情况,并且在机器指令级别跟踪程序的运行Debug就是传奇Debug能做什么?用R命令查看、改变CPU寄存器的内容用D命令查看内存中的内容用E命令改变内存中的内容用U命令将内存中的机器指令翻译成汇编指令用A命令以汇编指令的格式在内存中写入机器指令用T命令执行机器指令…启动Debug挂载工作目录输入命令 debug原创 2020-08-24 23:33:11 · 680 阅读 · 0 评论 -
汇编 - 2.3 - 分段的方式管理内存
分段的方式管理内存8086CPU用 “(段地址x16)+偏移地址=物理地址” 的方式给出内存单元的物理地址。这里的 段地址 就是段的概念。值得注意: 内存并没有分段,段的划分来自于CPU同一段内存,多种分段方案两个事实段地址x16 必然是16的倍数,所以要给段的起始地址也一定是16的倍数偏移地址为16位,16位地址的寻址能力为64k,所以一个段的长度最大为64k用不同的段地址和偏移地址形成同一个物理地址段地址很重要!⇒ 用专门的寄存器存放段地址4个段寄存器:CS原创 2020-08-24 23:05:54 · 289 阅读 · 0 评论 -
汇编 - 2.2 - 确定内存的物理地址
物理地址cpu访问内存单元时要给出内存单元的地址。所有的内存单元构成的存储空间是一个一维的线性的空间每个内存单元在这个空间中都有唯一的地址,这个唯一的地址称为物理地址。事实8086有20位地址总线,可传送20位地址,寻址能力为1M。8086是16位结构的cpu运算器一次最多可以处理16位的数据,寄存器的最大宽度为16位。在8086内部处理的、传输、暂存的地址也是16位,寻址能力也只有64KB8086cpu给出物理地址的方法8086cpu的解决方法用两个16位地址段地原创 2020-08-21 22:25:31 · 962 阅读 · 0 评论 -
汇编 - 2.1 - CPU的组成(寄存器、mov和add)
寄存器寄存器是CPU内部的信息存储单元8086CPU有14个寄存器:共性8086CPU所有的寄存器都是16位的,可以存放两个字节。通用寄存器 – AX为例最大值?兼容性?两个8位形成16位“字”在存储器中的存储mov和add指令...原创 2020-08-12 20:59:43 · 448 阅读 · 0 评论 -
汇编 - 1.3 - 学习笔记 - 汇编语言实践环境搭建
选择8086的理由简单达成目标理解计算机底层工作原理作为继续拓展的基础 ⇒ 80x86汇编、Linux汇编、ARM汇编原创 2020-06-21 23:45:11 · 322 阅读 · 0 评论 -
汇编 - 1.2 - 学习笔记 - CPU对存储器的读写、内存地址空间
CPU对存储器的读写CPU 要进行数据的读写,必须和外部器件进行三类信息的交互:存储单元的地址(地址信息)器件的选择,读或写命令(控制信息)读或写的数据(数据信息)原创 2020-06-21 23:18:51 · 671 阅读 · 0 评论 -
汇编 -1.1 - 学习笔记 - 计算机组成、总线、【地址总线,字长,内存容量,寻址范围 之间的计算】
计算机组成计算机拆开主体主板上有CPU总线(地址总线、数据总线、控制总线)内存(条)扩展槽(接外部设备)抽象:逻辑图(图片来源:8086汇编 CPU 寄存结构)CPU(左):是计算机的核心部件,它控制整个计算机的运作并进行运算。想让一个CPU工作,就必须向它提供指令和数据。存储器(右):指令和数据在存储器(内存)中存放。指令和数据计算机中的数据和指令,存储在内存或磁盘上数据和指令都是二进制信息上面谈到的二进制信息可以是数据,可以是指令,关键是cpu怎么原创 2020-06-21 22:58:25 · 1055 阅读 · 0 评论 -
汇编 - 1 - 学习笔记 - 绪论
学习目的自击计算机系统的核心学什么定位:理解硬件结构,掌握指令集,理解程序的运行过程内容:8088/8086指令集与汇编语言程序设计原创 2020-06-21 22:32:56 · 271 阅读 · 0 评论 -
汇编 - 0 - 学习笔记 - 目录
汇编语言程序设计课程内容教材:王爽 汇编语言(第三版)绪论计算机组成内存的读写与地址空间汇编语言实践环境搭建访问寄存器和内存汇编语言程序内存寻址方式流程转移与子程序中断及其应用高级汇编语言技术计算机系统逻辑上的结构图(如今很多都集成进了处理器)装载程序执行程序、输出 HelloWorld主存(main memory)存储单元的地址和内容存储以字节(8bit)为单位存储信息每个字节单元有一个地址,从0编号,顺序加1地址用二进制表示(无符号整数,写成原创 2020-06-21 22:27:13 · 211 阅读 · 0 评论