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

sentaurus学习笔记(一)器件仿真 之前有跟大家说,以后转到sentaurus,因此silvaco会用的比较少,结果发现真的有一点贪心厌旧的感觉,现在基本上不用silvaco(lll¬ω¬)故这篇文章,将为大家带来的是关于sentaurus的结构仿真和器件的特性的提取。我们还是老规矩,先上结构图。 还是一个经典的IGBT结构,这是一个典型的N型IGBT,下面我将把一些相关的结构,和具体的写法用下面一幅图表达出来。 这里因为方便看,我们把器件的比例画的比较抽象。可以看到的是,这里有很多的距离参数是用一些变量名来写的,这也是sentaurus 阅读详情

补码(8位有符号数范围 -128 ~ 127 , 16位有符号数范围 -32768 ~ 32767)
最高位为1,表示负数;
正数补码取反加1后,为其对应的负数补码;负数补码取反加1后,为其绝对值.
例:1的补码:00000001b,取反加1后为:11111111b,表示-1;
10000000b,取反加1后为:10000000b,大小为128,所以这个码就表示-128

 

显示缓冲区(80 * 25 每行80个字符一共25行 一共分为8页 B8000H ~ BFFFFH)
第一页:B800:0000 ~ B800:0F9F (0 ~ 3999)
000 ~ 09F 对应第0行(80个字符占位160个字符) (0 ~ 159)
0A0 ~ 13F 对应第1行(160 ~ 319)
140 ~ 1DF 对应第2行
F00 ~ F9F 对应第24行
一个字符占两个字节,低位存放ASCII码.高位存放属性
00 ~ 01 对应第0列
02 ~ 03 对应第1列
9E ~ 9F 对应第79列
属性字节的格式: 7   6   5   4             3     2   1   0
R:红色             BL  R   G   B             I      R   G   B
G:绿色            闪烁 ~~~~~~背景 高亮 ~~~~~~前景
B:蓝色

 

offset 伪指令,功能是取得标号的偏移地址,如: start:mov ax,offset start 相当于mov ax,0
计算代码长度 mov ax,offset 1 - offset 0
           0:需要确定长度的代码段
           1:可以是代码段也可以写个空白nop

 

转移指令
只修改IP时,称为 段内转移,比如: jmp ax (用AX的值为IP赋值)
同时修改CS和IP时,称为 段间转移,比如:jmp 1000:0
根据范围又可分为:短转移IP修改范围(-128 ~ 127) 近转移IP修改范围(-32768 ~ 32767)

 

jmp short 标号 (转到标号处执行指令) short 指明是段内短转移(功能表示为:(IP)=(IP)+8位位移)
8位位移="标号"处地址 - JMP指令后第一个字节的地址
short指明此处的为8位位移(位移范围-128 ~ 127,用补码表示)

 

jmp near ptr 标号 (段内近转移)(功能表示为:(IP)=(IP)+16位位移)

jmp far ptr 标号 (段间转移 也叫 远转移)
(功能表现为:(CS)=标号所在段的段地址;(IP)=标号所在段中的偏移地址)
例:0BBD:0006 EA0B01BD0B  JMP 0BBD:010B

jmp word ptr 内存单元地址(段内转移)
jmp dword ptr 内存单元地址(段间转移)( (CS)=(内存单元地址+2) (IP)=(内存单元地址) )

 

有条件转移指令(所有的有条件转移指令都是短转移"-128 ~ 127")
jcxz 标号 (如果(cx)=0,转移到标号处执行,否则程序向下执行)
相当于 if((cx)==0)jmp short 标号;

 

循环指令(所有的循环指令都是短转移)
loop 标号 ((cx)=(cx)-1,如果(cx)不等于0,转移到标号处执行)
操作流程:1. (cx)=(cx)-1
              2. 如果(cx)不等于0,(IP)=(IP)+8位位移

 

ret 指令用栈中的数据修改IP的内容,实现近转移(-32768 ~ 32767),相当于 pop ip
retf 指令用栈中的数据修改CS和IP的内容,实现远转移(段间转移), 相当于 pop ip  pop cs
ret n 指令格式,相当于 pop IP
                                add sp,n

 

注:在执行CALL指令时,IP的值先变成CALL指令后的第一个字节的偏移地址,然后才被压入栈.
call 标号 (将当前的IP压栈,转到标号处执行)只能是近转移(-32768 ~ 32767)16位位移
相当于 push ip
          jmp near prt 标号
call far ptr 标号 实现段间转移 相当于 push cs 
                                                      push ip 
                                                      jmp far ptr 标号
call 16位寄存器 相当于 push IP
                                  jmp 16位寄存器

call word ptr 内存单元地址 相当于 push ip
                                                  jmp word ptr 内存单元地址

call dword ptr 内存单元地址 相当于 push cs
                                                    push ip
                                                    jmp dword ptr 内存单元地址

 

call 指令将IP压栈. ret 指令且是出栈转移.从而可用CALL调用子程序,再在子程序中用ret返回。

子程序设计标准框架:
子程序对调用程序保护: 子程序中使用的寄存器入栈
               子程序开始: 子程序内容
                                子程序中使用的寄存器出栈
                               返回(ret,retf)

 

8086CPU的标志寄存器有16位,其中存储的信息通常被称为程序状态字(PSW)


约定:flag 表示标志寄存器
flag的1.3.5.12.13.14.15位在8086CPU中没有使用,不具任何含义

 

第6位ZF 零标志位.它记录相关指令执行后,其结果是否为0,如果为0,那么ZF=1,否则ZF=0

 

第2位PF 奇偶标志位.它记录相关指令执行后,其结果的所有二进制位中1的个数是否为偶数.如果1的个数为偶数,那么PF=1,如果为奇数,那么PF=0
如: mov al,1    注:0 也是偶数00000000B,如果是这样,PF也为1
    add al,10   执行后,结果为00001011B,其中有3(奇数)个1,则PF=0

 

第7位SF 符号标志位.它记录相关指令执行后,其结果是否为负.如果结果为负SF=1,非负SF=0

 

第0位CF 进位标志位.在进行无符号数运算时,它记录了运算结果的最高有效位向更高位的进位值,或从更高位的借位值.    

CF是对无符号数运算有意义的标志位
例如: mov al,98H
        add al,al   ;执行后:(al)=30H,CF=1, CF记录了从最高有效位向更高位的进位值
再如减法时: mov al,97H
                 sub al,98H  ;执行后:(al)=FFH,CF=1,相当于计算197H减去98H

 

第11位OF 溢出标志位.在进行有符号数运算时,它记录了运算结果是否发生了溢出,如果溢出OF=1,否则OF=0.              

OF是对有符号数运算有意义的标志位
例如: mov al,98  ;执行后(al)=0C5H,CF=0,OF=1,因为结果197超出了8位有符号数的范围-128 ~ 127
        add al,99  ;C5H是有符号数-59的补码,按位取反后加1,绝对值00111011B,59

 

adc 带进位加法指令 格式: adc 操作对象1,操作对象2  
                             功能: 操作对象1 = 操作对象1 + 操作对象2 + CF
用法: add al,bl
        adc ah,bh   ;相当于 add ax,bx ,低位与低位相加,高位与高位相加再加上低位的进位值

 

sbb 带借位减法指令 格式: sbb 操作对象1,操作对象2
                             功能: 操作对象1 = 操作对象1 - 操作对象2 - CF

 

cmp 比较指令 相当于减法指令,但不保存结果,执行后对标志寄存器产生影响
    格式: cmp 操作对象1,操作对象2
    功能: 计算 操作对象1 - 操作对象2 但不保存结果,仅根据结果对标志寄存器进行设置
进行无符号数比较 例: cmp ax,bx
                     ZF=1 (ax)=(bx)
                     ZF=0 (ax)≠(bx)
                     CF=1 (ax)<(bx)
                     CF=0 (ax)≥(bx)
                     CF=0 并且 ZF=0 (ax)>(bx)
                     CF=1 或 ZF=1   (ax)≤(bx)
进行有符号数比较 例: cmp ah,bh
                     ZF=1 (ah)=(bh)
                     ZF=0 (ah)≠(bh)
                     SF=1 OF=0 (ah)<(bh)
                     SF=1 OF=1 (ah)>(bh) ;如果因溢出导致了实际结果为负,那么逻辑结果为正
                     SF=0 OF=1 (ah)<(bh) ;如果因溢出导致了实际结果为正,那么逻辑结果为负
                     SF=0 OF=0 (ah)≥(bh)

 

如果SF、OF的值不相同,则说明源操作数大;
如果SF、OF的值相同,则说明源操作数小;
如果OF=1(可不考虑SF的值),则说明两种结果不相等。

整合记忆:  相异则源大;  相同则源小;  溢出则结果异。


(所有的有条件转移指令都是短转移"-128 ~ 127")
根据无符号数的比较结果进行转移的条件转移指令:
je        等于则转移  =   ZF=1                  ;jump equal
jne   不等于则转移  ≠   ZF=0                  ;jump not equal
jb        低于则转移  <   CF=1                  ;jump below
jnb   不低于则转移  ≥   CF=0                  ;jump not below
ja        高于则转移  >   CF=0 且 ZF=0    ;jump above
jna   不高于则转移  ≤   CF=1 或 ZF=1    ;jump not above

 

闭区间[32,128] 包含32.128   开区间(32,128) 不包含32.128

 

第10位DF 方向标志位 在串处理指令中,控制每次操作后si,di的增减.
DF=0 每次操作后si,di 递增;
DF=1 每次操作后si,di 递减;

movsb 串传送指令 功能: ((es)*16+(di)) = ((ds)*16+(si))
                                   如果DF=0 则: (si) = (si)+1   (di) = (di)+1
                                   如果DF=1 则: (si) = (si)-1   (di) = (di)-1
相当于 mov es:[di],byte ptr ds:[si]  ;8086并不支持这样的指令,这里只是个描述
如果DF=0; inc si   inc di
如果DF=1; dec si   dec di

 

movsw 与movsb功能相似,只是操作数为word型数据,并且si和di的增减都是2
一般,movsb和movsw都和rep指令配合使用:rep movsb 或 rep movsw
相当于 s:movsb
             loop s

rep的作用是根据CX的值,重复执行后面的串传送指令.

cld 指令: 将标志寄存器的DF位置0
std 指令: 将标志寄存器的DF位置1

 

AF 辅助进位标志 是4位运算时的进位或借位的标志位
例如: 两个8位寄存器相加,  AL=1000 0001, BL=1000 0011
        结果CF=1, AF=0      因为AL和BL的低四位相加没有进位

 

pushf和popf 指令 是压栈和出栈 标志寄存器的值
例: mov ax,0
     push ax
     popf     ;实现将标志寄存器置0

 

Debug 中标志位的表示
标志            值为1时          值为0时
OF                 OV                NV
SF                 NG                PL
ZF                 ZR                NZ
PF                 PE                PO
CF                 CY                NC
DF                 DN               UP

 

中断信息 中断的意思:CPU不再接着(刚执行完的指令)向下执行,而是转去处理这个特殊信息.

8086CPU用称为中断类型码的数据来标识中断信息的来源,中断类型码为一个字节型数据,可表示256种中断信息来源.

产生中断信息的事件,即中断信息的来源,简称为中断源.

 

8086Cpu内中断,当CPU内部有下面的情况发生时,将产生相应的中断信息:
1.除法错误,比如:执行div指令产生的除法溢出;   中断类型码:0
2.单步执行;                                                                 1
3.执行int0指令;                                                           4
4.执行int指令;该指令的格式为int n,指令中n为字节型立即数,是提供给CPU的中断类型码

 

中断向量  是中断处理程序的入口地址,对于8086CPU,一个中断向量包括段地址和偏移地址,所以占位两个字.

高地址字存放段地址,低地址字存放偏移地址

 

中断类型码 是中断向量在内存表中的索引,中断类型码0,指明中断处理程序入口地址在0000:0000到0000:0003存放,依次类推.

中断类型码 * 4 = 中断处理程序偏移地址
中断类型码 * 4 + 2 = 中断处理程序段地址

 

中断向量表 8086PC机,其存放地址必须是内存0000:0000到0000:03E8的1000个单元中.

 

中断过程 CPU用中断类型码找到中断向量,并用它设置CS和IP的过程.就叫中断过程.(硬件自动执行)
1.(从中断信息中)取得中断类型码;
2.标志寄存器的值入栈;(因为在中断过程中要改变标志寄存器的值)
3.设置标志寄存器的第8位TF和第9位IF的值为0;    ;TF置0,为了避免陷入重复的单步中断
                                                                     ;IF置0,为了在进入中断处理程序后,禁止其他的可屏蔽中断
4.CS的内容入栈;
5.IP的内容入栈;
6.从内存地址为 中断类型码*4 和 中断类型码*4+2 的两个字单元中读取中断处理程序的入口地址设置  IP和CS

 

中断处理程序 常规步骤:
1.保存用到的寄存器
2.处理中断
3.恢复用到的寄存器
4.用iret指令返回

 

iret指令用汇编语法描述:
pop ip
pop cs
popf

 

第8位TF 陷阱标志 CPU在执行完一条指令后,如果检测到TF=1,则产生单步中断,引发中断过程.中断类型码为1

 

响应中断的特殊情况 在执行完SS寄存器传送数据的指令后,CPU不会响应中断,而是紧接着执行下一条指令.因为SS:SP联合指向栈顶,而对他们的设置应该连续完成,否者中断过程的入栈指令将变得不可测.

 

int 指令格式: int n 其中n为中断类型码,功能就是引发中断过程,与iret指令配合使用可实现call指令和ret指令相配合的相似效果.

int n 调用中断例程实现循环功能
       mov bx,offset 需循环的语句 标号0 - offset 循环语句结束的下一代码处 标号1
       ;设置从 标号1 到 标号0 的转移位移(必定是个负数用补码表示)
       mov cx,循环次数
标号0: 循环的代码
       int n         ;调用中断例程
标号1: nop           ;循环语句结束

 

例程开始:     保存用到的寄存器
              mov bp,sp
              dec cx
              jcxz 例程结束标号
              add [bp+保存的寄存器数量*2],bx  
              ;bp默认段地址在SS中,当前偏移地址(标号1)+bx的负数,等于标号0的偏移地址
例程结束标号: 恢复用到的寄存器
              用iret指令返回

 

BIOS和DOS的中断例程安装过程
1.CPU加电,初始化(CS)=0FFFFH,(IP)=0,执行该处的一条跳转指令,跳转到BIOS中的硬件系统检测和初始化程序.
2.初始化程序将BIOS提供的中断例程入口地址登记在中断向量表中,(BIOS的中断例程固化在ROM中,只可读,不可写)
3.硬件系统检测和初始化完成后,调用int 19h进行操作系统引导
4.DOS启动后,除完成其他工作外,还将它所提供的中断例程装入内存,并建立中断向量

 

BIOS和DOS提供的中断例程,都用ah来传递内部子程序的编号

 

调用int 19h进行操作系统的引导:
1.根据CMOS中的系统配置选择启动操作系统的硬件设备(软盘、硬盘、光盘、U盘等)
假设从软盘启动: 控制0号软驱,读取软盘0道0面1扇区的内容到0000:7c00
2.将CS:IP指向0000:7c00.从此便交由操作系统控制计算机

 

如果0号软驱中没有软盘,或发生软盘I/O错误,
则:根据CMOS中的系统配置选择启动操作系统的备用硬件设备,如果所有的引导都错误.那么
1.读取硬盘C的0道0面1扇区的内容到0000:7c00
2.将CS:IP指向0000:7c00.从此便交由操作系统控制计算机

边缘计算与产业生态系统 目录 文章目录目录边缘计算产业参与者边缘计算产业生态系统 边缘计算产业参与者 边缘计算领域参与者众多,主流公司以打造生态优势为目标,基于自身服务层级向产业链上下两端进行拓展,目前市场主要参与者有: 系统集成商:在产业头部,具有广泛的能力,可以集成不同生态系统公司的产品,具有一定的全球性属性,在边缘计算领域大多由云服务商、电信运营商担任。 云服务商:具有领先的云技术优势与应用生态体系,同时拥有全球性资源布局与市场资源生态,并渴望成为边缘计算主导者。 电信运营商:具有边缘基础设施优势,以及不可替代的 阅读详情

相关推荐

YOLO详解

本文参考知乎 https://zhuanlan.zhihu.com/p/25236464 1. YOLO的创新点 YOLO将物体检测作为回归问题求解。基于一个单独的end-to-end网络,完成从原始图像的输入到物体位置和类别的输出。 从网络设计上,YOLO与two steps的目标检测方法如RCNN、Fast RCNN和Faster RCNN的区别如下: YOLO训练和检测均是在一个单独网...

UnknownPlayer的博客 9945

8086/8088 微机指令汇总

寻址方式 1.立即寻址仅适用于源操作数 2.间址寄存器仅可用BX BP(SS段) SI DI 3.SI DI 变址寄存器 BX BP基址寄存器 4.相对寻址:[BX+DATA] [BX]DATA [BX]+DATA 5.基址-变址相对寻址:5H[BX][SI] 6.隐含寻址:MUL BL 指令执行:AL×BL——>AX 数据传送指令 MOV 例: MOV AX, 1234H MOV BL, 22H MOV AX, BX MOV DL, CH MOV AX/AL, [1200H] ; AX则连续读入两个

yangcunnilange的博客 6495

关于Nuttx操作系统

NuttX是一个成熟的实时操作系统

qq_28576837的博客 4091

判断X单元数据的奇偶性,若为奇数,将Y单元设置为0FFH,若为偶数,将Y单元清0。

汇编语言判断奇偶数

m0_57625930的博客 635

机械臂 关节电机选型计算

电机 机械臂

hisen92的专栏 8982

ELK - CentOS7 安装 elasticsearch 7.17.5

elk elasticsearch 安装

qq_19783793的博客 1461

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

HDRnet——双边滤波和仿射变换的摇身一变

layer层数越多,下采样得到的图越小,low-level features的好处是最后的grid会更coarser,最后的特征图的感受野也越多,非线性更好,表达力更强。所以最终grid是5维的[B,in*out,n,H,W],permute之后是[B,H,W,n,in*out],B是batchsize,n表示对guide的量化级数,in*out表示每个cell的变换系数。这部分的处理对象是低分辨率图,利用CNN进行特征提取(局部和全局),最后fuse得到grid,这里面包含了变换的系数。

zcg1942的博客 1576

杂记123

Josephu约瑟夫环问题为:设编号为1,2,…n的n个人围坐一圈,约定编号为k(1

weixin_44273367的博客 182

TwinCAT报SSE invalid operation错误

错误类型 TwinCAT程序中报出以下错误: 严重性 代码 说明 项目 文件 行 禁止显示状态 错误 **** 383 ms | 'Port_851' (851): Exception (Exception Code: 0xc0000090, SSE invalid operation) in PLC Application Untitled1 Instance, Task PlcTask (RBP: 0xffffb3016c80ecc0, RIP: 0xffffe708ee5b5f53, RSP:

akadiao的博客 4161

10种电阻综合对比——《器件手册--电阻》

可变电阻在电子设备中也有很多用途,如在收音机的音量调节电路中,通过旋转可变电阻的旋钮来改变电路中的电阻值,从而改变通过扬声器的电流,实现音量的调节。根据电阻定律,电阻R = ρ(L/S),其中ρ是导体材料的电阻率,L是导体的长度,S是导体的横截面积。比如,同样材料制成的两根电线,粗的电线电阻比细的电线电阻小,长的电线电阻比短的电线电阻大。电流采样电阻的工作原理基于欧姆定律,即电阻两端的电压与通过电阻的电流成正比,公式为 I = V/R,其中 I是电流,V是电阻两端的电压,R 是电阻值。

XU157303764的博客 3138

c++类的定义使用以及小知识杂记

c++

老赵的博客 742

【ArcGIS微课1000例】0145:如何按照自定义形状裁剪数据框?

使用绘图 工具条上的新建圆工具 可创建一个椭圆,使其包含要在该数据框中显示的数据范围。. 在基础工具工具条上单击选择元素工具 ,然后选择圆形。. 在内容列表中右键单击要裁剪的数据框,然后单击属性。. 单击裁剪选项下拉菜单,然后选择裁剪至形状。. 单击数据框属性 对话框中的数据框选项卡。还可以更改裁剪形状轮廓的边框选项。打开软件,添加配套实验数据包中。修改椭圆的属性,使其透明。. 单击所选图形的轮廓。. 单击指定形状按钮。

智慧空间实验室 953

基于X86架构的OS内核设计之杂记(二)

在用户shell进程通过系统调用read()读取按键键值时,第一次读取键值0,而内核空间中明确返回值非零,通过debug和分析汇编文件: read系统调用代码如下: int gets(char *buf) { int ch, r, i = 0; do{ r = read(fd_keyboard,(char*)&ch, 1); if ( ch == '\n') break; ...

wenshifang的专栏 334

WINCC7.3破解文件

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

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

嵌入式杂记(uboot启动流程,简单易懂!!!)

汇编 bic 指令,位清除指令,bicsp,sp,#7,将sp和#7取反做与运算,结果存入sp中,也就是将sp低3位清0,这个是用于sp做8字节对齐的作用

biao2488890051的博客 1353

深度学习工具包 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&#39;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(&#39;DeepLearnToolbox&#39;));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(&#39;state&#39;,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&#39;); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand(&#39;state&#39;,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 = &#39;sigm&#39;;%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, &#39;Too big error&#39;);```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(&#39;state&#39;,0)sae = saesetup([784 100]);sae.ae{1}.activation_function = &#39;sigm&#39;;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)&#39;)% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = &#39;sigm&#39;;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, &#39;Too big error&#39;);```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x&#39;,28,28,60000))/255;test_x = double(reshape(test_x&#39;,28,28,10000))/255;train_y = double(train_y&#39;);test_y = double(test_y&#39;);%% 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&#39;ll get around 1.2% errorrand(&#39;state&#39;,0)cnn.layers = { struct(&#39;type&#39;, &#39;i&#39;) %input layer struct(&#39;type&#39;, &#39;c&#39;, &#39;outputmaps&#39;, 6, &#39;kernelsize&#39;, 5) %convolution layer struct(&#39;type&#39;, &#39;s&#39;, &#39;scale&#39;, 2) %sub sampling layer struct(&#39;type&#39;, &#39;c&#39;, &#39;outputmaps&#39;, 12, &#39;kernelsize&#39;, 5) %convolution layer struct(&#39;type&#39;, &#39;s&#39;, &#39;scale&#39;, 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, &#39;Too big error&#39;);```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(&#39;state&#39;,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, &#39;Too big error&#39;);%% ex2 neural net with L2 weight decayrand(&#39;state&#39;,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, &#39;Too big error&#39;);%% ex3 neural net with dropoutrand(&#39;state&#39;,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, &#39;Too big error&#39;);%% ex4 neural net with sigmoid activation functionrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.activation_function = &#39;sigm&#39;; % 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, &#39;Too big error&#39;);%% ex5 plotting functionalityrand(&#39;state&#39;,0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = &#39;softmax&#39;; % 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, &#39;Too big error&#39;);%% 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(&#39;state&#39;,0)nn = nnsetup([784 20 10]); nn.output = &#39;softmax&#39;; % 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, &#39;Too big error&#39;);```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

DEBUG命令的应用

TAG:随笔杂记下面对一些常用指令进行详细剖析: A (Assemble) 汇编指令1,输入汇编语句被汇编到内存的指定区段,此区段在开始时用A address 指定.2,所有语句输入完成后,按ENTER键返回3,完成输入后,可以用U命令观看它的机械码 D (Dump) 显示命令1,从指定的地址开始显示内容,如果没有指定地址,则从前一个D命令继续显示.2,如果没指定地址并是第一次,则从DS:1...

weixin_30266829的博客 130

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

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 

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

王爽汇编 实验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

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

CPU寻址能力为X = 13 这就是寻址宽度寻址能力为2^13=8192byte=8KB那么寻址范围就是0 --- 8191一根数据线传送1位bit(0或1)8根=1byte  16根=2byte  32根=4byte8bit = 1byte 1024byte = 1kb1024kb  =  1MB1024MB  =  1GB1024GB  =  1TB8086CPU寻址问题段地址 *

孤云出岫, 去留一无所系. 朗镜悬空,静躁两不相干. 1183
上一篇: 王爽汇编 实验14读取CMOS RAM时间信息
下一篇: 汇编学习杂记(14~17章)
TypeCool
博客等级 码龄22年 58粉丝 93原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值