① 要访问特殊功能寄存器和片外数据存储器,可采用哪些寻址方式
特殊功辩搭拦能寄存器只能直接寻址
片外数据存储器只能间接寻址,只能通过DPTR或R0和R1向A传送
MOVXA@DPTR
MOVXA@R0/@R1
MOVX@DPTRA
MOVX@R0/携胡@R1A
这是由指令规定的,所以只要枝闭记住是这么回事就行了,不要问为什么。
② HTTPS和HTTP有什么区别,到底安全在哪里
在上网获取信息的过程中,我们接触最多的信息加密传输方式悉肆也莫过于 HTTPS 了。每当访问一个站点,浏览器的地址栏中出现绿色图标时,意味着该站点支持 HTTPS 信息传输方式。HTTPS 是我们常见的 HTTP 协议与某个加密协议的混合体,也就是 HTTP+S。这个 S 可以是 TLS(安全传输层协议)、也可以是 SSL(安全套接层),不过我更认可另一个抽象概括的说法,HTTP+Security。
首先,HTTPS并不是这种加密技术的正式名称,HTTPS代表的是“在TLS/SSL上实现的HTTP协议”,因此实现加密的其实是位于HTTP下面的TLS/SSL层。
我们看看TLS/SSL所实现的几个主要机制:
1. 证书:通过第三方权威证书颁发机构(如VeriSign)验证和担保网站的身份,防止他人伪造网站身份与不知情的用户建立加密连接。
2. 密钥交换:通过公钥(非对称)加密在网站服务器和用户之间协商生成一个共同的会话密钥。
3. 会话加密:通过机制(2)协商的会话密钥,用对称加密算法对会话的内容进行加密。
4. 消息校验:通过消息校验算法来防止加密信息在传输过程中被篡改。
通过上述机制,用户与网站之间的传输内容受到了保护,因此能够获得很高的安全性。不过,任何密码学手段都不是绝对安全的,上面几个机制中其实都存在可能的风险:
1. 证书:如果有人伪造证书,浏览器会发出警告,提示用户该网站的证书可能是伪造的,应该停止访问,但如果你无视浏览器的警告,你的会话信息就有可能被伪造者窃取。此外,如果第三方证书颁发机构遭到攻击,攻击者窃取了已颁发的证书密钥,就可以伪造相应的网站证书,完全骗过浏览器的安全机制,这样的例子的确曾经发生过。
2. 密钥交换:RSA,这是一种最普遍使用的公钥加密算法,一般来说安全性很高。
3. 会话加密:AES-256(CBC Mode),这是一种非常广泛使用的加密算法,采用256位密钥代表其安全性很高,如果采用128位密钥(AES-128)则安全性就差一些。
4. 消息校验:SHA1,这是一种散列算法,SHA1的安全性比MD5要好,但如果采用SHA256则安全性会更好一些。
上面很抽象是不是,我们用“传纸条”这个人人小时候都做过的事来形象的说明一下。
HTTP
假设你现在正坐在教室里上课,现在你非常想和走道旁的迷人的 TA 说一些话,一般这个时候你会用“传纸条”的方式来交流。而这个方式和 TCP/IP 协议基本的工作模式十分相像:
通过小动作引起对方注意;
对方以多种可能的方式(注视、肢体语言等)回应于你;
你确认对方感知到你后,将纸条传给对方;
对方阅读纸条;
对方给予你阅读后的反应;
怎么样,这个流程是不是很熟悉?
如果你要传递纸条的 TA 距离你很远怎么办?HTTP 协议就是指你在纸条上写明你要传给的 TA 是谁,或者 TA 的座位在哪,接着只需要途径的同学拿到纸条后根据纸毕兄条上的指示依次将纸条传过去就 OK 了。
这个时候问题来了:途径的同学完全可以观看并知道你在纸条上写了什么。
这就是 HTTP 传输所面临的问题之一:中间人攻击,指消息传递的过程中,处在传递路径上的攻击者手陆袭可以嗅探或者窃听传输数据的内容。
HTTPS
HTTPS 针对这个问题,采用了“加密”的方式来解决。最着名原始的加密方法就是对称加密算法了,就是双方约定一个暗号,用什么字母替换什么字母之类的。现在一般采用一种叫 AES(高级加密算法)的对称算法。
对称加密算法既指加密和解密需要使用的密钥 key 是一样的。
AES 在数学上保证了,只要你使用的 key 足够长,破解几乎是不可能的(除非光子计算机造出来了)
我们先假设在没有密钥 key 的情况下,密文是无法被破解的,然后再回到这个教室。你将用 AES 加密后的内容噌噌噌地写在了纸条上,正要传出去的时候你突然想到,TA 没有 key 怎么解密内容呀,或者说,应该怎么把 key 给TA?
如果把 key 也写在纸条上,那么中间人照样可以破解窃听纸条内容。也许在现实环境中你有其他办法可以把 key 通过某种安全的渠道送到 TA 的手里,但是互联网上的实现难度就比较大了,毕竟不管怎样,数据都要经过那些路由。
于是聪明的人类发明了另一种加密算法——非对称加密算法。这种加密算法会生成两个密钥(key1 和 key2)。凡是 key1 加密的数据,key1 自身不能解密,需要 key2 才能解密;凡事 key2 加密的数据,key2 自身不能解密,只有 key1 才能解密。
目前这种算法有很多中,最常用的是 RSA。其基于的数学原理是:
两个大素数的乘积很容易算,但是用这个乘积去算出是哪两个素数相乘就很复杂了。好在以目前的技术,分解大数的素因确实比较困难,尤其是当这个大数足够大的时候(通常使用2的10次方个二进制位那么大),就算是超级计算机,解密也需要非常长的时间。
现在就把这种非对称加密的方法应用在我们教室传纸条的场景里。
你在写纸条内容之前先用 RSA 技术生成了一对密钥 k1 和 k2。
你把 k1 用明文传了出去,路经也许有人会截取,但是没有用,k1 加密的数据需要 k2 才可以破解,而 k2 在你自己手中。
k1 传到了目的人,目的人会去准备一个接下来准备用于对称加密(AES)的传输密钥 key,然后用收到的 k1 把 key 加密,传给你。
你用手上的 k2 解出 key 后,全教室只有你和你的目的人拥有这个对称加密的 key,你们俩就可以尽情聊天不怕窃听啦~
这里也许你会有问题,为什么不直接用非对称加密来加密信息,而是加密 AES 的 key 呢?因为非对称加密和解密的平均消耗时间比较长,为了节省时间提高效率,我们通常只是用它来交换密钥,而非直接传输数据。
然而使用非对称加密真的可以防范中间人攻击吗?虽然看上去很安全,但是实际上却挡不住可恶的中间人攻击。
假设你是 A,你的目的地是 B,现在要途径一个恶意同学M。中间人的恶意之处在于它会伪装成你的目标。
当你要和 B 完成第一次密钥交换的时候,M 把纸条扣了下来,假装自己是B并伪造了一个 key,然后用你发来的 k1 加密了 key 发还给你。
你以为你和 B 完成了密钥交换,实际上你是和 M 完成了密钥交换。
同事 M 和 B 完成一次密钥交换,让 B 以为和 A 你完成了密钥交换。
现在整体的加密流程变成了A(加密链接1)->M(明文)->B(加密链接2)的情况了,这时候 M 依然可以知道A和B传输的全部消息。
这个时候就是体现 HTTPS 和传纸条的区别了。在教室里,你是和一位与你身份几乎对等的的对象来通信;而在访问网站时,对方往往是一个比较大(或者知名)的服务者,他们有充沛的资源,或许他们可以向你证明他们的合法性。
此时我们需要引入一个非常权威的第三方,一个专门用来认证网站合法性的组织,可以叫做 CA(Certificate Authority)。各个网站服务商可以向 CA 申请证书,使得他们在建立安全连接时可以带上 CA 的签名。而 CA 得安全性是由操作系统或者浏览器来认证的。
你的 Windows、Mac、Linux、Chrome、Safari 等会在安装的时候带上一个他们认为安全的 CA 证书列表,只有和你建立安全连接的网站带有这些CA的签名,操作系统和浏览器才会认为这个链接是安全的,否则就有可能遭到中间人攻击。
一旦某个 CA 颁发的证书被用于的非法途径,那么这个 CA 之前颁发过的所有证书都将被视为不安全的,这让所有 CA 在颁发证书时都十分小心,所以 CA 证书在通常情况下是值得信任的。
正如声网agora.io Web SDK考虑数据安全问题,限制了http访问getUserMedia接口,只能通过https方式访问。所以会出现用http在Chrome浏览器(47以上版本)中访问Agora服务失败,我该怎么办?
Agora Web解决方案基于WebRTC技术建立浏览器间的音视频通信,在WebRTC协议中,浏览器通过getUserMedia接口获取视频(通过摄像头)和音频(通过麦克风)数据,Google Chrome是支持WebRTC的主流浏览器之一,在v47及以上版本,考虑到数据安全问题,限制了http访问getUserMedia接口,只能通过https方式访问。除了chrome浏览器外,Opera浏览器在v34版本后也跟进了对http的限制,Firefox暂时没有此更新。但是考虑到https是WebRTC协议推荐的安全访问方式,建议客户统一通过https来访问Agora Web服务,也能兼容各浏览器平台。
③ 问一个关于寻址模式的问题
仅供参考:
a、不考虑displacement mode的话,其它各寻址模式只涉及寄存器r0-r7,那么单个的oprand中用3位来表示r0-r7即可以了,但是若指令需要
两个或更多的oprand,则需考虑是否需要额外的位来表示哪个是source oprand哪个是target等等,尽管原题问的是一个操作数的位数,但不
知前述的额外位是否是作为oprand的一部分。
b、
i) 以通常对immediate方式的理解来说,此问答案应该是r7。
后面补充说明 Operand is the next word (after the currently executing instruction) 中的“当前执行的指令”如果理解成是不包含
oprand部分的仅指令代码部分,那么答案r7是没有疑义的。
但是若把“当前执行的指令”理解成包含了操作数的一整条指令,则好像这一问却是在指要寻址PC所指向的内存单元(这不符合通常对
immediate mode的理解),如此的话,答案好像似乎该是(r7)了。
所以若可能,不妨请出题的人稍微说明一下;若不能说明,也许答r7把握似乎大点。
ii) 类似前一问,如果“the next word”后没写出的“(after the currently executing instruction)”也是指不包含oprand部分的仅指令代码
部分,那么此题答案就是(r7)。其实看到这里,感觉题目只能这样理解才对。所以前面那题答案应该就是r7。
iii) d(r7),和你答案一致
iv) @d(r7),和你答案一致
c、对前述4种情况,注意到在指令执行过程中,作为代码指针的r7指向的是下条指令的位置,要避免执行将操作数作为指令执行,须在寻址后
修正r7的内容,即对b中4种情况分别加上4种衍生的寻址模式所需要的操作数部分占用的内存单元的数态烂量,使之指向下一条指令的指令部分所
在的内存位置。(不知道我的理解是否对)
d、按题目意思,
i) 不使用寄存器变量时:
访问立即数4,因为该假想计算机没有把立即数作为oprand的寻址模式,所以该立即数必须存在内存单元里,或者放在可由框架指针r5再加上
某个displacement来访问的内存处。这样,可能的方式是用 d(r5) 作为操作数,通过 displacement mode 方式来寻址。
顺便考虑一种特殊情况,即要访问的内存单元正好就是框架指针所指的位置,此时若仍使用displacement mode来寻址,则 d 应该是0,按
displacement mode的语法来表示,就是 0(r5);这时其实也可用 register indirect 模式来访问此内存单元,即(r5)。尽管在表示上只差了
个0,但其实用的是两种寻址模式。以下的讨论中,对各个所需访问的内存变量,都可能存在这样的情况,即其中的某一个有可能正好是在
(r5)处,对此变量则可以使败闭悔用 register indirect 模式访问即可,而其它内存变量则仍需使用displacement mode。为避免啰嗦,下面的讨论
中不再考虑正好是在(r5)处的情况。
访问变量 i :用displacement方式的察正话,假定框架指针r5指向的内存位置与i所在的内存之间还有d个字的displacement,则此时需要的操作
数是 d(r5)
pi是指针变量,访问 pi 本身,可通过displacement方式,即d(r5),其中d为r5所指内存位置到pi所在位置之间的displacement
访问*pi(即pi指向的内存),用displacement indirect方式,即@d(r5)
访问*(pi+1)在前述的d非0时(即r5所指的位置处不是pi所在的内存单元),是没有直接的寻址方式可以访问的,此时必须通过3条指令实现:
先用某个寄存器(例如r4)存放pi(这步可以通过dislacement indirect方式实现,即 r4 = @d(r5),之后再用register模式的指令将 r4 加1
,最后再用register indirect方式得到 @(r4) 处的 *(pi+1)。要注意的是,后两步无法通过autoincrement indirect方式的@(r4)+实现,因
为@(r4)+是先取@(r4),再将r4+1,所以取得的结果不是*(pi+1)而是*pi。
ppi是双重指针变量,本身可以通过displacement方式访问,即d(r5),其中d为r5所指内存位置到ppi所在位置之间的displacement。
访问**ppi,无法使用一条指令做到,须先用某寄存器如r4通过dislacement indirect方式得到*ppi,即 r4 = @d(r5),再通过register
indirect方式得到 (r4) 处的 **ppi。
**(ppi+1),先通过displacement方式实现 r4 = d(r5)即r4 = ppi,再通过register方式实现r4 = r4+1,再通过dislacement indirect得到
@0(r4) 处的 **(ppi+1),最后一步也可用autoincrement indirect即 @(r4)+ 实现
*(*ppi+1),先r4 = (r5) 即*ppi,然后r4 = r4+1 即 r4 = *ppi+1,然后通过register indirect得到 (r4) 处的 *(*ppi+1)
(ii) 当 i, pi,和 ppi 都是寄存器变量时(假定 i、pi、ppi分别在r1、r2、r3中)
立即数4,访问方式同(i)中的情况
变量i:以register mode直接得到r1即可
*pi:通过register indirect mode得到 (r2) 即可
*(pi+1):先 register mode 使 r2 = r2+1,然后 register indirect mode得到 (r2) 处的 *(pi+1)
**ppi:可由两种方式访问:方式1用d=0的displacement indirect,即 @0(r3);方式2用autoincrement indirect,即@(r3)+,但后者执行后r3中的值即ppi也发生了变化
**(ppi+1):先 register mode 使 r3 = r3+1,然后displacement indirect @0(r3) 即可访问**(ppi+1)
*(*ppi+1):先 register indirect mode 使 r4=(r3) 即 *ppi,然后 register mode 使 r4=r4+1 即 r4=*ppi+1,最后再用 @0(r4) 或者 @(r4)+ 得到 *(*ppi+1)
水平有限,还请仔细推敲后自行决定答案。
④ plc300中sm0.0什么意思
位存储器又称内部线圈。
M0.0只是一个Byte.Bit的访问方式而已,只是一个位变量,其存储的数据长度为1个位。在目前的编程方式下,标签化编程已经渐渐成为主流,程序员不用关心变量对应的PLC地址了,程序员只需要关心数据类型和业务逻辑了。
辅助继电器M0.0在程序内部使用,不能提供外部输出。输入继电器I0.0为接收外部输入设备的信号。输出继电器Q0.0为输出程序执行结果并驱动外部设备。西门子特殊存储器(SM)标志位:SM0.0-PLC上电运行时,该位始终为1(始终为ON)。SM0.1-该位在首次扫描时为1,用途之一是调用初始化子程序。SM0.1、SM0.0是这两个是西门子PLC的特殊存储器。SM0.0:上电后该位始终为1。SM0.1:该位在首次扫描时为1,为0,用途之一是调用初始化子程序。
⑤ 51单片机内部RAM
51单片机内部RAM具体要看产品配置。
分为两种情况:
1:如果片内只有128字节的RAM,则访问RAM使用直接或者间接寻址方式,地址为00H-7FH,在80H-FFH的空间分配给了SFR,只能使用直接寻址方式。
2:片内RAM为256字节时,低128字节(00H-7FH)的访问方式为直接和间接寻址方式,高128字节(地址80H-FFH)只能使用间接寻址方式。
SFR的地址也为80H-FFH,但只能使用直接寻址方式。
具体产品有详细的说明书。
⑥ bios禁用sata原理
BIOS禁用SATA的原理是通过BIOS设置界面中的相关选项将SATA接口的功能关闭。SATA是一种硬盘接口标准,如果禁用SATA,则计算机将无法访问SATA接口上的硬盘。
在BIOS设置界面中,可以找到SATA选项,通常有两种模式:AHCI模式和IDE模式。AHCI模式是一种高级主机控制器接口,可以提供更好的性能和可靠性,而IDE模式是一种旧的硬盘控制器接口,常用于早期的计算机中。
如果将SATA接口禁用,计算机将无法访问任何连接到SATA接口的硬盘驱动器。这意味着,如果您想要启动操作系统,则必须使用其他接口,比如IDE接口或USB接口。但是,禁用SATA接口可能会导致性能下降,因颂汪为其他接口可能无法提供与SATA相同的速度和可靠性。
总之,禁用SATA接口可以在某些情况下提供更好的安全性和可靠轮桐性,但也可能会影响计野桐仔算机的性能。在禁用SATA接口之前,请确保您已经理解了相关的影响,并根据您的具体需求进行决策。
⑦ 要访问特殊功能寄存器和片外数据存储器,可采用哪些寻址方式
采用直接寻址方式。
位寻址也可,但是这仍然属于直接寻址。
不能用寄存器寻址和寄存器间接寻址。
在指令格式的地址的字段中直接指出操作数在内存的地址。由于操作数的地址直接给出而不需要经过某种变换,所以称这种寻址方式为直接寻址方式。在指令中直接给出参与运算的操作数及运算结果所存放的主存地址,即在指令中直接给出有效地址。
(7)特殊继存器访问方式有扩展阅读:
在直接寻址中,指令操作数字段中存放的是操作数的16位偏移地址EA,即操作数的偏移地址EA和操作码一起存放在代码段中,而操作数可以存放在数据段,也可以存放在其它段,操作数的物理地址由其所在段的寄存器内容左移4位与指令中给出的偏移地址EA相加形成。
物理地址PH=(DS)*10H+EA(Disp)EA可以用符号或数值表示。如果用数值表示EA则必须用括号括起来,而且是在方括号前应给出段寄存器名,直接寻址的操作数可以是字或字节。
⑧ AT89S52的存储器
MCS-51器件有单独的程序存储器和数据存储器。外部程序存储器和数据存储器都可以64K寻址。
程序存储器:如果EA引脚接地,程序读取只从外部袜键伍存储器开始。
对于 89S52,如果EA 接VCC,程序读写先从内部存储器(地址为0000H~1FFFH)开始,接告或着从外部寻址,寻址地址为:2000H~FFFFH。
数据存储器:AT89S52 有256 字节片内数据存储器。高128 字节与特殊功能寄存器重叠。也就是说高128字节与特殊亮纤功能寄存器有相同的地址,而物理上是分开的。
当一条指令访问高于7FH 的地址时,寻址方式决定CPU 访问高128 字节RAM 还是特殊功能寄存器空间。直接寻址方式访问特殊功能寄存器(SFR)。
例如,下面的直接寻址指令访问0A0H(P2口)存储单元MOV 0A0H , #data使用间接寻址方式访问高128 字节RAM。例如,下面的间接寻址方式中,R0 内容为0A0H,访问的是地址0A0H的寄存器,而不是P2口(它的地址也是0A0H)。
MOV @R0 , #data堆栈操作也是间接寻址方式。因此,高128字节数据RAM也可用于堆栈空间。