【汇编语言】流程转移和子程序

【汇编语言】流程转移和子程序


`

文章目录

  • 【汇编语言】流程转移和子程序
  • 前言
  • 一、“转移”综述
  • 二、操作符offset
  • 三、jmp指令
    • jmp指令——无条件转移
    • jmp指令:依据位移进行转移
    • 两种段内转移
    • 远转移:jmp far ptr 标号
    • 转移地址在寄存器中的jmp指令
    • 转移地址在内存中的jmp指令
    • jmp 指令小结
  • 四、其他转移指令
    • jcxz指令
    • loop指令
    • 根据位移进行“相对”转移的意义
  • 五、call 指令和 ret 指令
    • 模块化程序设计
    • call 指令
    • 指令“call far ptr 标号”实现的是段间转移
    • 转移地址在寄存器中的call指令
    • 转移地址在内存中的call指令
    • 返回指令:ret 和 retf
    • 执行过程
  • 六、call 和 ret 配合使用
    • 具有子程序的源程序的框架
    • call 和 ret 配合使用
    • 为call和ret指令设置栈
  • 七、乘法:mul 指令
    • 回顾:除法div指令
    • 用mul指令做乘法
    • 应用案例
  • 八、汇编语言模块化程序设计
    • 模块化程序设计
    • 参数和结果传递的问题
    • 用寄存器来储存参数和结果是最常使用的方法
    • 用内存单元批量传递数据
    • 用栈传递参数
    • 程序的执行过程中栈的变化
    • 小结:参数和结果传递的问题
  • 九、寄存器冲突问题
    • 引子
    • 编程将data段中的字符串转化为大写
    • 寄存器冲突问题的解决
    • 寄存器冲突问题的解决示例
  • 十、标志寄存器
    • 认识标志寄存器的特殊之处
    • ZF-零标志(Zero Flag)
    • PF-奇偶标志(Parity Flag)
    • SF-符号标志(Sign Flag)
    • CF-进位标志(Carry Flag)
    • OF-溢出标志(Overflow Flag)
    • 综合:一条指令会带来多个标志寄存器的变化
  • 十一、带进(借)位的加减法
    • adc带进位加法指令
    • adc指令应用:大数相加
    • 128 位数据相加
    • sbb 指令
  • 十二、cmp与条件转移指令
    • cmp指令
    • 无符号数比较与标志位取值
    • 有符号数比较与标志位取值
    • 条件转移指令
    • 条件转移指令的使用
  • 十三、条件转移指令的应用
    • 应用案例
  • 十四、DF标志和串传送指令
    • 问题分析
    • DF标志和串传送指令
    • rep指令
    • 应用实例
  • 总结


前言

在本篇文章当中我们将详细讲到,转移的综述,操作符offset,jmp指令,其他转移指令,call指令和ret指令,call指令和ret指令的配合使用,mul指令,汇编语言的模块化程序设计,寄存器冲突的问题和解决方法,标志寄存器,带进(借)位的加减法,cmp和条件转移指令,条件转移指令的应用,DF标志和串传送指令。


一、“转移”综述

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

转移指令:
可以控制CPU执行内存中某处代码的指令
可以修改IP,或同时修改CS和IP的指令
例:
在这里插入图片描述

转移指令分类:
在这里插入图片描述


二、操作符offset

用操作符offset取得标号的偏移地址****
格式:
offset 标号
例:
在这里插入图片描述
在这里插入图片描述

练习:
问题:有如下程序段,添写2条指令,使该程序在运行中将s处的一条指令复制到s0处
这边我已经给出了。
nop的机器码占一个字节,起“占位”作用在这里插入图片描述
我们来分析一下:
1)s和s0处的指令所在的内存单元的地址是多少?
cs:offset s 和cs:offset s0。
2)将s处的指令复制到s0处,就是________
就是将cs:offset s 处的数据复制到cs:offset s0处。
3)地址如何表示?
段地址已知在cs中,偏移地址已经送入si和di中。
4)要复制的数据有多长?
mov ax,bx指令的长度为两字节,即一个字


三、jmp指令

jmp指令——无条件转移

无条件转移,可以只修改IP,也可以同时修改CS和IP

jmp指令要给出两种信息:
转移的目的地址
转移的距离
段间转移(远转移): jmp 2000:1000
段内短转移: jmp short 标号 ; IP的修改范围为 -128~127,8位的位移
段内近转移: jmp near ptr 标号 ; IP的修改范围为 -32768~32767,16位的位移

jmp指令:依据位移进行转移

引子:常见指令中的立即数均在机器指令中有体现
在这里插入图片描述
可以看出立即数0123在机器码中有所体现。

问题:jmp short 指令中,转移到了哪里?
—>jmp short 的机器指令中,包含的是跳转到指令的相对位置,而不是转移的目标地址。
在这里插入图片描述
在这里插入图片描述
上边程序jmp short s指令的读取和执行:
1)(IP)=0003,CS:IP指向EB 05(jmp的机器码)
2) 读取指令码EB 05进入指令缓冲器;
3)(IP)=(IP)+所读取指令的长度=(IP)+2=0005,CS:IP指向add ax,0001;
4)CPU执行指令缓冲器中的指令EB05;
5)指令 EB 05执行后,(IP)=(IP)+05=000AH,CS:IP指向inc ax
在这里插入图片描述

两种段内转移

短转移:“jmp short 标号”
功能:(IP)=(IP)+8位位移
原理:
1)8位位移=“标号”处的地址-jmp指令后的第一个字节的地址;
2)short指明此处的位移为8位位移;
3)8位位移的范围为-128~127,用补码表示;
4)8位位移由编译程序在编译时算出。
在这里插入图片描述
在这里插入图片描述

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

远转移:jmp far ptr 标号

在这里插入图片描述

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

指令格式:jmp 16位寄存器
功能:IP =(16位寄存器)
举例:
jmp ax
jmp bx
在这里插入图片描述
跳到哪儿由变量定

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

在这里插入图片描述

jmp 指令小结

在这里插入图片描述

注意:
在这里插入图片描述


四、其他转移指令

jcxz指令

指令格式:jcxz 标号
功能:如果(cx)=0,则转移到标号处执行 ; 当(cx)≠0时,什么也不做(程序向下执行)
当(cx)=0时,(IP)=(IP)+8位位移)
8位位移=“标号”处的地址-jcxz指令后的第一个字节的地址;
8位位移的范围为-128~127,用补码表示;
8位位移由编译程序在编译时算出;

jcxz是有条件转移指令
所有的有条件转移指令都是短转移
对IP的修改范围都为-128~127
在对应的机器码中包含转移的位移,而不是目的地址
例:
在这里插入图片描述

loop指令

指令格式:loop 标号
指令操作:
1)(cx)=(cx)-1;
2)当(cx)≠0时,则转移到标号处执行 ; 当(cx)=0时,程序向下执行
8位位移=“标号”处的地址-loop指令后的第一个字节的地址
8位位移的范围为-128~127,用补码表示
8位位移由编译程序在编译时算出
在这里插入图片描述
在这里插入图片描述

根据位移进行“相对”转移的意义

对 IP的修改是根据转移目的地址和转移起始地址之间的位移来进行
jmp short 标号
jmp near ptr 标号
jcxz 标号
loop 标号
在这里插入图片描述


五、call 指令和 ret 指令

模块化程序设计

C语言中我们可以实现模块化设计
在这里插入图片描述
汇编中也可以实现模块化设计
在这里插入图片描述

call 指令

字面意思:调用子程序
实质:流程转移
call指令实现转移的方法和 jmp 指令的原理相似

格式:call 标号
CPU执行call指令,进行两步操作:
1)将当前的 IP 或 CS和IP 压入栈中;
2) 转移到标号处执行指令。
在这里插入图片描述

call 标号
16位位移=“标号”处的地址-call指令后的第一个字节的地址;
16位位移的范围为 -32768~32767,用补码表示;
16位位移由编译程序在编译时算出。
在这里插入图片描述
在这里插入图片描述

指令“call far ptr 标号”实现的是段间转移

CPU执行“call far ptr 标号”时的操作
1)(sp) = (sp) – 2
((ss) ×16+(sp)) = (CS)
(sp) = (sp) – 2
2) (CS) = 标号所在的段地址
(IP) = 标号所在的偏移地址
“call far ptr 标号” 相当于
push CS
push IP
jmp far ptr 标号
在这里插入图片描述

在这里插入图片描述

转移地址在寄存器中的call指令

指令格式
call 16位寄存器
功能:
(sp) = (sp) – 2
((ss)*16+(sp)) = (IP)
(IP) = (16位寄存器)
相当于进行
push IP
jmp 16位寄存器
在这里插入图片描述

转移地址在内存中的call指令

call word ptr 内存单元地址
相当于:
push IP
jmp word ptr 内存单元地址
在这里插入图片描述

call dword ptr 内存单元地址
相当于:
push CS
push IP
jmp dword ptr 内存单元地址
在这里插入图片描述

返回指令:ret 和 retf

在这里插入图片描述

执行过程

在这里插入图片描述


六、call 和 ret 配合使用

具有子程序的源程序的框架

在这里插入图片描述

call 和 ret 配合使用

例:
计算2的N次方,计算前,N的值由CX提供。
在这里插入图片描述
在这里插入图片描述
我们在这里没有设置栈段,这是非常危险的!

为call和ret指令设置栈

这里是引用
在这里插入图片描述


七、乘法:mul 指令

回顾:除法div指令

div是除法指令,格式为:
div 寄存器
div 内存单元
使用div作除法的时候
被除数:(默认)放在AX 或 DX和AX中
除数:8位或16位,在寄存器或内存单元中
结果:…
在这里插入图片描述

用mul指令做乘法

格式:
mul 寄存器
mul 内存单元
在这里插入图片描述

应用案例

在这里插入图片描述


八、汇编语言模块化程序设计

模块化程序设计

调用子程序:call指令
返回:ret指令
子程序:根据提供的参数处理一定的事务,处理后,将结果(返回值)提供给调用者。在这里插入图片描述

参数和结果传递的问题

问题:根据提供的N,计算N的三次方。
考虑:
1)我们将参数N存储在什么地方?
2)计算得到的数值,存储在什么地方?
方案:
用寄存器传递参数
用内存单元进行参数传递
用栈传递参数
在这里插入图片描述

用寄存器来储存参数和结果是最常使用的方法

问题:根据提供的N,计算N的三次方。
考虑:
1)我们将参数N存储在什么地方?
2)计算得到的数值,存储在什么地方?
寄存器传递参数
参数放到 bx 中,即(bx)=N
子程序中用多个 mul 指令计算 N^3
将结果放到 dx 和 ax中:(dx:ax)=N^3
在这里插入图片描述

编程任务:计算data段中第一组数据的 3 次方,结果保存在后面一组dword单元中。
在这里插入图片描述
问题:
如果需要传递的数据有3个、4个或更多,寄存器不够了,怎么办?

用内存单元批量传递数据

方案:
将批量数据放到内存中,然后将它们所在内存空间的首地址放在寄存器中,传递给需要的子程序。
对于具有批量数据的返回结果,也可用同样的方法。

编程任务:
将data段中的字符串转化为大写。
在这里插入图片描述
在这里插入图片描述

用栈传递参数

原理:由调用者将需要传递给子程序的参数压入栈中,子程序从栈中取得参数
任务:计算( a – b ) ^ 3 ,a、b 为 word 型数据。
进入子程序前,参数a、b入栈
调用子程序,将使栈顶存放IP
结果:( dx : ax ) = ( a – b ) ^ 3
例:设 a = 3 、b = 1 ,计算:( a – b ) ^ 3
在这里插入图片描述
在这里插入图片描述
将bp入栈出栈后不改变先前bp的值。在这里插入图片描述
将sp回复。在这里插入图片描述

程序的执行过程中栈的变化

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

小结:参数和结果传递的问题

问题:根据提供的N,计算N的3次方。
考虑:
1)我们将参数N存储在什么地方?
2)计算得到的数值,存储在什么地方?
方案:
用寄存器传递参数
用内存单元进行参数传递
用栈传递参数


九、寄存器冲突问题

引子

在这里插入图片描述
这个12哪来的?
这样写是数出来的,有没有别的办法呢?
C语言中用\0
汇编也可以。在后边加个0,db ‘conversation’,0

编程将data段中的字符串转化为大写

在这里插入图片描述
在这里插入图片描述

在例:将以下字符串转为大写
在这里插入图片描述
写出:
在这里插入图片描述
但是这个代码有一个大问题:
cx既用于循环又用于读取数据-------冲突!!!

寄存器冲突问题的解决

两个可能方案
1)在编写调用子程序的程序时 ,注意看看子程序中有没有用到会产生冲突的寄存器。
如果有,调用者使用别的寄存器;
2)在编写子程序的时候,不要使用会产生冲突的寄存器。
在这里插入图片描述

我们希望
1)编写调用了程序的程序的时候不必关心子程序到底使用了哪些寄存器;
2)编写子程序的时候不必关心调用者使用了哪些寄存器;
3)不会发生寄存器冲突。
在这里插入图片描述

寄存器冲突问题的解决示例

这里是引用
在这里插入图片描述
在这里插入图片描述


十、标志寄存器

8086CPU有14个寄存器:
通用寄存器:AX、BX、CX、DX
变址寄存器:SI、DI
指针寄存器:SP、BP
指令指针寄存器: IP
段寄存器:CS、SS、DS、ES
标志(flag)寄存器:PSW/FLAGS别称:程序状态字
在这里插入图片描述

认识标志寄存器的特殊之处

标志寄存器的结构:
flag寄存器是按位起作用的,也就是说,它的每一位都有专门的含义,记录特定的信息。
8086CPU中没有使用flag的1、3、5、12、13、14、15位,这些位不具有任何含义。
在这里插入图片描述

标志寄存器的作用:
用来存储相关指令的某些执行结果
用来为CPU执行相关指令提供行为依据
用来控制CPU的相关工作方式
观察寄存器的值:
在这里插入图片描述
在这里插入图片描述
直接访问标志寄存器的方法
pushf:将标志寄存器的值压栈;
popf:从栈中弹出数据,送入标志寄存器中。

ZF-零标志(Zero Flag)

在这里插入图片描述

ZF标记相关指令的计算结果是否为0;
ZF=1,表示“结果是0 ”,1表示“逻辑真”
ZF=0,表示“结果不是0”,0表示“逻辑假”
例:
在这里插入图片描述
在这里插入图片描述

PF-奇偶标志(Parity Flag)

在这里插入图片描述

PF记录指令执行后,结果的所有二进制位中1 的个数
1的个数为偶数PF=1
1的个数为奇数PF=0
例:
在这里插入图片描述

SF-符号标志(Sign Flag)

在这里插入图片描述

SF记录指令执行后,将结果视为有符号数
结果为SF=1
结果为非负SF=0
例:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

CF-进位标志(Carry Flag)

在这里插入图片描述

在进行无符号数运算的时候,CF记录了运算结果的最高有效位向更高位的进位值,或从更高位的借位值
CF记录指令执行后:
有进位或借位CF = 1
无进位或借位CF = 0
例:
在这里插入图片描述
在这里插入图片描述

OF-溢出标志(Overflow Flag)

在进行有符号数运算的时候,如结果超过了机器所能表示的范围称为溢出。
OF记录有符号数操作指令执行后,
有溢出OF = 1
无溢出OF = 0
例:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

综合:一条指令会带来多个标志寄存器的变化

在这里插入图片描述
可通过Debug检验结果:
在这里插入图片描述


十一、带进(借)位的加减法

adc带进位加法指令

adc是带进位加法指令 ,它利用了CF位上记录的进位值。
adc是带进位加法指令 ,它利用了CF位上记录的进位值。
功能:操作对象1=操作对象1+操作对象2+CF
例:adc ax,bx 实现的功能是:(ax)=(ax)+(bx)+CF
实例:
在这里插入图片描述

adc指令应用:大数相加

问题:8086指令提供add指令,完成8位或16位加法,有更大的数相加时,如何做?
32位、64位、24位?
在这里插入图片描述
在这里插入图片描述

128 位数据相加

问题:编写一个子程序,对两个128位数据进行相加。
名称:add128
功能:两个逆序存放的128位数据进行相加
在这里插入图片描述
在这里插入图片描述
数据为128位,需要8个字单元,由低地址到高地址单元,依次存放由低到高的各个字。
分析:
ds:si指向存储第一个数的内存空间
ds:di指向存储第二个数的内存空间
运算结果存储在第一个数的存储空间中。
在这里插入图片描述
在这里插入图片描述
答案是不行的:
sub ax,ax将CF清零
inc di 不会影响进位,add di,2 会影响进位。

sbb 指令

sbb:带借位减法指令
格式:sbb 操作对象1,操作对象2
功能:操作对象1=操作对象1–操作对象2–CF
与sub区别:利用CF位上记录的借位值
比如:sbb ax,bx
实现功能: (ax) = (ax) – (bx) – CF
在这里插入图片描述


十二、cmp与条件转移指令

cmp指令

cmp指令
格式:cmp 操作对象1,操作对象2
功能:计算操作对象1–操作对象2
在这里插入图片描述
应用: 其他相关指令通过识别这些被影响的标志寄存器位来得知比较结果。
例如:
在这里插入图片描述

无符号数比较与标志位取值

思路:通过cmp 指令执行后相关标志位的值,可以看出比较的结果
指令:cmp ax,bx
在这里插入图片描述

有符号数比较与标志位取值

问题:用cmp来进行有符号数比较时,CPU用哪些标志位对比较结果进行记录?
示例指令:cmp ah,bh
在这里插入图片描述

条件转移指令

套路:
cmp oper1,oper2 ;或者其他影响标志寄存器的指令
jxxx 标号
在这里插入图片描述

条件转移指令的使用

jxxx系列指令和cmp指令配合,构造条件转移指令
不必再考虑cmp指令对相关标志位的影响和jxxx指令对相关标志位的检测
可以直接考虑cmp和jxxx指令配合使用时表现出来的逻辑含义
jxxx系列指令和cmp指令配合实现高级语言中if语句的功能
在这里插入图片描述


十三、条件转移指令的应用

条件转移指令:jxxx——je/jna/jae…
可以根据某种“条件”,决定是否“转移”程序执行流程
“转移”= 修改IP
如何检测条件?
通过检测标志位,由标志位体现条件
条件转移指令通常都和cmp相配合使用,cmp指令改变标志位
例:双分支结构的实现
在这里插入图片描述

应用案例

  • 给出下面一组数据:
  • 在这里插入图片描述
    请编程实现如下统计,用ax保存统计结果
    1)统计数值为8的字节的个数
    2)统计数值大于8的字节的个数
    3)统计数值小于8的字节的个数

1)编程思路:初始设置(ax)=0,然后用循环依次比较每个字节的值,找到一个和8相等的数就将ax的值加1。
在这里插入图片描述
2)初始设置(ax)=0,然后用循环依次比较每个字节的值,找到一个大于8的数就将ax的值加1。
在这里插入图片描述
3)初始设置(ax)=0,然后用循环依次比较每个字节的值,找到一个小于8的数就将ax的值加1。
在这里插入图片描述


十四、DF标志和串传送指令

问题分析

编程:将data段中的第一个字符串复制到它后面的空间中。
在这里插入图片描述
在这里插入图片描述
这是我们之前写过的代码,在这情况下能在简洁吗?

DF标志和串传送指令

在这里插入图片描述

DF-方向标志位(Direction Flag)
功能
在串处理指令中,控制每次操作后si,di的增减。
DF = 0:每次操作后si,di递增
DF = 1:每次操作后si,di递减
对DF位进行设置的指令
cld指令:将标志寄存器的DF位设为0(clear)
std指令:将标志寄存器的DF位设为1(setup)

串传送指令1:movsb
功能:(以字节为单位传送)
1)((es))*16+(di))=((ds)*16+(si))
2) 如果DF = 0则: (si) = (si) + 1 ; (di) = (di) + 1
如果DF = 1则:(si) = (si) - 1 ; (di) = (di) - 1
串传送指令2:movsw
功能:(以字为单元传送)
1)((es)*16+(di))=((ds)*16+(si))
2)) 如果DF = 0则: (si) = (si) + 2 ; (di) = (di) + 2
如果DF = 1则: (si) = (si) - 2 ; (di) = (di) - 2
在这里插入图片描述

rep指令

rep指令常和串传送指令搭配使用
功能:根据cx的值,重复执行后面的指令
用法:
在这里插入图片描述
在这里插入图片描述

应用实例

任务:用串传送指令,将F000H段中的最后16个字符复制到data段中。(F000H段的最后一个字符的位置:F000:FFFF)
data segment
db 16 dup (0)
data ends
在这里插入图片描述


总结

到这里这篇文章的内容就结束了,谢谢大家的观看,如果有好的建议可以留言喔,谢谢大家啦!

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

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

相关文章

Vue3种常用插槽的使用

插槽总结 &#xff1a; 插槽的作用&#xff1a;让父组件可以向子组件指定位置插入html结构&#xff0c;也是一种组件间通信的方式&#xff0c;适用于 父组件 > 子组件 。分类&#xff1a;默认插槽、具名插槽、作用域插槽 1、默认插槽 父组件中&#xff1a; <Category>…

鸿蒙HarmonyOS应用 - ArkUI组件

ArkUI组件 基础组件 Image 声明Image组件并设置图片源 网络权限&#xff1a;ohos.permission.INTERNET Image(scr: string | PixelMap | Resource)// 1. string&#xff1a;用于加载网络图片&#xff0c;需要申请网络权限 Image("https://xxx.png")// 2. PixelMap…

一线实战,一次底层超融合故障导致的Oracle异常恢复

背景概述 某客户数据由于底层超融合故障导致数据库产生有大量的坏块&#xff0c;最终导致数据库宕机&#xff0c;通过数据抢救&#xff0c;恢复了全部的数据。下面是详细的故障分析诊断过程&#xff0c;以及详细的解决方案描述&#xff1a; 故障现象 数据库宕机之后&#xff0c…

粤嵌—2024/4/24—删除有序数组中的重复项 ||

代码实现&#xff1a; 方法一&#xff1a;双指针 int removeDuplicates(int *nums, int numsSize) {int l 0, r 0;while (r < numsSize) {if (r > 1 && nums[r] nums[l - 1] && nums[r] nums[l - 2]) {r;} else {nums[l] nums[r];l;r;}}return l; }…

ONES 功能上新|ONES Wiki 新功能一览

支持在 ONES Wiki 页面中使用分栏进行横向排版&#xff0c;丰富排版方式&#xff0c;帮助用户以更丰富的版式展示内容。 应用场景&#xff1a; 页面的布局对内容的阅读有很大的影响。当页面中有图文混排的需求时&#xff0c;可以通过分栏来组织页面结构&#xff0c;以更清晰、更…

Docker容器概念介绍与基本管理

前言 在软件开发和部署环境中&#xff0c;使用 Docker 等容器技术可以帮助团队实现快速、一致、可靠的应用程序部署&#xff0c;提高开发效率和应用程序的可移植性。 目录 一、虚拟化产品介绍 1. 云服务模型 1.1 IaaS 1.2 PaaS 1.3 SaaS 1.4 DaaS 2. 产品介绍 2.1 虚…

14 JavaScript学习:条件语句

JavaScript条件语句 JavaScript中的条件语句主要用于根据条件执行不同的代码块。以下是对JavaScript条件语句概念的详细解释和分类&#xff1a; if语句&#xff1a; 单个if语句&#xff1a;最简单的条件语句&#xff0c;根据条件判断是否执行特定的代码块。if…else语句&#x…

【机器学习与实现】机器学习概述

目录 一、机器学习的基本概念和方法&#xff08;一&#xff09;基本概念&#xff08;二&#xff09;机器学习的一般过程举例&#xff08;三&#xff09;样本和参数估计 二、机器学习的步骤总结&#xff08;一&#xff09;机器学习的主要步骤&#xff08;二&#xff09;样本及样…

C++并发编程

基本介绍 线程 C98标准没有直接提供原生的多线程支持 在C98中&#xff0c;并没有像后来的C11标准中那样的<thread>库或其他直接的多线程工具 然而&#xff0c;这并不意味着在C98中无法实现多线程。开发者通常会使用平台特定的API&#xff08;如Windows的线程API或POSI…

vue3中的ref、isRef、shallowRef、triggerRef和customRef

1.ref 接受一个参数值并返回一个响应式且可改变的 ref 对象。 ref 对象拥有一个指向内部值的单一属性 .value property &#xff0c;指向内部值。 例&#xff1a;此时&#xff0c;页面上的 str1 也跟着变化 <template><div><button click"handleClick&quo…

严厉打击侵犯知识产权行为!法院公开审理假冒半岛超声炮知产刑事案件

随着医美行业的蓬勃发展&#xff0c;一些不法分子利用消费者对变美的渴望&#xff0c;制售假冒半岛超声炮&#xff0c;严重侵犯了消费者的合法权益&#xff0c;也破坏了医美市场的健康发展。为了维护市场秩序&#xff0c;保障消费者权益&#xff0c;各地相关监管部门持续加大监…

QT从入门到实战x篇_22_番外1_Qt事件系统

文章目录 1. Qt事件系统简介1.1 事件的来源和传递1.2 事件循环和事件分发1.2.1 QT消息/事件循环机制1.2.1.1 机制解释1.2.1.2 两个问题 1.2.2 事件分发 2. 事件过滤基础2.1 什么是事件过滤器&#xff08;Event Filter&#xff09;&#xff1f;2.2 如何安装事件过滤器 3. 事件过…

<计算机网络自顶向下> 路由器组成

路由器结构概况 路由&#xff1a;运行路由选择算法/协议&#xff08;RIP, OSPF, BGP&#xff09;生成路由表转发&#xff1a;从输入到输出链路交换数据包-根据路由表进行分组的转发中间的fabric是用来接收输入的分组交给输出端口的&#xff0c;完成局部的转发&#xff08;根据…

在广东珠海,持有软考等证书最高可获6位数补贴,快来申报!

近日&#xff0c;横琴粤澳深度合作区执行委员会印发《横琴粤澳深度合作区支持人才发展若干措施》&#xff08;以下简称《若干措施》&#xff09;及三项配套实施办法&#xff0c;鼓励企业“招贤纳士”&#xff0c;加强琴澳人才协同培养。目前&#xff0c;2024年第一批博士后专项…

星汉未来AI应用市场:一站式AI解决方案平台

星汉未来AI应用市场&#xff1a;一站式AI解决方案平台 在人工智能技术日益渗透到各行各业的今天&#xff0c;星汉未来AI应用市场为我们提供了一个集创新与实用于一体的平台。下面&#xff0c;我将为您详细介绍这个平台的各个方面。 平台特色 星汉未来AI应用市场是一个面向未…

Keil出现警告:warning: #223-D: function “XXX“ declared implicitly

这个警告表明编译器在函数使用之前没有找到函数的显式声明或定义。这通常发生在函数被使用之前没有在当前文件中进行声明或定义&#xff0c;或者头文件未正确包含。 解决方式&#xff1a; 在当前文件中添加函数声明&#xff1a;在使用函数之前&#xff0c;在当前文件中添加函…

maixcam如何无脑运行运行别人的模型(以安全帽模型为例)

maixcam如何无脑运行运行别人的模型&#xff08;以安全帽模型为例&#xff09; 本文章主要讲如何部署上传的模型文件&#xff0c;以及如果你要把你模型按照该流程应该怎么修改&#xff0c;你可以通过该文章得到你想要的应该&#xff0c;该应用也包含的退出按钮&#xff0c;是屏…

书生·浦语大模型-第七节课笔记/作业

笔记 还没看到视频 但评测对于模型优化是非常重要的&#xff0c;指引了模型选择与优化的方向 评测过程 大海捞针&#xff1a; 通过将关键信息随机插入一段长文本的不同位置&#xff0c;形成大语言模型 (LLM) 的Prompt&#xff0c;通过测试大模型是否能从长文本中提取出关键…

协议的定制之序列化与反序列化 | 守护进程

目录 一、再谈协议 二、序列化与反序列化 三、网络计算器的简单实现 四、网络计算器完整代码 五、代码改进 六、守护进程 七、Json序列化与反序列化 八、netstat 一、再谈协议 是对数据格式和计算机之间交换数据时必须遵守的规则的正式描述。简单的说了&#xff0c;网络…

佛山南海区桂城珠宝玉石电商协会举办2023年度电商企业颁奖典礼

4月24日&#xff0c;佛山市南海区桂城珠宝玉石电商协会隆重举办第一届三次会员大会暨2023年度电商企业颁奖典礼&#xff0c;广邀各级政府领导、行业组织、珠宝商场、电商企业、珠宝直播达人以及新闻媒体嘉宾&#xff0c;共见璀璨&#xff0c;共话新发展、新机遇。这是平洲玉器珠…