汇编学习杂记(1~8章)

FM20S用户手册--Linux系统启动卡制作及系统固化 评估板出厂时,默认提供一张配套的Micro SD卡,此卡为可正常使用的Linux系统 启动卡。评估板断电,将Linux系统启动卡插入评估板Micro SD卡槽,根据评估底板丝印将 启动方式选择拨码开关拨为1010(1-4).此档位为Micro SD启动模式。使用Linux 系统启动卡启动系统时,将使用此目录的BOOTbn文件启动FSBL和U-Boot。Linux系统启动卡制作时,已将固化系统的脚本文件mkemmcboot.sh拷贝至Linux系 统启动卡文件系统的"/opt/tools/"目录下。 阅读详情

CPU寻址能力为
X = 13 这就是寻址宽度
寻址能力为2^13=8192byte=8KB
那么寻址范围就是0 --- 8191

一根数据线传送1位bit(0或1)
8根=1byte  16根=2byte  32根=4byte

8bit = 1byte
1024byte = 1kb
1024kb  =  1MB
1024MB  =  1GB
1024GB  =  1TB

8086CPU寻址问题
段地址 * 16 + 偏移地址 = 物理地址
段地址 * 16.这个的概念。相当于左移二进制四位。16是十进制数。段地址是十六进制数。进制转换一样后。等于 段地址 * 10H 。(16十进制转换为十六进制为10)

8086CPU段寄存器(不可直接赋值操作比如 MOV DS,1000H)
CS DS SS ES

CS用来存放指令的段地址
IP存放指令的偏移地址。
设CS内容为M,IP内容为N。寻址:M * 16 + N
8086机中。任意时刻,CPU将CS:IP指向的内容作为指令执行,而不是作为数据。
每次读取完一条指令后。IP=IP+所读取指令的长度,从而指向下一条指令.(切忌,切忌)

DS通常用来存放需要访问数据的段地址。
mov bx,1000H
mov ds,bx
mov al,[0] (通过参考操作的寄存器位数,判断内存中的读写单元是多少位,这里寄存器为8位及            1byte,那么就读取内存中一个单元的数据)
将10000H(1000:0)中的数据读到al中(mov ds,1000H 是非法指令.DS的值必须由通用寄存器或者[...]内存单元数据传入,并且不可做运算操作)

修改CS:IP的内容
jmp 2AE3:3  CS=2AE3H  IP=0003H  指向物理地址 2AE33H (只能在Debug中使用)
jmp 3:0B16  CS=0003H  IP=0B16H  指向物理地址 00B46H (只能在Debug中使用)
jmp 某一合法寄存器  功能为 用寄存器中的值修改IP
jmp ax  等于修改IP的值为AX的值

Debug初试
修改寄存器                     R
查看内存                       D
修改内存                       E
内存数据编译为机器码和汇编指令 U
执行CS:IP指向的指令            T
以汇编指令形式向内存写入       A
(CMD)c:/debug 程序名.exe 载入程序到内存.
int 21H 用P命令执行,至于为什么,现在还不知道.
G 0012 执行程序到当前代码段(段地址在CS中)的0012H处
P 指令自动重复 "标号:代码" 到 "LOOP 标号" 这一区域段的指令,直到(CX)=0 最后停在 "loop 标号" 的下一条指令

内存中字的存储,困惑我N久,终于理解了。
CPU中16位寄存器存储一个字。高8位放高位字节,低8位放低位字节。
而内存中存储时,内存单元是字节单元(一个单元存放一个字节,也是8bit),那么一个字就要用到两个连续的单元来存放,这个字的低位字节就存放在低地址单元中,顺之,高位字节存到高地址单元中。当我们用CE等内存读写工具时,显示的内存顺序为00 01 02……。所以当我们存放比如20000(4E20H)时。内存中16进制写入就是20  4E
我们称内存中的这个地址段为 字单元 既存放一个字型数据(16位)的内存单元,由两个地址连续的内存单元组成。高地址内存单元中存放字型数据的高位字节,低地址内存单元中存放字型数据的低位字节。

栈机制
PUSH 入栈指令
POP  出栈指令
入栈和出栈的操作单位为字.16bit 2byte 也就是两个内存单元
ss 寄存器存放栈顶的段地址     (不能直接赋值,需要寄存器或者内存单元中转赋值)
SP 寄存器存放栈顶的偏移地址   (可用MOV直接赋值,可进行运算操作)
任意时刻,SS:SP指向栈顶元素。
当PUSH入栈时,比如PUSH AX   CPU先执行SP=SP-2 再将AX入栈。
入栈时,栈顶从高地址向低地址方向增长。当栈空时。SP=栈顶最后一个字单元 + 2(指向栈底的下一个单元及栈底减一)
当POP 出栈时,比如POP  AX   CPU先将SS:SP指向的内存单元处数据送入AX 再执行SP=SP+2
当Debug的T命令在执行修改寄存器SS的指令时,下一条指令也紧接着被执行(备注)

伪指令 是用来告诉编译器,让其执行的.最终不由计算机执行.
源程序 是程序文件中的所有内容,包括伪指令
程序   且是单指最终由计算机执行.处理的指令或数据.就没有伪指令了.

伪指令
segment和ends 是一对成对使用的伪指令.功能是定义一个段.
段名 segament  <--- 开始  段名 也称为 标号 最终被编译.连接程序处理为一个段的段地址
段名 ends      <--- 结束
end 是一个汇编程序的结束标记.如果在它后面加上标号,那么这个标号就代表程序的入口,
如end start 这个标号就是程序的真正入口
assume 它假设某一段寄存器和程序中的某一个用segment……ends定义的段相关联.
assume cs: 段名 将段名于CS段寄存器相关联
mov ax,标号 含义就是将标号所指定的段的段地址送入AX

程序返回 将CPU的控制权交还给使得当前程序P2得与运行的P1程序
mov ax,4c00H
int 21H

shell(操作系统的外壳) 用户使用这个程序来操作计算机系统进行工作
程序加载情况 空闲内存区:SA:0
             PSP区     :SA:0 (占位256字节100H)(SA:00 ~ SA:FF)
             程序区    :SA+10H:0
程序载入内存后 初试状态中 CX存放的是程序的长度(字节byte)  DS 存放该内存区的段地址(SA) CS:IP指向程序入口(SA+10:0)

"()" 括号的意思现在定义为描述符,相当于指针的概念.如:(ax)表示AX中的内容.(20000H)表示内存20000H单元中的内容.
((DS)*16+(BX))表示 (段地址(DS) * 16 + 偏移地址(DX)) 这个地址所指向的内存单元的内容 (牢记,牢记)
约定符号 idata 表示常量 如: MOV AX,[idata] 表示 mov ax,[0] mov ax[1] 等等

[bx] 表示一个内存单元,BX的值为偏移地址,段地址在DS中
LOOP 标号  执行过程为,判断(CX寄存器) 第一步:(CX)=(CX)-1 第二步:(CX)不为零且转至标号出执行,否者且向下执行 (loop 标号 实际上是为IP寄存器赋值,如果标号不写在LOOP前面,切无法实现循环目的)
CX 寄存器可直接MOV赋值,可运算操作
用CX和LOOP指令相配合实现循环功能的程序框架
mov cx,循环次数
S:
    循环执行的程序段
    LOOP S
标号所标示的地址要在前面,要循环执行的程序段,要写在标号和LOOP指令的中间

在汇编源程序中,数据不能以字母开头.所以要在字母前面加0.比如0A000H
Debug 解释 mov ax,[0] 为 将 ds:0000H 内存单元的数据送入 AX
masm编译器 mov ax,[0] 解释为 mov ax,0000
那么要实现这句指令,在源程序中必须这样 mov ax ds:[0] 明确指定段寄存器 或者抛弃常量 [0] 而使用 [dx] 等寄存器中转

段前缀
出现在访问内存单元的指令中,用于显示地指明内存单元的段地址的"DS:"."CS:"."SS:"或"ES:"。在汇编的语言中称为段前缀。

安全的内存空间
DOS方式下,一般情况,0:200 ~ 0:300 (00200H ~ 00300H)空间中没有系统或其它程序的数据或代码。

inc 指令 表示当前操作数 = 自身 +1 如 inc ax 等于 ax = ax +1
dec 指令 表示当前操作数 = 自身 +1 如 dec ax 等于 (ax)=(ax)-1
add 加法运算符
sub 减法运算符
dw (define word)定义字型数据.如 dw 0123H,0456H,.......

如果汇编程序中有下面两个连续的段定义,汇编编译程序会怎么做呢?
name1 segment
d1 db 0
name1 ends
name2 segment
d2 db 0
name2 ends
编译器实际的处理方式是将name1中的所有内容放在一个段的起始地址处(比如0001:0),name2里的所有内容放在后续一个段的起始地址处(比如0002:0)(这也是汇编指令segment的本义:将不同数据分段)。这样,即使name1中只包含一个字节,也要占一个段(16个字节),所以,一个段实际占用的空间=
(段中字节数+15)/16*16  [(段中字节数+15)/16只取整数部分]
(N/16+1)*16 [说明:N/16只取整数部分]
所以,8086处理器的内部寻址原理和汇编程序编译器共同决定了segment定义的段必须放在按16的倍数对准的段地址边界上,占用的空间也是16的倍数。

and 逻辑与命令 两个操作数为真,结果为真,否则为假
or  逻辑或命令 两个操作数其中一个为真,结果为真

[bx+idata] 也可以写作 idata[bx] 可以看做数组的实现方法。段地址 * 16 + 相对地址 + 偏移地址
mov ax,[bx][si] 同上面的解释一样
mov ax,[bx+si+idata]
mov ax,200[bx][si]
mov ax,[bx].200[si]
mov ax,[bx][si].200
[idata]用一个常量来表示地址,可用于直接定位一个内存单元
[bx]用一个变量来表示内存地址,可用于间接定位一个内存单元
[bx+idata]用一个变量和常量表示地址,可在一个起始地址的基础上用变量间接定位一个内存单元
[bx+si]用两个变量表示地址
[bx+si+idata]用两个变量和一个常量表示地址
[bx+idata+si]一般来说可以用来访问结构体中的数据,BX定位整个结构体,idata定位结构体中的某一个数据项,SI定位数组项中的每个元素,那么就可以这样书写[bx].idata[si]  [bx].idata

SI和DI寄存器 不能分成两个8位寄存器

约定 reg 用来表示一个寄存器
     sreg用来表示一个段寄存器

只有 bx si di bp 这四个寄存器可以用在[...]中来进行内存单元的寻址
[...]中,这4个寄存器可以单个出现,或只能以四种组合出现:BX和SI,BX和DI,BP和SI,BP和DI
只要在[...]中使用寄存器 bp ,没指令中没有显示地给出段地址, 那么默认的段地址在SS中
bx不能与bp合用,因为它们默认为不同的段寄存器。

在没有寄存器名存在的情况下,用操作符 X ptr 指明内存单元的长度,X 在汇编指令中可以为 word 或 byte
mov word ptr ds:[0],1  (word指明操作数为一个字型数据16位)
mov byte ptr ds:[0],1  (byte指明操作数为一个字节型数据8位)
(prt 是指针的意思,可以解释为一个指向 X 类型的指针)

div 是除法指令
除数:有8位和16位两种,在一个寄存器或内存单元中
被除数:默认放在AX或DX和AX中,如果除数为8位,被除数则为16位,默认在AX中存放;如果除数为16位,被除数则为32位,在DX和AX中存放,DX存放高16位,AX存放低16位。
结果:如果除数为8位,则AL存储除法操作的商,AH存储除法操作的余数;如果除数为16位,则AX存储除法操作的商,DX存储除法操作的余数。

mul 是乘法指令
两个相乘数,如果是8位,一个默认放在AL中,另一个放在8位寄存器或内存字节单元中;
如果是16位,一个默认在AX中,另一个放在16位寄存器或内存字单元中.
结果:8位乘法,默认放在AX中;16位乘法,结果高位默认放在DX中,低位放在AX中.

伪指令
db 占位一个字节,一个内存单元
dw 占位一个字,  二个内存单元
dd 占位二个字,  四个内存单元

dup 是一个操作符 它和db dw dd等数据定义伪指令配合使用,用来进行数据的重复 db 3 dup (1,2,3) 相当于 db 0,1,2,0,1,2,0,1,2

[明道云] -基础教学1- 创建第一个工作表:从 0 到实用 明道云工作表相当于数据库表,是存储业务数据的核心组件。创建工作表主要有两种方式:1)从空白新建,通过添加字段(最多200个)、设置属性、配置表单样式;2)从Excel导入,需选择sheet、配置字段映射。创建后系统自动生成默认视图,支持多种视图形式(看板/日历等)。建议设置合适的标题字段和关联关系,初学者可在一小时内完成基础应用搭建。后续可扩展权限控制、工作流自动化等功能。 阅读详情

相关推荐

在Wincc8.0的Wincc 3D Control控件中使用3D模型

如果之前没有在Blender中自定义光照,EnableBackground属性选择“是”,Wincc 3D Control会按一个均匀的光照强度渲染。Wincc8.0更新后提供了一个Wincc 3D Control控件来显示3D图像,但是该控件实际体验下来现阶段还存在功能不足、运行不稳定的问题。再把导出的dae文件复制进Wincc项目的GraCS文件夹中,文件名称复制进控件的SceneFile属性里。选择编辑模式,全选模型,点击网格→分离→按材质,分离出不同的部件(不同的部件最好使用不同的材质)。

ghoring的博客 7131

汇编语言入门(二)

文章目录 寄存器【内存访问】 内存中字的存储 DS和【address】 字的传送 mov、add、sub指令 数据段 栈 栈顶越界的问题 PUSH和POP指令 栈的综述 栈段【栈的综述】

m0_55854679的博客 1210

USB接口ESD保护电路:深度剖析与选型建议

USB接口在热插拔和频繁使用中极易遭遇静电放电(ESD)冲击,导致芯片损坏或通信异常。本文结合实际电路设计经验,详解TVS二极管、集成ESD防护器件等方案在USB接口上的应用要点,重点分析钳位电压、结电容、IEC 61000-4-2等级等关键参数对信号完整性与防护效果的影响,助你为USB接口匹配高可靠、低干扰的ESD保护方案。

weixin_36289813的博客 510

段中的实际数据大小与占用空间大小问题

对于如下定义的段:   name segment   ....   name ends如果段中的数据占N个字节,则程序加载后,该段实际占有的空间为_____. 答案:        (N/16+1)*16 [说明:N/16只取整数部分]    或   (N+15)/ 16 ,对16取整       在8086CPU架构上,段是以paragraph(16-byte)对齐的。程序默认以

2092

ptrade从零开始学习量化交易第166期【ptrade量化策略研究参考--三个因子挖掘思路】

三个因子挖掘思路

GJ57017_wx的博客 1246

74HC138译码器的原理和使用

A0,A1,A2为3位二进制加权地址输入端口,A2A1A0顺序组成的3位2进制数对应的十进制数x控制使能端口Yx';例如当A2A1A0 = 101 时,其他门输出端全为高电平,只有Y5'为低电平。 Y0-Y7为8个输出端口,其输出电平由A0,A2,A3,E1,E2,E3决定。

diksan的博客 6万+

内存和内存地址通俗理解

内存 :          程序和数据平常存储在硬盘(硬盘是一种可记忆盘)等存储器上,不管你开机或关机了,它们都是存在的,不会丢失。硬盘可以存储的东西很多,但其传输数据的速度较慢。所以需要运行程序或打开数据时,这些数据必须从硬盘等存储器上先传到另一种容量小但速度快得多的存储器(无记忆盘),之后才送入CPU进行执行处理。这中间的存储器就是内存。          每个数据,都需要在内存上有其映射

ghevinn欢迎您光临 1万+

学术报告系列(二) - 智能自主作业机器人感知与控制技术及发展趋势

收集整理于2022年模式识别高峰论坛湖南大学王耀南院士报告(报名题目:智能自主作业机器人感知与控制技术及发展趋势)

Make something people want. 4696

汇编学习杂记(9~13章)

汇编学习笔记(9~13章)

孤云出岫, 去留一无所系. 朗镜悬空,静躁两不相干. 820

Tiff、jpg图片怎么样添加地理坐标信息

Tiff、jpg图片怎么样添加地理坐标信息 一般,外业调查只有地图资料,如专题图、或者地形图,如何把这些地图资料的扫描地图带上坐标信息,从而内业实现信息化处理?以上问题,可以解决,但根据不同情况有不同的处理方法。     第一种,上面有经纬度外框,图片是矩形,但是没有地理信息。 通过图框的两个角的坐标确定范围,分别是左上(140°E,30°N);右下(150°W,30°N) 解决方

树木_xzw的博客 2万+

第八章 Vite4+Vue3+Vtkjs 完整demo演示

vtk.js是一个基于WebGL的开源3D可视化库,它可以在Web浏览器中呈现高质量的3D图形。vtk.js提供了一个易于使用的API,可以用于创建各种类型的3D可视化,包括科学、医学、工程和地球科学等领域。vtk.js支持多种数据格式,包括VTK、DICOM、STL等,可以轻松地将数据导入到可视化中。此外,vtk.js还支持交互式可视化,用户可以通过鼠标和键盘进行交互,探索和分析数据。采用的vite4+pinia搭建的Vue3项目。

Wait.End的博客 2234

汇编学习杂记(14~17章)

汇编学习笔记(14~17章)

孤云出岫, 去留一无所系. 朗镜悬空,静躁两不相干. 885

mbedtls | 01 - 移植mbedtls库到STM32的两种方法

一、mbedtls 开源库 1. mbedtls是什么 Mbed TLS是一个开源、可移植、易于使用、代码可读性高的SSL库。可实现加密原语,X.509证书操作以及SSL / TLS和 DTLS 协议,它的代码占用空间小,非常适合用于嵌入式系统。 mbedtls遵循 Apache 2.0 开源许可协议,目前由 TrustedFirmware 维护(Linaro主持的一个治理开放社区项目),在Github上已收获 2.6k star,目前Github上发布的最新版本为 2.24.0 版本,开源仓库地址为:

Mculover666的博客(嵌入式) 1万+

汇编语言学习笔记 - 杂记(寄存器,寻址方式,指令操作合法性)

寄存器 eax:32位长==4字节(0~31) ax:16位长==2字节(0~15) al:8位长==1字节 (0~7) ah:8位长==1字节(8~15) 寄存器符号汇总 寻址方式 这里统一说四种: 立即数寻址 寄存器寻址 直接寻址 寄存器间接寻址 判断技巧: 只要是数字(地址)或者等效符指定(类似 a equ 0h)都是立即数寻址 只要是只有寄存器,都是寄存器寻址 如果是寄存器外面加了‘[ ]’,则就是寄存器间接寻址 如果是变量名,那就是直接寻址 指令操作合法性 以mov指令,为例子(其余

Hanzoe的博客 1545

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

JVM学习杂记

class: public class Test { public void A() { int i = B(); System.out.println(i); } public int B() { int i = 1; int j = 2; int l = (i ...

chiyangmi2011的博客 230

深度学习工具包 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")

嵌入式系统学习杂记

1, 简单高效的解决中断引起的并发2, 屏蔽中断应尽量使用local_irq_save和local_irq_restore3, 中断屏蔽的时间不宜过长, 因为中断必须执行完才会继续调度4, 只能屏蔽本地cpu中断, 对于对称多处理器 SMP, CPU之间的竞态继续存在1, 利用了汇编的不可分割性, 和cpu架构密切相关, 汇编不直接支持就用中断屏蔽等手段2, 只能用于整形变量 int, 能使用的时候尽量使用, 比任何锁和屏蔽消耗少3, 还有位原子操作// 追//设置上限。

Potcutre的博客 595

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

~杂记(4):阿里和华为rtos 的接管中断逻辑探索

1、首先在某芯片的启动文件中,给出的中断向量表全是指向同一个函数。(一开始我以为是错的,自己改成各个默认中断服务函数的入口,这样就成了非接管中断)。 部分代码如下,其中irq_handler就是那个统一的中断服务函数。他被定义在调度文件los_dispatch中。 __Vectors: .long Reset_Handler .long vec_han...

Kshine2017的博客 1110

C++学习杂记

第一章 绪论 1.1 计算机程序设计语言的发展 1.1.1 机器语言与汇编语言 1.1.2 高级语言 1.1.3 面向对象的语言 1.2 面向对象的方法 1.2.1 面向对象方法的由来 结构化程序设计的思路是:自顶向下、逐步求精;其程序结构是按功能划分为若干个基本模块,这些模块形成一个树状结构;各模块之间的关系尽可能简单,在功能上相对独立;每一模块内部均

liujiabin blog 1072

20190806_python基础笔记

文章目录目录一、面试重点总结二、面试中可能会遇到的题目1.动态语言的内存管理:2.元编程3.计算机5大组成部分及各部分的功能4.python语言的特点三、计算机基础知识1.冯诺伊曼体系2.解释性语言和汇编语言四、python基础知识及练习1.进制2.按位运算3.逻辑运算4.分支及循环5.特殊符号6.python语言的特点7.数值类型8. 容器(1). 列表(2). 元组(3). 字符串(4). b...

weixin_42181870的博客 749

浮点寄存器

浮点寄存器

孤云出岫, 去留一无所系. 朗镜悬空,静躁两不相干. 5014

王爽汇编 (习题解答)

检测点1.11 寻址能力为8KB那么寻址范围就是0 --- 81918192 = 2^XX = 13 这就是寻址宽度21bit = 8byte 1024byte = 1kb1kb = 1024 * 1(byte) * 8(bit) = 8192 bit     CPU存储器有1024个存储单元单元编号从0到102331bit = 8byte 1024byte = 1kb8192 bit 

孤云出岫, 去留一无所系. 朗镜悬空,静躁两不相干. 3188

王爽汇编 实验13编写int 7cH中断例程(1)

功能:显示一个用0结束的字符串——参数:(dh)=行号,(dl)=列号,(cl)=颜色,ds:si指向字符串首地址

孤云出岫, 去留一无所系. 朗镜悬空,静躁两不相干. 2233

小写字母转变成大写字母 子程序

将以0结尾的字符串中的小写字母转变成大写字母

孤云出岫, 去留一无所系. 朗镜悬空,静躁两不相干. 1670

王爽汇编 实验14读取CMOS RAM时间信息

读取CMOS RAM中的时间信息,并显示在屏幕中间。

孤云出岫, 去留一无所系. 朗镜悬空,静躁两不相干. 1618

王爽汇编 实验12编写0号中断处理程序

编写及安装 0号中断处理程序

孤云出岫, 去留一无所系. 朗镜悬空,静躁两不相干. 1555

80386标志寄存器

80386标志寄存器(图)

孤云出岫, 去留一无所系. 朗镜悬空,静躁两不相干. 1220
上一篇: 32位cpu寻址小结(转载)
下一篇: 王爽汇编 (习题解答)
TypeCool
博客等级 码龄22年 58粉丝 93原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值