汇编语言知识(王爽第四版)

news2024/11/28 23:40:07

汇编语言,当然,我们学习是在c语言的基础上,那么,我们就先复习一下c语言的知识
C语言的基础,进制转换必不可少
数组,函数……
接下来,我们学习了数据结构:顺序表,链表,排序,查找,队列……
那么,我们就正式开始学习汇编语言吧
寄存器分类:
通用寄存器:AX,BX,CX,DX
变址寄存器:SI,DI
指针寄存器:SP,BP
指令指针寄存器:IP
段寄存器:CS,SS,DS,ES
标志寄存器:PSW

目录

第一章基础知识

第二章寄存器

第三章寄存器(内存访问)

第四章第一个程序

第五章[BX]和loop指令

第六章包含多个段的程序

第七章更灵活的定位地址的方法

第八章数据处理的两个基本问题

第九章转移指令的原理

第十章CALL和RET指令

第十一章标志寄存器

第十二章内中断

第十三章int指令

第十四章端口

第十五章外中断

第十六章直接定址表

第十七章使用BIOS进行键盘输入和磁盘读写

第一章基础知识

内容:对硬件系统结构的问题进行一部分探究
知识点:
1.1机器语言和汇编语言
机器语言: 机器能识别的程序语言或指令代码,用二进制表示
汇编语言:用来定义计算机程序的形式语言,用来向计算机发出指令
机器语言是计算机能直接运行的语言,是二进制语言,属于低级语言;汇编语言是面向机器的低级语言,不能被机器直接识别,需要编译
1.2用汇编语言编写程序的工作过程:
     fa0ea3d212d0461d82e5fa837a283837.jpeg
1.3.存储单元

聊到存储单元,那么我们首先要了解到,一个二进制位是1bit,8bit=1byte,就是一个字节是8个bit, 

45a6420c9e664bc58bd247c72317fad0.png

1.4.总线

 47f9a5ef02724ec98a780101d86c7a69.jpeg

1.5.内存地址空间

第二章寄存器


2.1通用寄存器

7d5cbfa01c884a72b82df5ee424fb7d9.png

注意:指令的两个对象位数一致 

2.2段寄存器

内存没有分段,段的划分来自cpu

用一个段存放代码,叫“代码段”

用一个段存放数据,叫“数据段”

用一个段存放栈,叫“栈段”

2.3汇编指令

 80f50ec3fb0445ac8fded2ae18bf119a.jpeg

2.4物理地址

物理地址=段地址*16+偏移地址

2.5CS和IP

CS:IP
CS:代码段寄存器
IP:指令指针寄存器
8086cpu工作过程:
1.从CS:IP指向的内存单元读取指令,读取的指令进入指令爱冲器
2.IP=IP+所读取指令的长度,从而指向下一条指令
3.执行指令。转到步骤(1),重复这个过程
修改CS,IP
1.    debug中修改:-r cs或者-r ip
2.    同时修改:jmp 段地址:偏移地址
3.    修改ip  jmp 某一合法寄存器、
 

第三章寄存器(内存访问)

   

 3.1内存中字的存储x

 16位的字在内存中需要2个连续字节存储,存放方式如下:

389caffd02ec4e8c8c96c85efc450aca.jpeg

3.2DS

DS寄存器:存放访问数据的段地址

mov bx,1000H    读取

mov ds,bx           放入

mov al,[0]           传送

上面三条指令将1000H(1000:0)中的数据读到al中

3.3mov,add,sub指令

 mov  寄存器   数据
mov  寄存器   寄存器
mov  寄存器   内存单元
mov  内存单元  寄存器
mov  段寄存器  寄存器
mov  寄存器  段寄存器

add  寄存器   数据
add  寄存器   寄存器
add  寄存器   内存单元
add  内存单元  寄存器

sub  寄存器   数据
sub  寄存器   寄存器
sub  寄存器   内存单元
sub  内存单元  寄存器

    

注意:段寄存器只能mov。段寄存器是代码指令,相当于领导,领导不干活,负责指挥,干活的是数据段里的数据,向哪个方向干,用IP指方向,说白了就是移动内存位置的

 3.4栈
栈是一种只能在一段进入插入或者删除的数据结构

如今的cpu中都有栈的设计(将内存当作栈) 

8ae1c5f484d44bfab946eb3e6ecf8b33.jpeg

96c6f5933ac147279c05bc557a5cc332.jpeg

3.5栈顶越界问题

1.当栈满的时候使用push指令入栈

2.当栈空的时候使用pop指令出栈

3.6push,pop指令 

push 寄存器      将一个寄存器中的数据入栈

pop 寄存器        出栈,用一个寄存器接收出栈的数据

第四章第一个程序

4.1一个源程序从写出到执行的过程

1.编写汇编源程序

2.对源程序进行编译连接

3.执行可执行文件中的程序

b459fd1813c0448ca4bd03eda33566a3.png

文本编辑->源程序文件(.asm)->编译->目标文件(.obj)->连接->可执行文件(.exe)->运行程序 

4.2源程序

 baa654eb48e14bf18f577f6608edda1b.png

第五章[BX]和loop指令

799c0e3637604dcd8e1345803298c6ca.png

[...]--(汇编语法规定)表示一个内存单元

()--(为方便学习做出的约定)表示一个寄存器或一个内存单元中的内容

()里面的元素可以是寄存器名,段寄存器名,内存单元的物理地址(一个二十位的数据)

()里面表示的数据的类型可以是字节或字

mov ax,[0]     这个内存单元两个字节

mov al,[0]      这个内存单元一个字节

用[0]表示一个内存单元时,0表示单元的偏移地址,段地址默认在ds中,单元的长度(类型)可以由具体指令中的其他操作对象(比如寄存器)指出

5.1[BX]

mov ax,[BX]

功能:bx中存放的数据作为一个偏移地址EA,段地址SA默认在ds中,将ax中的数据送入SA:EA中 

5.2loop指令

操作过程:(cx)=(cx)-1

                   判断cx中的值,不为0则转至标号处执行程序,如果为0向下执行

loop指令实现循环功能,cx存放循环次数

5.3段前缀

用于显式地指明内存单元的段地址的

5.4一段安全的空间

如果我们需要向為在空回写入数据的话,要使用操作系统给我什众配的空间,而不应该直接的用地址任意指定内存单元

硬件已经被这些操作系统利用CPU保护模式所提供的功能全面而严格的管理了

如果0:200-0:2f单元的内容都是0的话,则证明DOS和共他合法的程序没有使用这里。

1)我们需要直接向一段内存中写入内容;

2)这段内存空间不应存放系统或其他程序的数据或代码,否则写入操作很可能引发错误

3)DOS方式下,一般情况,0:200-0:2f空间中没有系统或其他程序的数据或代码

4)以后,我们需要直接向一段内存中写入内容时,就使用0200-0-2 这段空间。

第六章包含多个段的程序

程序取得所需空间的方法:

在加载程序的时候为程序分配(通过在源程序中定义段来进行内存空间的获取)

程序在执行的过程中向系统申请

dw––定义一个字(16个字节)

db––定义一个字节

dd––定义一个双字

6.1在代码段中使用数据

 

单任务系统中,可执行文件中的程序执行过程:

由其他的程序(Debug、command或其他程序)将可执行文件中的程序加载入内存;

设置CS:IP指向程序的第一条要执行的指令(即程序的入口),从而使程序得以运行;

程序运行结束后,返回到加载者

6.2将数据,代码,栈放入不同的段

注意:

用data等命名,并不是让CPU去执行data段里的内容,这些名称和s,s0一样,仅仅在源程序中存在,CPU并不知道它们

assume cs:data,将cs与data段相连,并不代表cpu将cs指向data(assume是伪指令,是由编译器执行的,也是仅在源程子中存在的信息CPU并不知道它们。它将你定义的具有定用途的段和相关的寄存器联系起来)

第七章更灵活的定位地址的方法

7.1and和or指令

add指令:逻辑与指令,按位进行运算 

or指令:逻辑与指令,按位进行运算  

 

7.2ASCII码

按下键盘的a,在屏幕上显示的过程:

7.3以字符形式给出的数据

用'...'的方式指明数据是以字符的形式给出的,编译器将把他们转化为相应的ASCII码

7.4[bx+idata]

[bx+idata]表示一个内存单元,它的偏移地址

例子:mov ax,[bx+200]

将一个内存单元的内容送入ax,偏移地址为bx中的数值加上200

7.5SI和DI

         

7.6[bx+si]和[bx+di]

mov ax,[bx+si]=mov ax,[bx][si]

将一个内存单元的内容送入ax,偏移地址为bx中的数值加上si

7.7[bx+si+idata]和[bx+di+idata]

mov ax,[bx+si]

将一个内存单元的内容送入ax,偏移地址为bx中的数值加上si

7.8不同的寻址方式的灵活应用

   (1)[idata]用一个常量来表示地址,可用于直接定位一个内存单元;

(2)[bx]用一个变量来表示内存地址,可用于间接定位一个内存单元:
(3)[bxtidata]用一个变量和常量表示地址,可在一个起始地址的基础上用变量间接定位一个内存单元;
(4)[bx+si]用两个变量表示地址;
(5)[bx+sitidata]用两个变量和一个常量表示地址。

第八章数据处理的两个基本问题

1.处理的数据在什么地方

2.要处理的数据有多长

8.1bx,si,di,bp

只有这四个寄存器可以用在[...]中来进行内存单元的寻址(bx以外的通用寄存器,段寄存器不可以用在[...]中)

8.2机器指令处理的数据在什么地方

数据的位置:

1.立即数

对于直接包含在机器指令中的数据(执行前在CPU的指令缓冲器中),在汇编语言中称
为:立即数

 

2.寄存器

指令要处理的数据在寄存器中,在汇编指令中给出相应的寄存器名

3.段地址(SA)和偏移地址(EA) 

指令要处理的数据在内存中,在汇编指令中可用[X]的格式给出EA,SA 在某个段寄
存器中。

8.3指令要处理的数据有多长

1.通过寄存器名指明要处理的数据的尺寸

bx,ax是字

al,bl是字节

2.在没有寄存器名存在的情况下,用操作符X ptr指明内存单元的长度,X在汇编指令中可以为word或byte

word ptr字单元

byte ptr字节单元

在没有寄在器参与的内存单元访间指令中,用word pt 或byte ptr显性地指明所要访问的内存单元的长度是很必要的。否则,CPU无法得知所要访问的单元是字单元,还是字节单元

3.其他方法

push指令只能进行字操作

8.4div指令(除法指令)

格式:

div reg(寄存器)

div 内存单元 

8.5dup

dup是一个操作符,在汇编语言中同db,dw,dd等,也是由编译器识别处理的符号,与db,dw,dd配合使用,用来进行数据的重复

db 重复的次数 dup(重复的字节型数据)

dw 重复的次数 dup(重复的字型数据)

dd 重复的次数 dup(重复的双字型数据)

例子:

db 3 dup(0)定义3个字节,值都是0,相当于db 0,0,0

db 3 dup(0,1,2)定义9个字节,值是10,1,2,0,1,2,0,1,2,相当于db 0,1,2,0,1,2,0,1,2

db 3 dup(‘abc’,‘ABC')定义18个字节,值是abcABCabcABCabcABC,相当于db ’abcABCabcABCabcABC-‘

第九章转移指令的原理

背景:一般情况下指令是顺序地逐条执行的,而在实际中,常需要改变程序的执行流程

转移指令:

1.可以控制CPU执行内存中某处代码的指令

2.可以修改IP,或同时修改CS和IP的指令

8086的转移行为有以下几类。
只修改IP时,称为段内转移比如:jmpax。
同时修改CS和IP时,称为段间转移比如:jmp 1000:0。
由于转移指令对IP的修改范围不同段内转移又分为:短转移和近
短转移IP的修改范围为-128~127。
近转移IP的修改范围为-32768-32767。
8086CPU的转移指分为以下几类。
无条件转移指令(如:jmp)
条件转移指令
循环指令(如:loop)
过程
中断

9.1操作符offset

offset:由编译器处理的符号

功能:取得符号的偏移地址

start mov ax,offset start相当于mov ax,0

9.2jmp指令

jmp:无条件转移指令,可以只改变IP,也可以同时修改CS和IP

jmp指令要给出两种信息:

(1)转移的目的地址

(2)转移的距离(段间转移,段内短转移,段内近转移)

1.依据位移进行转移的jmp指令

引子:常见指令中的立即数均在机器指令中有体现

jmp short 标号(转到标号处执行指令)

8位位移=标号处的地址-jmp指令后的第一个字节的地址:
(2)short指明此处的位移为8位位移;
(3)8位位移的范围为-128-127,用补码表示
(4)8位位移由编译程序在编译时算出。

jmp near ptr标号     指明了相对于当前IP的转移位移

1)16位位移-标号处的地址jmp指令后的第一个字节的地址:
2)near ptr指明此处的位移为16位位移,进行的是段内近转移;
(3)16位位移的范围为-32768~32767,用补码表示;
(4)16位位移由编译程序在编译时算出。

问:jmp short指令中,转移到了哪里

:jmp short 的机器指令中,包含的是跳转到指令的相对位置,而不是指令的目标位置

CPU在执行jmp指令的时候并不需要转移到目的地址

CPU不需要这个目的地址就可以实现对IP的修改

jmp far ptr标号    实现的是段间转移(远转移)

(CS)=标号所在段的段地址

(IP)=标号在段中的偏移地址

far ptr指明了指令用标号的段地址和偏移地址修改CS和IP

2.转移地址在寄存器中的jmp指令

指令格式:jmp 16位reg

功能:IP=16位reg

3.转移地址在内存中的jmp指令

jmp word ptr

功能:从内存单元地址处开始存放着一个字》是转移的目的偏移地址。
内存单元地址可用寻址方式的任一格式给出

jmp dword ptr

功能:从内存单元地址处开始存放着两个字,高地址处的字是转移的目的段地as sume
地址处是转移的目的偏移地址。)
(CS)=(内存单元地址+2)
(IP)=(内存单元地址)
内存单元地址可用寻址方式的任一格式给出

 

9.3jcxz指令

jcxz指令:有条件转移指令,所有的有条件转移指令都是短指令,在对应的机器码中包含转移的位移,而不是目的地址。对IP的修改范围都为:-128~127。
指令格式:jcxz标号(好果(ex)=0.转移到标号处执行。
操作:当(Cx)=0时,(IP)=(IP)+8位位移:
8位位移一标号处的地址-jcxz指令后的第一个字节的地址;
8位位移的范围为-128-127,用补码表示;
8位位移由编译程序在编译时算出。
我们从jcxz的功能中可以看出,“jxz标号”的功能相当于:
if((cx)==0)jmp short标号;

9.4根据位移进行移位的意义

在它们对应的机器码中不包含转移的目的地址,而包含的是到目的地址的位移

1.如果loop s的机器码中包含的是s的地址,则就对程序段在内存中的偏移地址有了严格的限制,易引发错误

2.当机器码中包含的是转移的位移,无论s处指令的实际地址是多少,loop指令转移的相对位移是不变的

第十章CALL和RET指令

10.1ret和retf

ret指令:用栈中的数据,修改IP的内容,从而实现近距离    pop IP

retf指令: 用栈中的数据,修改CS和IP的内容,从而实现远距离    pop IP     pop CS

10.2call指令

CPU执行call指令操作:

将当前的IP或CS和IP压入栈中

转移

call far ptr标号   实现的是段间转移

10.3mul指令

乘法指令

格式:

mul reg

mul 内存单元

10.4参数和结果传递的问题

子程序一般都要根据提供的参数处理一定的事务,处理后,将结果(返回值)提供给调用者

10.5寄存器冲突的问题

CX--既用于循环,又用于读取数据

(1)编写调用子程序的程序的时候不必关心子程序到底使用了哪些寄存器
(2)编写子程序的时候不必关心调用者使用了哪些寄存器:
(3)不会发生寄存器冲突。
解决这个问题的简捷方法是,在子程序的开始将子程序中所有用到的寄存器中的内容都保存起来,在子程序返回前再恢复。可以用栈来保存寄存器中的内容。

第十一章标志寄存器

PSW/FLAGS别称:程序状态字

作用:

用来存储相关指令的某些执行结果:
(2)用来为CPU执行相关指令提供行为依据:
(3)用来控制CPU的相关工作方式。
flag寄存器是按位起作用的,也就是说,它的每一位都有专门的含义,记录特定的信息

flag的1,3,5,12,13,14,15位在8086CPU中没有使用

11.1ZF标志

零标志位

它记录相关指令执行后,其结果是否为0.

0-- >zf=1

结果不为0-->zf=0

11.2PF标志

奇偶标志位

它记录相关指令执行后,其结果的所有bit位中1的个数是否为偶数(结果的所有二进制位中1的个数)

1的个数为偶数-- >pf=1

1的个数为奇数-- >pf=0

11.3SF标志

符号标志位

它记录相关指令执行后,其结果是否为负

结果为负-- >sf=1

结果非负-->sf=0

11.4CF标志

进位标志位 

它记录无符号数运算结果的最高有效位向更高位的进位值,或从更高位的错位值

对于位数为N的无符号数来说,其对应的二进制信息的最高位,即第N-1位,就是add
它的最高有效位,而假想存在的第N位,就是相对于最高有效位的更高位。

11.5OF标志

在进行有符号数运算的时候,如结果超过了机器所能表示的范围称为溢出

溢出标志位

发生溢出OF=1

没有溢出OF=0

CF和OF的区别:

CF是无符号数运算有意义的标志位

OF是有符号数运算有意义的标志位

11.6adc标志

带进位加法指令,它利用了CF位上记录的进位值。
指令格式:adc操作对象1,操作对象2
功能:操作对象1=操作对象1+操作对象2+CF
比如指令adc ax,bx实现的功能是:(ax)-(ax)+(bx)+CF

11.7sbb标志

带借位减法指令,它利用了CF位上记录的借位值
指令格式:sbb操作对象1,操作对象2
功能:操作对象1=操作对象1-操作对象CF
比如指令sbb ax,bx实现的功能是:(ax)=(ax)-(bx)-CF

11.8cmp标志

比较指令,cmp的功能相当于减法指令,是不保在结果cmp 指令执行后,较结果进行记录
将对标志寄存器产生影响。其他相关指令通过识别这些被影响的标志寄存器位来得知比较结果
cmp指令格式:cmp操作对象1,操作对象2
功能:计算操作对象1操作对象2但并不保存结果仅仅根据计算结果对标志寄存器进行设置。

11.9DF标志和串传送指令

方向标志位

在串处理指令中,控制每次操作后si,di的增减

df=0,每次操作后si,di递增

df=1,每次操作后si,di递减

11.11pushf和popf

直接访问标志寄存器的 方法:

pushf:将标志寄存器的值压栈

popf:从栈中弹出数据,送入标志寄存器中

第十二章内中断

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

内中断:由CPU内部发生的事件而引起的中断

外中断:由外部设备发生的事件而引起的中断

12.1内中断的产生,中断处理程序,中断向量表

cpu内部有下面的情况发生的时候,将产生相应的中断信息

1.除法错误

2.单步执行

3.执行into指令

4.执行int指令

CPU在收到中断信息后,转去执行该中断信息的处理程序

中断处理程序在哪里?中断信息和共处理程序的入口地址之间建立某种联系,使得CPU根据中断信息可以找到要执行的处理程序

中断向量表:CPU用8位的中断类型码通过中断向量表找到相应的中断处理程序的入口地址

12.2单步中断

程序的正常执行:取指令,改变CS:IP,执行指令,取指令

第十三章int指令

13.1int指令

int指令的格式为:int n,n为中断类型码

功能:引发中断过程

CPU执行int 指令,相当于引发一个n号中断的中断过程,执行过程如下。
(1)取中断类型码n;0三鲜天
(2)标志寄存器入栈,IF=0,TF-O;
(3) CS、IP入栈
(4) (IP)=(n*4),(CS)=(n*4+2)。

int指令的最终功能和call指令相似,都是调用一段程序

一般情况下,系统将一些具有一定功能的子程序,以中断处理程序的方式提供给应用程序调用

13.2BIOS和DOS

BIOS:

(1)硬件系统的检测和初始化程序:

(2)外部中断和内部中断的中断例程

(3)用于对硬件设备进行IO操作的中断例程:
(4)其他和硬件系统相关的中断例程。


第十四章端口

在PC机系统中,和CPU通过总线相连的芯片除各种存储器外,还有以下3种芯片。
(1)各种接口卡(比如,网卡、显卡上的接口芯片,它们控制接口卡进行工作:
(2)主板上的接口芯片,CPU通过它们对部分外设进行访问:
(3)其他芯片,用来存储相关的系统信息,或进行相关的输入输出处理。
在这些芯片中,都有一组可以由CPU 读写的睿存婴这些寄存器,它们在物理上可能处于不同的芯片中,但是它们在以下两点上相同。
(1)都和CPU的总线相连,当然这种连接是通过它们所在的芯片进行的:
(2)CPU对它们进行读或写的时候都通过控制线向它们所在的芯片发出端口读写命令。
CPU可以直接读写以下3个地方的数据。
(1)CPU内部的寄存器
(2)内存单元
(3)端口

第十五章外中断

15.1外中断

1.可屏蔽中断

CPU可以不分配的外中断

来自CPU外部

(1)取中断类型码n:
(2)标志寄存器入栈,IF-0,TF=0:
(3)CS、IP入栈;
(4) (P)=(n*4), (CS)-(n*4+2)

2.不可屏蔽中断

中断类型码固定为2

(1)标志奇仔器人栈>TF-0H-0:
(2)CDP人栈
(3)(P=(8),(CS)=(0AH)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2186565.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C++】——类和对象(上)

【C】——类和对象(上) 文章目录 【C】——类和对象(上)前言1. 类的定义1.1 类定义格式1.2 访问限定符1.3 类域 2. 实例化2.1 实例化概念2.2 对象的大小 3. this指针4. C和C语言实现Stack对比结语 前言 小伙伴们大家好呀,今天我们就开始学习C的重点及难点——类和对…

华为云+WordPress+Puock主题搭建个人博客

网站访问地址:qingxuly.cn 搭建网站 购买华为云服务器,购买域名,进行备案,配置域名解析等操作,请参考华为云文档。 安装Ubuntu系统 华为云控制台中给云服务器安装Ubuntu2204。 配置服务器安全组 华为云安全组中创建安…

用HTML CSS JS打造企业级官网-源码直接可用

页面效果&#xff1a;本前端网站应用多个JS特效 1.index.html&#xff1a; <!DOCTYPE html> <html lang"zxx"> <head><title>蓝网团队</title><meta name"viewport" content"widthdevice-width, initial-scale1&q…

C++之多线程

前言 多线程和多进程是并发编程的两个核心概念,它们在现代计算中都非常重要,尤其是在需要处理大量数据、提高程序性能和响应能力的场景中。 多线程的重要性: 资源利用率:多线程可以在单个进程中同时执行多个任务,这可以更有效地利用CPU资源,特别是在多核处理器上。 性…

量化交易backtrader实践(三)_指标与策略篇(2)_内置指标A开头

在第1节中&#xff0c;我们学习了移动平均线的原理&#xff0c;中位数以及正态分布的概念&#xff0c;并通过python手工做了一个双均线的策略回测。了解了怎么用pandas计算移动平均线&#xff08;rollingmean)&#xff0c;怎么得到某一列上1个的值&#xff08;shift)&#xff0…

DOM树(上) -- 第七课

文章目录 前言一、DOM是什么&#xff1f;二、基础用法1.DOM树2. 获取元素1. id2. 标签3. name4. HTMLS新增的获取的方法1. 根据类型获取2. 根据querySelector获取 3. 事件基础1. 概述2. 事件三要素3. 操作元素内容1. 操作内容2. 操作属性3. 案例 4. 操作元素样式5. 案例 -- 显示…

【JDK动态代理】JDK动态代理:为何只能代理接口和接口实现类

在Java开发中&#xff0c;JDK动态代理是一种非常有用的技术&#xff0c;它允许开发者在不修改目标类代码的情况下&#xff0c;为目标类添加额外的功能。然而&#xff0c;JDK动态代理的使用有一些限制&#xff0c;特别是它只能代理接口和接口实现类。本文将深入探讨这一限制的原…

​IAR全面支持国科环宇AS32X系列RISC-V车规MCU

全球领先的嵌入式系统开发软件解决方案供应商IAR与北京国科环宇科技股份有限公司&#xff08;以下简称”国科环宇”&#xff09;联合宣布&#xff0c;最新版本IAR Embedded Workbench for RISC-V将全面支持国科环宇AS32X系列RISC-V MCU&#xff0c;双方将共同助力中国汽车行业开…

云原生(四十一) | 阿里云ECS服务器介绍

文章目录 阿里云ECS服务器介绍 一、云计算概述 二、什么是公有云 三、公有云优缺点 1、优点 2、缺点 四、公有云品牌 五、市场占有率 六、阿里云ECS概述 七、阿里云ECS特点 阿里云ECS服务器介绍 一、云计算概述 云计算是一种按使用量付费的模式&#xff0c;这种模式…

捕获Net-NTLM HASH 实验

1. Responder监听 sudo ./Responder.py -I eth0 -wv2. 触发NTLM请求 0x01. LLMNR && NBNS协议 winR : //asdasdasd0x02. 打印机漏洞 krbrelayx下的printerbug.py&#xff1a; 注意&#xff0c;这个凭据不是DC的&#xff0c;只要是个域用户都可以。后面是攻击目标&…

Linux中的进程间通信之管道

管道 管道是Unix中最古老的进程间通信的形式。 我们把从一个进程连接到另一个进程的一个数据流称为一个“管道” 匿名管道 #include <unistd.h> 功能:创建一无名管道 原型 int pipe(int fd[2]); 参数 fd&#xff1a;文件描述符数组,其中fd[0]表示读端, fd[1]表示写端 …

p2p、分布式,区块链笔记: Libp2p分散打孔 2022 IEEE 第 42 届分布式计算系统国际会议研讨会 (ICDCSW)

Decentralized Hole Punching 我们提出了一种内置于对等网络库 libp2p [1] 中的去中心化打洞机制。打洞对于对等网络至关重要&#xff0c;它使每个参与者能够直接与任何其他参与者通信&#xff0c;尽管被防火墙和 NAT 隔开。去中心化的 libp2p 打洞协议利用了类似于 STUN&…

Vivado - BD(差分时钟、简单分频、RESET、KEY)

目录 1. 简介 1.1 要点 1.2 buffer 介绍 2. vivado 工程 2.1 Block Design 2.2 IBUFDS 2.3 BUFGCE_DIV 2.4 Processor System Reset 2.5 key_mod 2.6 led_drv 3. 编译与调试 3.1 XDC 3.2 Debug 4. 总结 1. 简介 1.1 要点 了解 Utility Buffer v2.2 中的 Buffer…

关于HTML 案例_个人简历展示01

案例效果展示 代码 <!DOCTYPE html> <lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>个人简历信息</title> </he…

C语言高阶【1】--动态内存管理【1】(可以灵活的申请和使用内存,它不香吗?)

本章概述 为什么要有动态内存分配&#xff1f;malloc函数和free函数calloc函数和realloc函数常见的动态内存的错误彩蛋时刻&#xff01;&#xff01;&#xff01; 为什么要有动态内存分配&#xff1f; 情况描述&#xff1a;当我们创建一个变量时&#xff0c;比如&#xff0c;i…

《中安未来护照阅读器 —— 机场高效通行的智慧之选》

在机场&#xff0c;高效与准确的旅客信息处理至关重要。中安未来护照阅读器&#xff0c;为机场带来全新的智能化体验。它能够快速准确地读取护照信息&#xff0c;自动识别多种证件类型&#xff0c;极大提高了值机、安检等环节的效率。无论是繁忙的国际航站楼&#xff0c;还是国…

51单片机的串口

目录 一、串口的介绍 1、硬件电路 二、51单片机的UART 1、串口参数及时序图 2、串口模式图 3、串口和中断系统结构图 4、串口相关寄存器 三、串口向电脑发送数据 1、通过STC-ISP软件 四、电脑通过串口控制LED 1、主函数 2、 UART串口通信模块 一、串口的介绍 串口是一…

倒排索引是什么

倒排索引 简单了解&#xff1a; 什么是正向索引? 基于文档id创建索引。查询词条时必须先找到文档&#xff0c;而后判断是否包含词条 什么是倒排索引? 对文档内容分词&#xff0c;对词条创建索引&#xff0c;并记录词条所在文档的信息。查询时先根据词条查询到文档id&#…

C++和OpenGL实现3D游戏编程【连载13】——多重纹理混合详解

🔥C++和OpenGL实现3D游戏编程【目录】 1、本节要实现的内容 前面说过纹理贴图能够大幅提升游戏画面质量,但纹理贴图是没有叠加的。在一些游戏场景中,要求将非常不同的多个纹理(如泥泞的褐色地面、绿草植密布的地面、碎石遍布的地面)叠加(混合)起来显示,实现纹理间能…

WPS(金山文档)与金蝶云星空通过HTTP实现连接

WPS(金山文档)通过HTTP与金蝶云星空实现数据互通 该方式不需要通过金蝶SDK webapi官方文档地址&#xff1a;https://vip.kingdee.com/article/407944297573586944?langzh-CN&productLineId1&isKnowledge2 一、两种方式 airscript脚本发送http请求和PY脚本编辑器发送…