JS如何实现方法监听?

JavaScript019

JS如何实现方法监听?,第1张

监听方法在js中的实现如下:function addEventListener(string eventFlag, function eventFunc, [bool useCapture=false])eventFlag : 事件名称,如click、mouseover…eventFunc: 绑定到事件中执行的动作useCapture: 指定是否绑定在捕获阶段,true为是,false为否,默认为true在事件监听流中可以使用event.stopPropagation()来阻止事件继续往下流IE中使用自有的attachEvent函数绑定时间,函数定义如下:function attachEvent(string eventFlag, function eventFunc)eventFlag: 事件名称,但要加上on,如onclick、onmouseover…eventFunc: 绑定到事件中执行的动作在事件监听流中可以使用window.event.cacenlBubble=false来阻止事件继续往下流总结:addEventListener(string eventFlag, function eventFunc, [bool useCapture=false]),针对ff,chrome,safari浏览器,false指冒泡阶段,默认为true,指捕获阶段。不过一般我们都用false。 attachEvent(string eventFlag, function eventFunc),针对ie系列、还有opera浏览器,少了事件处理机制的参数,只指定事件类型(别忘了on)和触发哪个函数。

@ 无条件转移bai指令(共4条)

LJMP addr16 ; PC〈—du— addr16

AJMP addr11 ; PC〈—— PC+2 , PC10-0〈—— addr11

SJMP rel ; PC〈—— PC+2 , PC 〈—— PC+rel

JMP @A+DPTR ; PC〈—— A+DPTR

第一条指zhi令称为长转移指令(Long Jump);

第二条指令叫作绝对转移指令(Absolute Jump);

第三条指令称作短转移指令(Short Jump);

第四条指令是变址寻址转移指令(散转指令)。

显然,每条指令均以改变程序计数器PC(Program Counter)中的内容为宗旨。

#(1)长转移指令(64KB范围内转移指令)

长转移指令的功能是:把指令码中的目标地址addr16装入程序计数器PC,使机器执行下一条指令时无条件转移到addr16处执行程序,不影响任何标志。由于addr16是一个16位二进制地址(地址范围为0000H—FFFFH),因此长转移指令一条可以在64KB范围内转移的指令。为了使程序设计方便易编,addr16常采用标号地址(如:LOOP、LOOP1、MAIN、START、DONE、NEXT1……)表示,只有在上机执行前才被汇编(或代真)为16位二进制地址。

长转移指令为三字节,双周期指令。

#(2)绝对转移指令(2KB范围内的转移指令)

绝对转移指令是一条双字节双周期指令,11位地址addr11(a10—a0)在指令中的分布是:

a10 a9 a8 0 0 0 1|a7 a6 a5 a4 a3 a2 a1 a0,其中,00001B是操作码。在程序设计中,11位地址也可以用符号表示,但在上机执行前必须按照上述指令格式加以代真。

绝对转移指令执行时分为两步:

第一步是取指令操作,程序计数器PC中内容被加1两次;

第二步是把PC加2后的高5为地址PC15—PC11和指令代码中低11位构成目标转移地址:PC15—PC11 a10 a9 a8 a7 a6 a5 a4 a3 a2 a1 a0

其中,a10—a0的地址范围是全“0”——全“1”。因此,绝对转移指令可以在2KB范围内向前或向后跳转。

如果把单片机64KB寻址区分成32页(每页2KB),则PC15—PC11(00000B—11111B)称为页面地址(即:0页—31页),a10—a0称为页内地址,但应注意:AJMP指令的目标转移地址不是和AJMP指令地址在同一个2KB区域,而是应和AJMP指令取出后的PC地址(即:PC+2)在同一个2KB区域。例如:若AJMP指令地址为2FFEH,则PC+2=3000H,故目标转移地址必在3000H—37FFH这2KB区域中。

#(3)短转移指令(-126—+129范围内的转移指令)

短转移指令的功能是先使程序计数器PC加1两次(即:取出指令码),然后把加2后的地址和rel相加作为目标转移地址。因此,短转移指令是一条相对转移指令,是一条双字节双周期指令,指令码格式为:80H rel(操作码 地址偏移量),这里,80H是SJMP指令的操作码;rel是地址偏移量,在程序中也常采用符号地址,上机运行前才被代真成二进制形式。

遇到具体问题时,头脑中一定要清楚一个关系式:目标转移地址=源地址+2+rel

#(4)变址寻址转移指令(只能在256个存储器单元内转移)

这是一条单字节双周期无条件转移指令。

在指令执行之前,用户应预先把目标转移地址的基地址送入DPTR,目标转移地址对基地址的偏移量放在累加器A中。在指令执行时,MCS-51单片机把DPTR中基地址和累加器A中地址偏移量相加,以形成目标转移地址送入程序计数器PC中。

通常,DPTR中基地址是一个确定的值,常常是一张转移指令表的起始地址,累加器A中之值为表的偏移量地址,机器通过变址寻址转移指令便可实现程序的分支转移

原文链接:https://zhidao.baidu.com/question/391202121358751485.html

打开CSDN,阅读体验更佳

51单片机汇编语言指令汇总_C.L.R的博客_51汇编

一、数据传送类指令 1.以累加器为目的操作数指令 MOV A,Rn MOV A,@Ri MOV A,direct MOV A,#data 2.以Rn为目的操作数的指令 MOV Rn,A MOV Rn,direct MOV Rn,#data 3.以直接地址为目的操作数指令 MOV direct,A MOV direc...

51单片机汇编入门基础代码-流水灯_TC肖的博客

2、跳转指令 1.短转移类指令AJMP addr11 2.长转移类指令LJMP addr16 3.相对转移指令SJMP rel 它们都用于指令跳转,从当前位置跳转到后面的地址位(一般为自己拟了名字的地址如DELAY:)。(它们的差别在于跳转的范围:LJMP一下能跳64Kb。...

单片机跳转指令学习

基于pic16f87x单片机的跳转指令学习

51单片机的汇编语言

51单片机的汇编语言操作指令总结 1.指令格式 【标号:】操作码 目的操作数 ,源操作数;注释 如:LOOP:MOV A, 33H将33H输入到累加器A中 2.ORG xxxxH命令 是指向程序不同功能固定入口,如: 0000H----系统复位入口 0013H—外中断1入口 0003H—外部中断0入口 001BH—T1溢出中断入口 000BH—T0溢出中断入口 0023H串口中断入口 3.控制转移类指令 (1)无条件转移指令—执行到该指令时无条件跳转 LJMP长转移指令:三字节指令提供16位目

继续访问

51单片机指令详解_凌烟慕鱼的博客

51单片机指令详解 数据传递类指令 1 以累加器为目的操作数的指令 MOV A,Rn MOV A,direct MOV A,@Ri MOV A,#data 第一条指令中,Rn代表的是R0-R7。第二条指令中,direct就是指的直接地址,而第三条指令中,就是我们刚才讲过的...

第3 章 MCS-51 单片机指令系统_杨丙寅的博客

寻址方式——计算机指令中说明操作数所在地址的方法。MCS-51 单片机的指令系统有 7 种寻址方式,分别为立即寻址、直接寻址、寄存器寻址、 寄存器间接寻址、基址加变址寻址、相对寻址和位寻址。

编程 ul 不能一行显示 跳到下行_数控编程代码及其使用方法—「UG编程」

G代码代码名称-功能简述G00------快速定位G01------直线插补G02------顺时针方向圆弧插补G03------逆时针方向圆弧插补G04------定时暂停G05------通过中间点圆弧插补G07------Z 样条曲线插补G08------进给加速G09------进给减速G20------子程序调用G22------半径尺寸编程方式G220-----系统操作界面上使用G2...

继续访问

最新发布 51的指令系统

51单片机共有111条指令。可以大致分为以下五类: (1)数据传送类(29条) (2)算术操作类(24条) (3)逻辑运算类(25条) (4)控制转移类(17条) (5)位操作类(17条) 可用的指令是固定的、每种指令对应一个物理电路的实际运行过程,如果指令是指令集中不存在的,电路内部无法实现,指令就会出错。 数据传送类指令 一般形式为 MOV <目的操作数>, <源操作数>操作码包括MOV、MOVC、MOVX、PUSH、POP、XCH、XCHD、SWAP。 (1)首先是MOV

继续访问

51单片机原理及汇编教程(二)之汇编常用指令数,数据传输指令及寻址方式...

1、MOV指令 ① MOV R0 , #20H   #后面是立即数,要和地址区分开,20H是一个16进制的数。这句话的意思是将20H这个数送入寄存器R0中。直接寻址 ② MOV 30H , @R0   R0里面放的数,以这个数位地址,将这个地址里面的数...

51单片机学习__X2的博客

51单片机指令集 *51指令不区分大小写 1个机器周期=12个时钟振荡周期 只有乘除两条指令的执行时间为4个机器周期 指令由两部分组成:操作码+操作数 指令系统的寻址方式 共7种寻址方式 寄存器寻址方式 ...

条件跳转指令总结

指令 全称 cmp a,b flag条件 jz/je jump if zero/equal a=b ZF=1 jnz/jne jump if not zero/equal a!=b ZF=0 jb/jnae/jc jump if below/not above or equal/carry a<b,无符号数 CF=1 ja/jnbe jump if above/not below or equal a>b,无符号数 jna/jbe jump if not ab...

继续访问

条件跳转指令

条件跳转指令 指令 条件 指令 条件 ja CF=0 AND ZF=0 jnc CF=0 jab CF=0 jne ZF=0 jb CF=1 jng ZF=1 OR SF!=OF jbe CF=1 OR ZF=1 jnge SF=OS jc CF=1 jnl SF=OF jcxz CX=0 jn

继续访问

单片机c语言有没有跳转指令,51单片机跳转指令

@ 无条件转移bai指令(共4条)LJMP addr16 ; PC〈—du— addr16AJMP addr11 ; PC〈—— PC+2 , PC10-0〈—— addr11SJMP rel ; PC〈—— PC+2 , PC 〈—— PC+relJMP @A+DPTR ; PC〈—— A+DPTR第一条指zhi令称为长转移指令(Long Jump);第二条指令叫作绝对转移指令(Absolute...

继续访问

51单片机汇编指令

注: Rn与Ri中n=0 ~ 7,i=0 ~ 1 内部数据传送指令 助记符 作用 寻址方式 机器周期 字节数 MOV A,Rn 将Rn的内容传送给A 寄存器 1 1 MOV A,direct direct是一个地址单元,将该地址的内容传送给A 直接 1 2 MOV A @Ri Ri中存储了一个地址,将该地址的内容传送给A 寄存器间接 1 1 MOV A #data 将data传送到A 立即数 1 2 ...

继续访问

汇编指令长度计算

指令长度与寻址方式有关系,规律或原则如下: 一、没有操作数的指令,指令长度为1字节。如 es: ds: cbw xlat 等。 二、操作数只涉及寄存器的指令,指令长度为2字节。如 mov al,[si] mov ax,[bx+si] mov ds,ax 等。 三、操作数涉及内存地址的指令,指令长度为3字节。如 mov al,[bx+1] mov ax,[bx+si+3] lea di,[1234] mov [2345],ax 等。 四、操作数涉及立即数的指令,指令长度为:寄存器类型+2。 8位寄存器,寄存器

继续访问

C51单片机汇编程序问题解决:

C51汇编程序出错解决最近开始学习了一点汇编语言,刚好应课程要求,就来编一些简单的C51程序,结果在定时器中断跳转的时候出错了,错误截图如下:demo.asm(8): error A51: TARGET OUT OF RANGE源程序代码块是报错在CJNE指令这里ORG 000BH INC R1 CJNE R1,#4000,MAINLOOP

继续访问

单片机iap跳转(超详细教程,简单好学,看了秒懂)

iap跳转的作用:使用boot作为app升级,通常使用串口ymodem协议进行更新app,boot一般是占用很小的flash 大约可以设置16kb,然后设置app的地址,设置相对的偏移地址后跳转到app ymodem协议:https://mp.csdn.net/mp_blog/creation/editor/122768524 几个注意的点: 1.关闭中断之后,进入app要开启中断 2.看门狗被开启之后,将永远不会被关闭,所以要做好喂狗的处理 3.一般存在设置向量表的函数,跳转之后要设置相关的向

继续访问

51单片机c语言访问外部rom,51单片机资源扩展:从片内ROM跳转到片外ROM

源于一年前想自己动手给51写个OS,编译选Large模式,调试时整个流程都跑的好好的,可是烧写到片上后得不到预期的效果,后来查书才知道51单片机片上只有4KRom,如果没有扩展片外Rom,当访问4K以外的程序空间,程序指针又会回到最开始执行。参考手册扩展片外Rom后,能访问达64K的程序空间。网上能搜索到的扩展方式都是将EA引脚接地,让MCU上电后从外部ROM开始执行。但查看芯片手册,明明说EA为...

继续访问

c语言的程序跳转,单片机中用c语言如何编写跳转程序

这个要用到软件的pwm,因为51的没有硬件的pwm所以只好自己写软件的了。首先,要做一个软件三角波发生器子程序,频率自己定,就是变亮变暗的周期。此函数的返回值作为pwm的输入值。再做一个pwm的模拟程序,占空比(0-100)是三角波发生器的输出,pwm模拟程序控制某个端口输出1和0的占空比来控制灯 的明暗。pwm的思路是:检查设置值是否不等于0,是则端口置1,程序开始加1计数,计数后检查计数值是否...

继续访问

C51 main 函数学习以及函数跳转

1.C51main函数深入学习,有如下代码: #include "reg52.h" /************* 本地变量声明 **************/ typedef void (*pFunction)(void)pFunction Jump_To_Applicationunsigned int JumpAddressunsigned int a=0char iv

继续访问

热门推荐 51单片机之控制转移指令SJMP、LJMP等

文章目录前言一、无条件转移指令LJMP addr16AJMP addr11SJMP relJMP @A + DPTR关于SJMP、AJMP、LJMP的选择二、条件转移指令JZ rel 前言 控制指令是将程序跳转到某个指定的地址,在顺序执行 控制指令是通过修改PC的内容来实现跳转的功能 PC的内容是将要执行的下一跳指令的地址 一、无条件转移指令 LJMP英文全称:Absolute Jump AJ...

继续访问

8051单片机原理学习

8051单片机原理学习单片机结构框图参考 单片机结构框图 51单片机的结构框图如下所示 51单片机主要组成部件有: 8bit微处理器(CPU): 主要进行算术运行和逻辑控制 片内4KB程序存储器(4KB ROM): 用以可执行程序,只读数据和表格 片内256B数据存储器(256B RAM): 用于存放可读写数据,如算术运行的中间值和最终值等 4个8位并行I/O口(输入/输出口) P0 ~ P3: 每个并口可以用作输入,也可以用作输出 2个定时/计数器:每个定时/计数器可以设置为计数方式,也可以设置为定时

继续访问

c51语言主函数,C51 main 函数学习以及函数跳转

C51main函数深入学习,有如下代码:#include "reg52.h"/*************本地变量声明**************/typedefvoid (*pFunction)(void)pFunctionJump_To_Applicationunsigned int JumpAddressunsigned int a=0char ivoid test(){while(...

继续访问

学 Win32 汇编[28] - 跳转指令: JMP、JECXZ、JA、JB、JG、JL、JE、JZ、JS、JC、JO、JP 等...

跳转指令分三类: 一、无条件跳转: JMP二、根据 CX、ECX 寄存器的值跳转: JCXZ(CX 为 0 则跳转)、JECXZ(ECX 为 0 则跳转)三、根据 EFLAGS 寄存器的标志位跳转, 这个太多了. 根据标志位跳转的指令: JE 等于则跳转 JNE 不等于则跳转 JZ 为 0 则跳转 JNZ 不为 0 则跳转 JS...

继续访问

汇编语言转换c51语言,51单片机汇编语言:控制转移指令有哪些?

跳转指令短跳指令 AJMP addr11PC←addr11,跳转范围2k长跳指令 LJMP addr16PC←addr16,跳转范围64k间接跳转指令 JMP @A+DPTRPC←(A)+(DPTR)相对转移指令 SJMP rel条件转移指令JZ rel ;(A)=0,转移JNZ rel ;(A)≠0,转移JC rel ;

最经典的实现字符数控制的方案

当我们在ASP.NET开发时,经常会遇到一个头疼的问题:字符数的控制

由于数据库的字段长度是固定的,因此在进行字符输入时,最关键的就是控制字符的个数不能超过字段的长度,要不然,一个个异常会让人疯掉的。

对于单行文本框,不管是HTML控件还是Web控件,我们经常会使用MaxLength来控制,但这种控制无法控制到中文字符,即MaxLength=50的控制,可以输入50个英文与50个中文,这样的话,还是会导致中文字符数的溢出。

对于多行文本框,那就更惨了,使用MaxLenth根本不起作用的。

下面提供的方案优势:

1)最佳的方法是在文本框中输入时,控制到最大字数,超过时不能进行输入

2)对于粘帖的情况也要能兼容,以前网上的方法不能控制到paste的情况

3)对于最后的一个中文字符,宁愿舍去也不能多一个字符,比如50的字符数,在第49个时,最后输入一个中文,会导致最终字数为51,而这种情况,推荐是不能输入中文,保证最终的字符数<=50最佳,因为放弃一个中文字符总比数据库报错要好吧。

4)为了提高开发效率,尽可能的减少代码量,此方案不需要为文本框添加任何事件,而是由脚本块自己解决,因此只需要把脚本块饮包含到页面中就可以了,这应该是相当方便了吧

完善版修改:由于前一个方案中,一些输入法无法激活onpress事件,导致对于中文的不支持,现在采用onkeyup事件处理,在处理方式上也进行了修改,原来的onpress事件是进行输入控制,而onkeyup只能对已经输入后的字数进行字数判断,过长的进行截短处理。

在原方案中,有位朋友指出:数据采用n(type)系统不会报错,是的,如果采用n(type)的话,是以字符为基础的,可以不考虑数据库出错的可能性,但同样也存在一个界面显示的问题,比如界面上的Address值,希望是100个字符,如果不进行中英文字数区分,最多将输入100个中文,从而占200 个字节空间,导致Adress在显示时会超过预料的空间,界面搞得不易控制。因此,此方案还是有可取之处的。

具体新方案实现:

1)将以下的代码包含到页面中:

<script language="javascript">

<!--

String.prototype.len=function(){

return this.replace(/[^/x00-/xff]/g,"**").length

}

//Set maxlength for multiline TextBox

function setMaxLength(object,length)

{

var result = true

var controlid = document.selection.createRange().parentElement().id

var controlValue = document.selection.createRange().text

var tempString=object.value

var tt=""

for(var i=0i<lengthi++)

{

if(tt.len()<length)

tt=tempString.substr(0,i+1)

else

break

}

if(tt.len()>length)

tt=tt.substr(0,tt.length-1)

object.value=tt

}

//Check maxlength for multiline TextBox when paste

function limitPaste(object,length)

{

var tempLength = 0

if(document.selection)

{

if(document.selection.createRange().parentElement().id == object.id)

{

tempLength = document.selection.createRange().text.len()

}

}

var tempValue = window.clipboardData.getData("Text")

tempLength = object.value.len() + tempValue.len() - tempLength

if (tempLength >length)

{

tempLength -= length

var tt=""

for(var i=0i<tempValue.len()-tempLengthi++)

{

if(tt.len()<(tempValue.len()-tempLength))

tt=tempValue.substr(0,i+1)

else

break

}

if(tt.len()<=0)

{

window.event.returnValue=false

}

else

{

tempValue=tt

window.clipboardData.setData("Text", tempValue)

window.event.returnValue = true

}

}

}

function PressLength()

{

if(event.srcElement.type=="text" || event.srcElement.type=="textarea" )

{

if(event.srcElement.length!=null)

setMaxLength(event.srcElement,event.srcElement.length)

}

}

function LimitLength()

{

if(event.srcElement.type=="text" || event.srcElement.type=="textarea" )

{

if(event.srcElement.length!=null)

limitPaste(event.srcElement,event.srcElement.length)

}

}

document.documentElement.attachEvent('onkeyup', PressLength)

document.documentElement.attachEvent('onpaste', LimitLength)

//-->

</script>

2)在需要控制的控件上添加length="n"(n为要控制的字数)即可,如:

<INPUT type="text" length="3"><TEXTAREA length="20" rows="2" cols="20"></TEXTAREA><asp:TextBox id="TextBox1" runat="server" length="7"></asp:TextBox><asp:TextBox id="TextBox2" runat="server" TextMode="MultiLine" length="10"></asp:TextBox>上面是HTML控件与Web控件的例子,只要加一个length就可以了。

个人建议:1)可以把这个脚本块放在js文件中,进行引用即可

2)可以把脚本放在BasePage中,这样每个页面都可以使用了

3)可以使用这些脚本块,开发专门的服务器端控件。