Solidity汇编开发中的动态数组使用
我们始终建议在开发Solidity智能合约时尽量不要使用汇编。但在少数情况下可能并没有其他选择,因此还是需要学习一些Solidity汇编开发的知识。在这个教程中,我们将学习如何在Solidity汇编开发中使用动态字节数组。用自己熟悉的语言学习 以太坊DApp开发 :Java | Php | Python | .Net / C# | Golang | Node.JS | Flutter / Dar....
【汇编语言/底层开发】2、CPU的寄存器
寄存器是CPU中用于高速存取暂存数据的存储部件。通过改变寄存器中的数据,可以对CPU的行为进行控制。对于8086CPU,内部共有14个寄存器,位宽均为16位,分别是AX, BX, CX, DX, SI, DI, SP, BP, IP, CS, SS, DS, ES, PSW。不同的寄存器所起到的作用不同。 1、通用寄存器 通用寄存器指的是AX, BX, C...
【汇编语言/底层开发】1、CPU的总线与存储器
1. 总线 CPU对存储器的读写操作是通过链接CPU同其他芯片的导线完成的,这样的导线即称作总线。根据传输的信息的不同,总线在逻辑上分为地址总线、控制总线和数据总线3大类。 (1)地址总线: CPU通过地址总线指定存储器单元,地址总线上能传递多少不同信息,CPU就可以对多少个存储单元进行寻址。如果一个CPU有N根地址线,则其地址总线宽度为N,寻址能力为2^N个内存单元。 (2)数据总线: 数据总....
【汇编语言/底层开发】3、通过寄存器进行内存访问
上篇叙述了8086CPU的通用寄存器和代码寄存器的一些东西。仅仅这些是远远不够的,显而易见的一个原因是,如果CPU只是对自己内部的寄存器进行操作,不能同外部数据进行交互,那么将无法完成任何工作。 数据段寄存器DS: 8086CPU中的DS寄存器专门用来存放准备访问的数据的段地址。[n]则表示一个偏移地址,这个偏移地址同DS中表示的段地址一起确定最终要访问的内存地址。 以下汇编语句表示从10000....
【汇编语言/底层开发】6、程序中包含多个segment
众所周知的是,我们所开发的应用程序需依赖于操作系统运行,因此应用程序所使用的内存空间必须是安全的,不能与操作系统和其他应用程序相重合。因此,应用程序所需要的空间应当通过操作系统申请。对于我们使用汇编语言开发的程序而言,可以通过在源程序中定义段来获取内存空间。 1、在代码段中定义数据 在编写汇编程序时,可以直接在代码段中对数据进行定义。使用dw可以定义若干个字型数据,每个数据占据两个字节。但是由此....
【汇编语言/底层开发】5、[BX]和loop指令
1、[bx] 在之前编写的汇编代码中,我们经常使用到[0]、[1]等标志,方括号中的数字表示某个偏移地址,该地址同段地址一起表示某个内存的位置。但是,在实际应用中存在一个问题,masm等编译器实际上不支持[n]这样的写法,在代码中的[1]、[2]实际上会被处理成1、2等数字型常量,而不是我们希望的偏移地址。 为了解决这个问题,汇编语言中定义了[bx]的写法。bx中存放的数据被当做是一个偏移地址,....
【汇编语言/底层开发】4、使用masm编译、链接汇编源文件
0、准备工作: 由于现在我们的操作系统通常都是win7或者win8,所以要运行masm需要做一些准备工作。这里只简单描述一下过程,详细的请搜索这篇文章《Win7(64位)下使用MASM和DEBUG方法》。 首先创建一个目录,这里假设为e:\asm,并且这个目录里要包含下图中的几个文件: 安装dosbox,执行:mount c: e:asm。完成后,切换到C:目录,即到达我们建立的这个e:\as.....
【汇编语言/底层开发】10、CALL和RET指令
CALL和RET指令常常用来实现子程序的设计。这两个指令同jmp、loop、jcxz等指令同属于转移指令。 1、ret和retf 转移指令的主要功能就是修改CS和IP或者只修改IP的内容。其中ret利用栈中的数据修改IP的内容,从而实现近转移;而retf则通过使用栈中的数据同时修改CS和IP的值,实现远转移。 ret指令的作用相当于: pop IP retf指令的作用相当于: pop IP ...
【汇编语言/底层开发】9、转移指令的原理
可以修改IP或者同时修改CS和IP的指令统称为转移指令。转移指令控制CPU执行内存中某处的代码,其作用相当于C语言中的GOTO。在C语言中并不鼓励使用goto语句,但是在汇编语言中由于没有复杂的流程控制运算符,使用转移指令称为必然。在8086中,转移指令可分为以下几类:(1)无条件转移指令;(2)条件转移指令;(3)循环指令;(4)过程;(5)中断。 1、操作符Offset; 操作符offset....
【汇编语言/底层开发】8、数据处理的两个基本问题
标题中所指的两个基本问题是:(1)处理的数据在什么地方?(2)要处理的数据有多长?要使得计算机正常工作,这两个问题必须给予说明,否则无法工作。 1、bx, si, di, bp 这四个寄存器用于内存寻址的规则有: (1)在8086中只有这四个寄存器可以用于[]中进行内存单元寻址。也就是说,指令: mov ax, [bx]是正确的,而mov ax, [cx]是错误的。 (2)在[]寻址中,这四个寄....
本页面内关键词为智能算法引擎基于机器学习所生成,如有任何问题,可在页面下方点击"联系我们"与我们沟通。