<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[万里无云的博客]]></title><description><![CDATA[一个学习总结，经验分享的个人博客。]]></description><link>https://blog.youkuaiyun.com/sinat_28705773</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; sinat_28705773]]></copyright><item><title><![CDATA[关于Windows平台上vscode利用GCC链接第三方库的过程记录]]></title><link>https://blog.youkuaiyun.com/sinat_28705773/article/details/119868911</link><guid>https://blog.youkuaiyun.com/sinat_28705773/article/details/119868911</guid><author>sinat_28705773</author><pubDate>Mon, 23 Aug 2021 14:58:05 +0800</pubDate><description><![CDATA[过程记录
最近因为测试需要，我在Windows 10操作系统上利用GCC生成并安装libevent的库。我的libevent库的安装路径是D:\Softs\Develop\libevent,目录下包括bin、include、lib三个目录。然后我用Visual Studio 2019建了一个C项目，并配置好了libevent库。写代码进行测试，一切正常。Visual Studio 2019的相关配置如：


项目右键 &gt;&gt; 属性 &gt;&gt; VC++目录
这一部分主要配置包含目录、库目录两]]></description><category></category></item><item><title><![CDATA[第4章 第一个程序]]></title><link>https://blog.youkuaiyun.com/sinat_28705773/article/details/116033272</link><guid>https://blog.youkuaiyun.com/sinat_28705773/article/details/116033272</guid><author>sinat_28705773</author><pubDate>Thu, 22 Apr 2021 21:32:43 +0800</pubDate><description><![CDATA[对源程序进行编译连接：使用汇编语言编译程序对源程序文件中的源程序进行编译，产生目标文件；再用连接程序对目标文件进行连接，生成可在操作系统中直接运行的可执行文件。


可执行文件包括两部分内容：

程序（从源文件中的汇编指令翻译过来的机器码）和数据（源程序中定义的数据）。
相关的描述信息（比如，程序有多大，要占用多少内存空间）。



一段简单的汇编语言源程序
assume cs:codesg # 将某个段寄存器与程序中的某个段相关联

codesg segment # 定义一个段
	mov ax,012..]]></description><category></category></item><item><title><![CDATA[第3章 寄存器（内存访问）]]></title><link>https://blog.youkuaiyun.com/sinat_28705773/article/details/116003810</link><guid>https://blog.youkuaiyun.com/sinat_28705773/article/details/116003810</guid><author>sinat_28705773</author><pubDate>Thu, 22 Apr 2021 10:41:55 +0800</pubDate><description><![CDATA[CPU要读写一个内存单元的时候，必须先给出这个内存单元的地址，在8086PC中，内存地址由段地址和偏移地址组成。8086CPU有一个DS寄存器，通常用来存放要访问的数据的段地址。比如
mov bx,1000H
mov ds,bx
mov al,[0]

“[…]”表示一个内存单元，“[…]”中的0表示内存单元的偏移地址。执行指令时，8086CPU自动取ds中的数据为内存单元的段地址。8086CPU不支持将数据直接送入段寄存器的操作，ds是一个段寄存器，所以mov ds,1000H这条指令是非法的。只能通..]]></description><category></category></item><item><title><![CDATA[第2章 寄存器]]></title><link>https://blog.youkuaiyun.com/sinat_28705773/article/details/115980835</link><guid>https://blog.youkuaiyun.com/sinat_28705773/article/details/115980835</guid><author>sinat_28705773</author><pubDate>Wed, 21 Apr 2021 21:48:03 +0800</pubDate><description><![CDATA[一个典型的CPU由运算器、控制器、寄存器等器件构成，这些器件通过内部总线相连。相对于CPU内部总线来说，其他的称为外部总线。内部总线实现CPU内部各个器件之间的联系，外部总线实现CPU和主板上的其他器件之间的联系。


在CPU中：

运算器进行信息处理
寄存器进行信息存储
控制器控制各种器件进行工作
内部总线连接各种器件，在它们之间传送数据



不同的CPU，寄存器的个数、结构是不相同的。8086CPU有14个寄存器，每个寄存器有一个名称，这些寄存器是：AX、BX、CX、DX、SI、DI、SP、BP..]]></description><category></category></item><item><title><![CDATA[第一章 基础知识]]></title><link>https://blog.youkuaiyun.com/sinat_28705773/article/details/115980765</link><guid>https://blog.youkuaiyun.com/sinat_28705773/article/details/115980765</guid><author>sinat_28705773</author><pubDate>Wed, 21 Apr 2021 21:47:28 +0800</pubDate><description><![CDATA[汇编语言的主体是汇编指令。汇编指令和机器指令的差别在于指令的表示方法上。


汇编语言由3类指令组成：

汇编指令：机器码的助记符，有对应的机器码
伪指令：没有对应的机器码，由编译器执行，计算机不执行
其他符号：如+、-、*、/等，由编译器识别，没有对应的机器码

汇编语言的核心是汇编指令，它决定了汇编语言的特性。


指令和数据是应用上的概念。在内存或磁盘上，指令和数据没有任何的差别，都是二进制信息。


电子计算机的最小信息单位是bit，也就是一个二进制位。8个bit组成一个Byte，也就是一个字节..]]></description><category></category></item><item><title><![CDATA[第一章 计算机系统体系结构]]></title><link>https://blog.youkuaiyun.com/sinat_28705773/article/details/113485022</link><guid>https://blog.youkuaiyun.com/sinat_28705773/article/details/113485022</guid><author>sinat_28705773</author><pubDate>Sun, 31 Jan 2021 21:45:12 +0800</pubDate><description><![CDATA[计算机系统

计算机系统包括读取并执行程序的中央处理单元（CPU），保存程序和数据的存储器，以及将芯片转换为实用系统的其他子系统。


计算机中实际执行程序的部分称为CPU，或被称为处理器。微处理器则是在单个硅片上实现的CPU。围绕微处理器构建的计算机被称为微机。



Cache是存放常用数据的高速、专用存储器；主存中存放了大量的工作数据；辅存是指磁盘和CD-ROM等。


一些计算机使用总线扩展接口或桥接技术，以便能够在不同类型的总线间交换数据。


存储器系统保存两类信息：程序和数据。


寄存器..]]></description><category></category></item><item><title><![CDATA[232、485、422]]></title><link>https://blog.youkuaiyun.com/sinat_28705773/article/details/105298133</link><guid>https://blog.youkuaiyun.com/sinat_28705773/article/details/105298133</guid><author>sinat_28705773</author><pubDate>Fri, 03 Apr 2020 17:51:32 +0800</pubDate><description><![CDATA[EIA-RS-232C（RS232）


定义：数据终端设备（DTE）和数据通讯设备（DEC）之间串行二进制数据交换接口技术标准，简单理解就是串行二进制数据交换接口技术标准。它描述了计算机及相关设备间较低速率的串行数据通信的物理接口及协议。


EIA代表美国电子工业协会。RS是英文Recommended standard的缩写，意思是“推荐标准”。232是标识号。C代表RS232的最新一次修...]]></description><category></category></item><item><title><![CDATA[位段]]></title><link>https://blog.youkuaiyun.com/sinat_28705773/article/details/105106429</link><guid>https://blog.youkuaiyun.com/sinat_28705773/article/details/105106429</guid><author>sinat_28705773</author><pubDate>Wed, 25 Mar 2020 22:57:29 +0800</pubDate><description><![CDATA[在C语言中，我们可以利用结构体实现位段的功能。位段的声明和结构类似，但是它的成员是一个或者多个位的字段。这些不同长度的字段实际上存储在一个或者多个整型变量中。
位段的声明和任何普通的结构成员声明相同，但有两个例外：第一、位段成员必须声明为int、signed int、unsigned int类型。第二、在成员名的后面是一个冒号和一个整数，这个整数用于指定该位段所占用的位的数目。例如下面是一个位段声...]]></description><category></category></item><item><title><![CDATA[C语言学习笔记（五）]]></title><link>https://blog.youkuaiyun.com/sinat_28705773/article/details/105019704</link><guid>https://blog.youkuaiyun.com/sinat_28705773/article/details/105019704</guid><author>sinat_28705773</author><pubDate>Sat, 21 Mar 2020 23:03:48 +0800</pubDate><description><![CDATA[联合是一种数据类型，它能够在同意内存里面存储不同的数据类型。声明一个联合类型的变量时，编译器会分配足够的空间，以便能够存储联合声明中占用字节最大的类型。联合的初始化方法有三种：把一个联合初始化为另一个同类型的联合；初始化联合的第一个元素；根据C99标准，使用指定初始化器。在联合中，一次只存储一个值。即使有充足的空间，也不能同时存储两个及两个以上的的值。
可以利用枚举类型声明符号名称来表示整型常量...]]></description><category></category></item><item><title><![CDATA[C语言学习笔记（四）]]></title><link>https://blog.youkuaiyun.com/sinat_28705773/article/details/104743481</link><guid>https://blog.youkuaiyun.com/sinat_28705773/article/details/104743481</guid><author>sinat_28705773</author><pubDate>Sun, 08 Mar 2020 23:25:48 +0800</pubDate><description><![CDATA[字符串常量属于静态存储类别，这说明如果在函数中使用字符串常量，该字符串只会被存储一次。
数组形式的字符串与指针形式的字符串的区别：通常，字符串都作为可执行文件的一部分存储在数据段中。当把程序载入内存时，也载入程序中的字符串。字符串存储在静态存储区。当程序开始运行，并为数组分配内存，这时候才将字符串拷贝到数组中。此时字符串有两个副本，一个是静态存储区的字符串常量，另一个是存储在数组里面的字符串。指...]]></description><category></category></item><item><title><![CDATA[C语言学习笔记（三）]]></title><link>https://blog.youkuaiyun.com/sinat_28705773/article/details/104665376</link><guid>https://blog.youkuaiyun.com/sinat_28705773/article/details/104665376</guid><author>sinat_28705773</author><pubDate>Wed, 04 Mar 2020 23:22:20 +0800</pubDate><description><![CDATA[C语言中，一直用int类型的变量表示真/假值，C99针对这种类型的变量新增了_Bool类型。_Bool类型的变量只能存储1或0，其他的非零数值赋值给_Bool类型的变量，该变量会被设置为1。C99提供了stdbool.h头文件，该头文件让bool成为_Bool的别名，并把true和false分别定义为1和0的符号常量。
逗号运算符并不局限于在for循环中使用，它有两个性值，首先，它保证了被它分隔...]]></description><category></category></item><item><title><![CDATA[C语言学习笔记（二）]]></title><link>https://blog.youkuaiyun.com/sinat_28705773/article/details/104523295</link><guid>https://blog.youkuaiyun.com/sinat_28705773/article/details/104523295</guid><author>sinat_28705773</author><pubDate>Wed, 26 Feb 2020 19:44:27 +0800</pubDate><description><![CDATA[字符串是一个或者多个字符的序列。C语言没有专门用于存储字符串的变量类型，字符串都被存储在char类型的字符数组里面。数组由连续的存储单元组成。字符串以字符\0作为结束标记。


scanf函数在遇到空格时会结束输入。


C99和C11标准专门为sizeof运算符的返回类型添加了%zd转换说明，这个对于strlen()同样适用。对于早期的C，sizeof和strlen()返回的实际类型通常是u...]]></description><category></category></item><item><title><![CDATA[C语言学习笔记（一）]]></title><link>https://blog.youkuaiyun.com/sinat_28705773/article/details/104496553</link><guid>https://blog.youkuaiyun.com/sinat_28705773/article/details/104496553</guid><author>sinat_28705773</author><pubDate>Tue, 25 Feb 2020 14:03:58 +0800</pubDate><description><![CDATA[计算机把浮点数分成小数部分和指数部分来表示，并且分开存储这两部分。
一般而言，存储一个int要占用一个机器字长。
声明变量时，只为变量分配内存空间，并不做初始化操作。（局部变量）
利用printf打印数据时，转义符的个数要和后面的参数个数匹配。
C语言中，0x或0X前缀表示十六进制值。0前缀表示八进制值。
不同的进制使用不同的转换说明。十进制使用%d，八进制使用%o,十六进制使用%x，另外，要显...]]></description><category></category></item><item><title><![CDATA[关于PyQt5中QListWidgetItem不显示的问题]]></title><link>https://blog.youkuaiyun.com/sinat_28705773/article/details/103848734</link><guid>https://blog.youkuaiyun.com/sinat_28705773/article/details/103848734</guid><author>sinat_28705773</author><pubDate>Sun, 05 Jan 2020 23:02:05 +0800</pubDate><description><![CDATA[在我做过的一个项目中，需要利用QT实现一个人脸考勤打卡的界面，人脸打卡成功之后，会在界面的右边区域显示一条打卡信息。界面实现如下。


整个实现过程还算比较顺利，只是在动态添加打卡信息到右侧的列表时，发现Item并不显示，而是出现了一个透明的框。后来查看Qt的开发文档才发现，QT不允许直接在非UI线程中添加Item。而我开发时，担心在添加过程中，会导致UI卡顿的问题，所以正是将该操作放到线程里面...]]></description><category></category></item><item><title><![CDATA[关于PyQt5中QListWidget动态删除Item中的问题]]></title><link>https://blog.youkuaiyun.com/sinat_28705773/article/details/103848294</link><guid>https://blog.youkuaiyun.com/sinat_28705773/article/details/103848294</guid><author>sinat_28705773</author><pubDate>Sun, 05 Jan 2020 22:39:32 +0800</pubDate><description><![CDATA[在前段时间里，做了一个简单的项目，就是一个音乐下载器的客户端程序。功能比较简单，一个单一的界面，主要展示下载的音乐的一些基本信息；后台通过创建一个WebSocket，监听Web端发来的请求。在Web端可以做到添加任务，删除任务等功能。整个项目用Python实现，窗体部分，则用的是PyQt5。具体实现如下。


下载音乐的任务列表，采用的是QListWidget控件，每一个元素用的是自定义的Ite...]]></description><category></category></item><item><title><![CDATA[Java实现邮件发送功能]]></title><link>https://blog.youkuaiyun.com/sinat_28705773/article/details/53448019</link><guid>https://blog.youkuaiyun.com/sinat_28705773/article/details/53448019</guid><author>sinat_28705773</author><pubDate>Sat, 03 Dec 2016 22:00:43 +0800</pubDate><description><![CDATA[Java实现邮件发送功能

        最近在书上看到了一段利用java实现的邮件发送功能的案例，想想在许多网站中，注册用户时都会用到的一种短信验证的功能，觉得挺有意思，也挺有必要的，所以就想和大家分享一下，也就作为第一次博文的内容。



1.首先了解一下整个功能的实现步骤


列表内容]]></description><category></category></item></channel></rss>