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

Cursor AI对话历史丢失?开源工具一键恢复项目聊天记录 在软件开发中,数据持久化与工作区管理是保障开发效率与上下文连续性的基础技术。其核心原理在于通过文件系统路径、数据库存储等机制,将应用状态与用户数据持久化关联。对于依赖AI辅助编程的开发者而言,对话历史是宝贵的项目上下文资产,记录了关键的算法思路、API使用范例和问题解决方案。然而,当开发工具(如基于VS Code的Cursor)采用基于项目绝对路径的工作区隔离机制时,项目路径的变更会导致历史对话看似“丢失”,实则是被隔离在了旧路径对应的数据沙箱中。这直接影响了开发体验与知识沉淀的效率。cursor-chat 阅读详情

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

在 Esp32 摄像头上实现边缘脉冲 FOMO 物体检测 本文将详细介绍如何在 Esp32 摄像头上实现边缘脉冲 FOMO 物体检测,并提供实现源码 阅读详情

相关推荐

[官方培训]07-UE材质基础 孙丹璐 Epic 笔记

勾选允许自定义深度写入再在模型上勾选然后可以通过Scene Texture节点拿到渲染的自定义深度信息,有了自定义深度信息就可以与当前渲染的像素深度进行对比,自定义深度信息存放的是最靠近我们的深度,如果当前像素离自定义深度比较远我们就不要这个像素。效果如下这种方案的缺点也很明显,因为这样看不到第二层的透明了,如果是两层的半透明的裙摆,这样就看不到第二层的裙摆了。对于半透明排序问题最根本能解决的还是光线追踪,ue5中又加入了OIT(基于像素的排序)。官方透明材质的理解和应用。

Tcohneyn的博客 1562

汇编语言入门(二)

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

m0_55854679的博客 1210

c语言串口编程详解

串口: 一种异步通信接口,通常用于低速数据传输。RS-232: 最常见的串口标准,定义了电气特性、连接器和信号线。UART: 通用异步收发传输器,是实现串口通信的硬件模块。通过以上内容,你应能够理解并实现C语言在Windows和Linux平台上的串口编程。希望这本手册能帮助你在实际项目中顺利进行串口通信开发。如果有任何疑问或需要进一步的帮助,请随时提问。

jkzyx123的博客 2223

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

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

2092

Lucene学习总结之二:Lucene的总体架构

Lucene总的来说是: 一个高效的,可扩展的,全文检索库。 全部用Java实现,无须配置。 仅支持纯文本文件的索引(Indexing)和搜索(Search)。 不负责由其他格式的文件抽取纯文本文件,或从网络中抓取文件的过程。 在Lucene in action中,Lucene 的构架和过程如下图, 说明Lucene是有索引和搜索的两个过程,包

forfuture1978的专栏 1万+

用Python爬虫抓取大宗交易成交数据:全面解析与实战代码

大宗交易是指在证券市场中,涉及大额买卖的交易。此类交易通常由机构投资者进行,其交易量较大,对市场的影响显著。大宗交易数据包含了买卖双方的成交价格、成交量等关键信息,这些数据对于投资者和分析师而言,具有重要的市场预测意义。Python爬虫是一种自动化抓取互联网上数据的工具。通过爬虫,我们可以定期获取大宗交易数据,节省人工查询的时间。爬虫的工作原理通常包括:发送HTTP请求、获取响应数据、解析网页内容、提取关键信息、存储和展示数据。

2201_76125261的博客 417

内存和内存地址通俗理解

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

ghevinn欢迎您光临 1万+

超临界二氧化碳再热再压缩布雷顿循环建模与先进控制

超临界二氧化碳布雷顿循环建模与先进控制研究 本文研究了超临界二氧化碳再热再压缩布雷顿循环系统的建模与控制。通过MATLAB/Simscape构建了包含压缩机、透平、回热器等关键组件的动态模型,并设计了基于模型预测控制(MPC)和自抗扰控制(ADRC)的多层控制策略。系统采用转速控制的压缩机、阀门开度控制的透平,以及可变热源加热器,实现了全动态分析。研究结果表明,MPC与ADRC混合控制方案相较于传统PID控制,功率超调降低至0.9%,效率波动控制在±0.08%,扰动恢复时间缩短至12秒。

AI的内部世界的博客 340

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

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

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

动力学约束下的运动规划算法——Kinodynamic RRT*算法

动力学约束下的运动规划算法——Kinodynamic RRT*算法

慕羽★的博客 6749

FPGA JTAG接口设计全解析

JTAG是FPGA开发的核心接口,主要用于代码下载和在线调试。14-pin设计中包含TCK、TMS、TDI、TDO四个关键信号,采用信号-地布局增强抗干扰能力,TCK建议串联电阻。10-pin设计需注意转接适配,并推荐使用RCLAMP0524P等低电容TVS二极管进行ESD防护。两种接口设计都强调信号完整性和可靠性,建议PCB布局时保持JTAG走线短且预留调整空间。

在读研究生,FPGA电路设计与功能开发。 2181

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

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

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

芒果YOLOv12改进90:检测头篇之ShareSepHead:即插即用|原创新颖共享Sep检测头,更省参数量,更高效,打造新型YOLOv8检测器,精度高效涨点

芒果YOLOv12改进90:检测头篇之ShareSepHead:即插即用|原创新颖共享Sep检测头,更省参数量,更高效,打造新型YOLOv8检测器,精度高效涨点

包括YOLOv5、YOLOv7、YOLOv8等模型改进 343

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

寄存器 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

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

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

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

嵌入式系统学习杂记

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

Potcutre的博客 595

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

~杂记(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、付费专栏及课程。

余额充值