举例说明在汇编语言中,"[]"的用法

STM8汇编语言调试虚拟环境搭建及举例说明(附源码) CXSTM8、Raisonance以及IAR for STM8都是支持STM8很好的C编译器,但如果想学习了解STM8的汇编指令,最好还是采用ST自己的STM8汇编编译器ST Assembler Linker,尽管高级语言很好用,但有的场景还是离不开汇编语言,比如bootloader的开发,尽管用得不多,可能也就几行汇编代码,如果没太理解,总有种如鲠在喉,不解不快的感觉,尽管没有用汇编代码的必要,但看懂读懂有时候还真是有点必要的,而我们在初涉STM8汇编语言时,免不了想调试一下自己的查阅或看到例程,甚至测试 阅读详情
"[]"的用法在"常见问题"已经有所说明,引用如下:

1、push dword ptr [024c1100]   压栈024c1100值的双字
2、cmp eax,[ebp+14]            eax-ebp+14的有效值,不保留值,主要看标志位
3、cmp byte ptr [eax],46       字节型eax-46,看标志位
4、lea eax,[edx-02]            把edx-02的有效值(一个地址值)给eax
5、mov ecx,[edx+08]            edx+8值作为地址,此地址所指向的值给ecx

我再补充几例我遇到的情况,参考了一些资料,以及我个人的理解.
-------------------------------------------------------------------------------
mov指令中用到"[]"

1--mov [edi], eax ----把eax的值(dword)赋给位于内存地址edi处的值
2--mov [bp-02], dx ---把dx的值(word)赋给位于内存地址bp-02处的值
3--mov esi,[BP+14]  ---把位于内存地址BP+14的dword大小的值移入esi寄存器
4--mov eax, dword ptr [ebp-04]---把位于内存地址ebp-04的dword大小的值移入eax寄存器
5--mov eax, dword ptr[0000003Ah]--把位于内存地址3A的dword大小的值放入eax寄存器
6--mov cl, byte ptr [34h]--把位于内存地址34的byte大小的值放入cl寄存器
7--mov dx, word ptr [3Eh]--把位于内存地址3E的word大小的值放入dx寄存器
8--mov eax,[00403045h] --从内存地址403045读取一个32位的值
9--mov al, byte ptr [eax+ecx]--把位于内存地址eax+ecx的byte大小的值放入al寄存器

综括号"[]"用来从括号间的内存地址处取值,没有括号就只是这个值,寄存器和内存地址也可以.

10--mov cx,[eax]--把位于内存地址eax的word大小的值移入cx寄存器
在mov cx, [eax]中,处理器会先查看eax装有什么值(=内存地址),然后在那个内存地址中有什么值,并把这个word(16位,因为目标-cx-是个16位寄存器)移入cx。
-------------------------------------------------------------------------------
cmp指令中用到"[]"

1--cmp dword ptr [ebp-04], 00000007--把位于内存地址ebp-04的dword大小的值与00000007比较
2--cmp byte ptr [si], 00  --把位于内存地址si的byte大小的值与00比较

-------------------------------------------------------------------------------
lea指令中用到"[]"

1--lea di, [bp-22] ----把bp-22的有效值(=内存地址)给di
-------------------------------------------------------------------------------
test指令中用到"[]"

1--test byte ptr [bx+08FD]
--将位于内存地址bx+08FD处的byte大小的值逻辑与,判断运算结果是否为00

理解上难免有偏差,请指正!
【汇编语言】8086汇编字符串定义为何使用DB?其他数据类型不可以吗?(20200515复盘) 0 前言 本文使用emu8086软件进行8086汇编语言编辑和运行。 顺便说一句,汇编语言源程序中的数字,默认是十进制,因此使用十六进制的数字的时候,必须有h或H后缀,本文也都遵循这样的原则。 至于为什么默认十进制,我只能说,编译器默认你是个人(不要笑!事实如此,如果默认你是机器,那么数字就默认十六进制了)。 1 8086汇编语言中的字符串 通常情况下,汇编语言中的字符串,都会被赋予DB(字节)数据类型,那么,为什么这样做? 不能使用DW数据类型吗? 当然可以,但是不建议使用。 1.1 字符串的定义与使用 阅读详情

相关推荐

【汇编语言】转移指令的原理(二) —— 一步到位:jmp 指令的四种跳转方式

本文主要讲解了jmp指令的四种跳转方式,比如转移地址在内存中的转移,依据位移的转移等等

2301_80191662的博客 1675

汇编中寄存器加[]的意思

一般说来,加方括号 [ ] 表示一种间接的取操作数方式,有点类似于C语言中的指针概念.第一条指令 ADD AL ,[SI] 中,[SI] 表示寄存器间接寻址.也就是说,与AL中内容相加的加数,不是SI寄存器的内容,而是以SI的内容作为地址指针的内存操作数.假设SI的内容是1234H,这条加法指令,不是将1234H加到AL里(也加不了,数据类型不对),而是以1234H作为地址,从内存的数据段(DS所...

zzzyyyyyy66的博客 1万+

【汇编语言】标志寄存器(一) —— 标志寄存器中的标志位:ZF、PF、SF、CF、OF 一网打尽

本文主要介绍了8086CPU中flag寄存器中的一些标志位以及它们的功能。

2301_80191662的博客 5647

汇编中中括号的作用[]

在汇编中[]的作用不是单纯的c语言中指针类似,可以分为两种情况,对于变量来说[var]和var作用是一样的 但是对于寄存器来说就有区别了,[eax]是eax的地址(这里是c语言中的指针) 而不加中括号的eax就是c语言中的变量值了,理解有谬误之处望指正 .386 .model flat, stdcall option casemap :none include windows.in

spygg的专栏 2万+

企业老板管理者,如何监控员工的电脑屏幕?

老板监控员工电脑,需要知道员工开机后的上网行为来及时了解到员工工作情况,及时发现上班不良行为员工,及时淘汰低价值员工。 文章目录iMonitor EAM一、计算机系统日志二、具体功能介绍1.屏幕记录2.键盘记录总结 iMonitor EAM 怎么监控员工电脑,我们需要用到第三方软件,2021年最新版本软件-iMonitor EAM,软件分管理端和客户端,管理端在管理者电脑登录,客户端在员工电脑双击安装就可以,安装中不用任何设置的,客户端安装到员工电脑后也是隐藏的,不会有任何弹窗和警告信息,是无法发现和删

iMonitorSoft的博客 2180

零基础也能懂的Arduino ESP32离线安装包图文教程

手把手教你完成Arduino ESP32离线安装包的配置,无需联网也能快速搭建开发环境,适合初学者和网络受限用户,轻松实现arduino esp32离线安装包部署。

weixin_36213081的博客 2684

汇编语言-中括号-mov指令-cmp指令-lea指令

一个比较特别的指令是lea, 意思是"装入有效地址"(Load Effective Address), 它的操作数就是地址,所以lea eax,[edx-02],就是把 edx 中的值减去2再送入eax, 而不是把由[edx-02]指明的内存地址上的值放到eax. 其结果是[eax]和[ebx-02]都表示同一个地址。1、mov [edi], eax ----把eax的值(dword)赋给位于内存地址edi处的值。10、mov cx,[eax]–把位于内存地址eax的word大小的值移入cx寄存器。

插件开发 4783

UE4-(IK)实现人物脚贴合地面解决斜坡上脚无旋转无法贴合地面问题

在斜面上脚陷入模型中,需要设置旋转值对脚的骨骼进行一个旋转。 解决思路:在射线检测中可以获取到检测点的法线方向,根据法线方向来计算出脚应该向哪个方向进行适当的旋转,在斜坡上,人物脚需要旋转的轴为x轴和y轴以便来贴合地面,z轴方向的旋转是不需要进行修改的。 如图所示,我们需要求得水平面与斜坡的夹角用来得出人物在x轴上的脚旋转量,在蓝图中提供反正切函数,反正切 = 锐角的邻边/对边 所以 反正切值(脚x轴值(roll)) = 法线Y轴值/法线Z轴 值。 现在将上图的人物想象成面向屏幕,脚需...

Stone的博客 3317

汇编语言中的[...]和(...)

汇编语言入门

picktheshy的博客 767

告别手动连接!一键搞定Mumu模拟器与Android Studio的ADB配置

本文详细介绍了如何通过编写自动化脚本,一键完成Mumu模拟器与Android Studio的ADB连接配置。告别繁琐的手动命令输入,该脚本能智能检查环境、判断连接状态并自动处理端口转发,显著提升Android开发者的调试与测试效率。

yog99的博客 498

基于MySQL的京东用户行为分析

对京东用户行为的分析,利用AARRR模型进行分析。

SelenaSelena的博客 1912

汇编语言中"[]"的用法

内容:举例说明在汇编语言中,"[]"的用法 "[]"的用法在"常见问题"已经有所说明,引用如下: 1、push dword ptr [024c1100] 压栈024c1100值的双字 2、cmp eax,[ebp+14] eax-ebp+14的有效值,不保留值,主要看标志位 3、cmp byte ptr [eax],46 字节型eax-46,看标志位 4、lea eax,[edx-0

it技术学习 1924

基于扩展卡尔曼滤波(EKF)结合到达时间(TDOA)、到达频率(FDOA)实现多无人机无源定位,MATLAB代码

该程序实现了一种结合到达时间差(TDOA)和到达频率差(FDOA)技术的多无人机定位方法,利用扩展卡尔曼滤波(EKF)对单一目标进行定位。程序通过模拟多无人机的运动及其与目标的相对位置,估计目标的状态(位置和速度)。

985工科博士毕业,专攻定位、导航和滤波等算法研究。从业10年,主要使用MATLAB 1267

cmp 字节 汇编_汇编语言中"[]"的用法

"[]"的用法在"常见问题"已经有所说明,引用如下:1、push dword ptr [024c1100] 压栈024c1100值的双字2、cmp eax,[ebp+14] eax-ebp+14的有效值,不保留值,主要看标志位3、cmp byte ptr [eax],46 字节型eax-46,看标志位4、lea eax,[edx-02] 把edx-02的有效值(一个地址值)给eax5、mov ec...

weixin_39796238的博客 1990

高速PCB差分对布线仿真实战案例

差分对布线是高速PCB设计的关键环节,直接影响信号完整性与EMI性能。本文结合实际项目,详解等长控制、阻抗匹配、间距优化等核心技巧,并通过仿真工具验证眼图、串扰和时序裕量,助力工程师规避常见高速pcb设计陷阱。

weixin_29092787的博客 351

QT实现MQTT服务端(附完整源码)

QT实现MQTT服务端(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 1254

【汇编语言】标志寄存器(三) —— 条件跳转,精准决策:汇编语言的比较与转移

本文主要讲述了条件转移指令的相关用法,主要就是cmp与条件转移指令的配合使用。

2301_80191662的博客 2628

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

汇编语言中$的两种用法

汇编语言中$的两种用法$1.字符串终止2.地址计数器 $ 1.字符串终止 例如’i like myself$’,在上述字符串中对应于计算机语言中的\0,字符串的终止。 2.地址计数器 例如JNE +6,+6,+6,能引用地址计数器的值,每次引用会使地址计数器的值发生改变,地址计数器即当前指令的偏移地址。该指令的转向地址即JNE指令的首地址加6。 ...

qq_44081232的博客 1万+

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

【汇编语言】端口 —— 「从端口到时间:一文了解CMOS RAM与汇编指令的交汇」

本文主要介绍端口相关知识,含端口读写、CMOS RAM 芯片,及 shl/shr 指令与时间信息处理。

2301_80191662的博客 1413

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

汇编语言ADDC可以把C清零吗,常用汇编语言指令及解释

常用汇编语言指令及解释常见汇编语言指令解释:1.Rn 表示R0~R7中的一个2.#data 表示8位的数值 00H~FFH3.direct 表示8位的地址 00H~FFH4.#data1616位立即数5.@Ri 表示寄存器间接寻址 只能是R0或者R16.@DPTR 表示数据指针间接寻址,用于外部64k的RAM/ROM寻址7.bit 表示位地址8.$ 表示当前地址寄存器寻址 MOV A,R1 将R1...

weixin_36078245的博客 2416

【汇编语言】标志寄存器(二) —— 标志位驱动的计算:ADC、SBB 和 CMP 的巧妙应用

本文主要介绍一些与标志位有关的指令以及它们的运用,ADC指令,SBB指令,CMP指令。

2301_80191662的博客 2207
上一篇: 我的第一句__asm 语句[很简单]
下一篇: 高级语言反汇编程序的函数调用过程
普通网友
博客等级 码龄22年 1万+粉丝 3156原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值