《汇编语言》第13章 int指令

article/2025/8/5 15:40:59

中断信息可以来自 CPU 的内部和外部,当 CPU 的内部有需要处理的事情发生的时候,将产生需要马上处理的中断信息,引发中断过程。在第12章中,我们讲解了中断过程和两种内中断的处理。

这一章中,我们讲解另一种重要的内中断,由int指令引发的中断。

13.1 int指令

int指令的格式为:int n,n为中断类型码,它的功能是引发中断过程。CPU执行int n指令,相当于引发一个n号中断的中断过程,执行过程如下。

(1)取中断类型码n;

(2)标志寄存器入栈,IF=0,TF=0;

(3)CS、IP入栈;

(4)(IP)=(n*4),(CS)=(n*4+2)。从此处转去执行n号中断的中断处理程序。

可以在程序中使用int指令调用任何一个中断的中断处理程序。例如,下面的程序:

;p12_1.asm    13.1 int指令
;调用0号中断指令测试assume cs:code 
code segment 
start:	mov ax,0b800h mov es,ax mov byte ptr es:[12*160+40*2],'!'int 0code ends
end start

运行调试

这个程序在Windows2000中的DOS方式下执行时,将在屏幕中间显示一个"!",然后显示“Divide overflow”后返回到系统中。“!”是我们编程显示的,而“Divide overflow"是哪里来的呢?我们的程序中又没有做除法,不可能产生除法溢出。

程序是没有做除法,但是在结尾使用了int0指令。CPU执行int0指令时,将引发中断过程,执行0号中断处理程序,而系统设置的0号中断处理程序的功能是显示"Divide overflow”,然后返回到系统。

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

一般情况下,系统将一些具有一定功能的子程序,以中断处理程序的方式提供给应用程序调用。我们在编程的时候,可以用 int 指令调用这些子程序。当然,也可以自己编写一些中断处理程序供别人使用。以后,我们可以将中断处理程序简称为中断例程。

13.2 编写供应用程序调用的中断例程

前面,我们已经编写过中断0的中断例程了,现在我们讨论可以供应用程序调用的中断例程的编写方法。下面通过两个问题来讨论。

问题一:编写、安装中断7ch的中断例程。

功能:求一word型数据的平方。

参数:(ax)=要计算的数据。

返回值:dx、ax中存放结果的高16位和低16位。

应用举例:求2*3456^2。

;p13_2.asm  
assume cs:code 
code segment 
start:	mov ax,3456				;(ax)=3456int 7ch						;调用中断7ch的中断例程,计算ax中的数据的平方add ax,ax adc dx,dx 				;dx:ax存放结果,将结果乘以2 mov ax,4c00h int 21h code ends 
end start 
 

分析一下,我们要做以下3部分工作。

(1)编写实现求平方功能的程序;

(2)安装程序,将其安装在0:200处;

(3)设置中断向量表,将程序的入口地址保存在7ch表项中,使其成为中断7ch的中断例程。

安装程序如下。

;p13_2i.asm  p13_2的中断程序
;安装程序如下。assume cs:code 
code segment 
start:		mov ax,cs mov ds,ax mov si,offset sqr									;设置ds:si指向源地址mov ax,0mov es,ax mov di,200h 										;设置ds:si指向目的地址mov cx,offset sqrend - offset sqr 			;设置cx为传输长度cld														;设置传输方向为正rep movsb mov ax,0mov es,ax mov word ptr es:[7ch*4],200h mov word ptr es:[7ch*4+2],0mov ax,4c00hint 21hsqr:		mul ax iret sqrend:		nop code ends 
end start 


运行调试;

先执行p13_2i.exe中断程序,再执行debug p13_2.exe

执行主程程序的int 7c指令后,跳转到中断程序

注意,在中断例程 sqr 的最后,要使用 iret 指令。用汇编语法描述,iret 指令的功能为:

pop IP

pop cs

popf

CPU 执行 int 7ch 指令进入中断例程之前,标志寄存器、当前的 CS 和 IP 被压入栈中,在执行完中断例程后,应该用iret指令恢复int 7ch执行前的标志寄存器和CS、IP的值,从而接着执行应用程序。

int指令和iret指令的配合使用与call指令和ret指令的配合使用具有相似的思路。

问题二:编写、安装中断7ch的中断例程。

功能:将一个全是字母,以0结尾的字符串,转化为大写。

参数:ds:si指向字符串的首地址。

应用举例:将 data段中的字符串转化为大写。

;p13_3.asm  assume cs:code 
data segment db 'conversation',0
data ends code segment 
start:		mov ax,data mov ds,ax mov si,0int 7chmov ax,4c00hint 21h code ends 
end start 
 

安装程序如下。

;p13_3i.asm  
;问题二的安装程序,先执行安装程序,再执行主程序assume cs:code 
code segment ;安装程序
start:		mov ax,cs mov ds,ax mov si,offset capital mov ax,0mov es,ax mov di,200h										;把中断处理程序安装到0: 200位置mov cx,offset capitalend-offset capital cld rep movsb ;设置向量表mov ax,0mov es,ax mov word ptr es:[7ch*4],200hmov word ptr es:[7ch*4+2],0mov ax,4c00hint 21h capital:		push cx push si change:	mov cl,[si]mov ch,0jcxz ok and byte ptr [si],11011111b				;小写转大写inc si jmp short changeok:	pop si pop cx iret capitalend:	nop code ends 
end start 
 

运行调试:

先执行安装程序,再执行主程序:

执行int 7c指令,跳转到中断程序执行小写转大写功能

小写转大写

执行iret指令回到主程序

在中断例程capital中用到了寄存器si和cx,编写中断例程和编写子程序的时候具有同样的问题,就是要避免寄存器的冲突。应该注意例程中用到的寄存器的值的保存和恢复。

13.3 对 int、iret和栈的深入理解

问题:用7ch中断例程完成loop指令的功能。

loop s 的执行需要两个信息,循环次数和到 s 的位移,所以,7ch 中断例程要完成loop 指令的功能,也需要这两个信息作为参数。我们用 cx 存放循环次数,用 bx 存放位移。

应用举例:在屏幕中间显示80个'!'。

;p13_4.asm   assume cs:code 
code segment 									;   CS:  IP的值
start:		mov ax,0b800h 						;076A: 0000mov es,ax 							;076A: 0003mov di,160*12						;076A: 0005;设置从标号se到标号s的转移位移mov bx,offset s - offset se 	    ;076A: 0008    bx=000E-0017=FFF7mov  cx,20							;076A: 000Bs: mov byte ptr es:[di],'!'				;076A: 000E     s标号的偏移地址;076A: 000Fadd di,2							;076A: 0012int 7ch 							;076A: 0015     如果(cx)≠0,转移到标号s处;push psw, push cs, push ip se:	nop 								;076A: 0017		se标号的偏移地址mov ax,4c00h 						;076A: 0018int 21h 							;076A: 001Bcode ends 
end start
 

在上面的程序中,用int7ch调用7ch中断例程进行转移,用bx传递转移的位移。

分析:为了模拟loop指令,7ch中断例程应具备下面的功能。

(1) dec cx;

(2)如果(cx)≠0,转到标号s处执行,否则向下执行。

下面我们分析7ch中断例程如何实现到目的地址的转移。

(1)转到标号s显然应设(CS)=标号s的段地址,(IP)=标号s的偏移地址。

(2)那么,中断例程如何得到标号s的段地址和偏移地址呢?

int 7ch 引发中断过程后,进入 7ch中断例程,在中断过程中,当前的标志寄存器、CS和IP都要压栈,此时压入的CS和IP中的内容,分别是调用程序的段地址(可以认为是标号s的段地址)和int 7ch后一条指令的偏移地址(即标号se的偏移地址)。

可见,在中断例程中,可以从栈里取得标号s的段地址和标号se的偏移地址,而用标号se的偏移地址加上bx中存放的转移位移就可以得到标号s的偏移地址。

(3)现在知道,可以从栈中直接和间接地得到标号s的段地址和偏移地址,那么如何用它们设置CS:IP呢?

可以利用iret指令,我们将栈中的se的偏移地址加上bx中的转移位移,则栈中的se 的偏移地址就变为了s的偏移地址。我们再使用iret指令,用栈中的内容设置CS、IP,从而实现转移到标号s处。

7ch中断例程如下。

;p13_4i.asm  13.3 对 int、iret和栈的深入理解
;问题:用7ch中断例程完成loop指令的功能。
;;安装程序,先执行安装程序,再执行主程序assume cs:code 
code segment ;安装程序
start:		mov ax,csmov ds,ax mov si,offset lpmov ax,0mov es,ax mov di,200h 						;把中断处理程序安装到0: 200位置mov cx,offset lpend-offset lpcld rep movsb ;设置向量表mov ax,0mov es,ax mov word ptr es:[7ch*4],200h mov word ptr es:[7ch*4+2],0mov ax,4c00h int 21h ;中断程序lp:	push bp mov bp,sp dec cx jcxz lpret add ss:[bp+2],bxlpret:		pop bp iret lpend:		nop code ends
end start

运行调试,先执行中断程序 ,再调试主程序

执行int 7ch指令后,跳转到中断程序

此时的栈结构为

接着继续往下执行

当执行完add ss:[bp+2],bx,栈中的IP的值为000E,结构如下:

继续执行,iret指令执行完后,从栈中取相应的数据,然后跳转到s标号处理执行

然后继续循环执行,直到cx为0时,中止循环。

因为要访问栈,使用了bp,在程序开始处将 bp 入栈保存,结束时出栈恢复。当要修改栈中se的偏移地址的时候,栈中的情况为:栈顶处是bp原来的数值,下面是se的偏移地址,再下面是s的段地址,再下面是标志寄存器的值。而此时,bp中为栈顶的偏移地址,所以((ss)*16+(bp)+2)处为se的偏移地址,将它加上bx中的转移位移就变为s的偏移地址。最后用iret出栈返回,CS:IP即从标号s处开始执行指令。

如果(cx)=0,则不需要修改栈中 se 的偏移地址,直接返回即可。CPU 从标号 se 处向下执行指令。

检测点13.1

(1)在上面的内容中,我们用 7ch 中断例程实现 loop 的功能,则上面的 7ch 中断例程所能进行的最大转移位移是多少?    FFFF

(2)用7ch中断例程完成jmp near ptrs指令的功能,用bx向中断例程传送转移位移。

应用举例:在屏幕的第12行,显示data段中以0结尾的字符串。

;jc13_1.asm    检测点13.1assume cs:code 
data segment db 'conversation',0
data ends 
code segment 
start:	mov ax,data mov ds,ax mov si,0mov ax,0b800hmov es,ax mov di,12*160s: cmp byte ptr ds:[si],0je ok 									;如果是0跳出循环mov al,ds:[si]mov es:[di],al mov al,02hmov es:[di+1],al 					;设置颜色inc si add di,2mov bx,offset s - offset ok		;设置从标号ok到标号s的转移位移int 7ch 									;转移到标号s处ok:	mov ax,4c00h int 21h code ends 
end start 

中断程序代码:

;jc13_1i.asm    检测点13.1的中断程序assume cs:code 
code segment ;安装程序
start:	mov ax,csmov ds,ax mov si,offset lp mov ax,0mov es,ax mov di,200h							;把中断处理程序安装到0: 200h位置mov cx,offset lpend - offset lp cld rep movsb ;设置向量表mov ax,0mov es,ax mov word ptr es:[7ch*4],200h mov word ptr es:[7ch*4+2],0mov ax,4c00h int 21h lp:	push bp mov bp,sp add ss:[bp+2],bxpop bp iret 											;跳转到s标号处理mov ax,4c00h int 21h lpend:	nop code ends 
end start 

编译运行:

13.4 BIOS和DOS所提供的中断例程

在系统板的ROM中存放着一套程序,称为BIOS(基本输入输出系统),BIOS中主要包含以下几部分内容。

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

(2)外部中断(第15章中进行讲解)和内部中断的中断例程;

(3)用于对硬件设备进行I/O操作的中断例程;

(4)其他和硬件系统相关的中断例程。

操作系统 DOS 也提供了中断例程,从操作系统的角度来看,DOS 的中断例程就是操作系统向程序员提供的编程资源。

BIOS和DOS在所提供的中断例程中包含了许多子程序,这些子程序实现了程序员在编程的时候经常需要用到的功能。程序员在编程的时候,可以用 int 指令直接调用 BIOS 和DOS提供的中断例程,来完成某些工作。

和硬件设备相关的DOS中断例程中,一般都调用了BIOS的中断例程。

13.5 BIOS和DOS中断例程的安装过程

前面的课程中,我们都是自己编写中断例程,将它们放到安装程序中,然后运行安装程序,将它们安装到指定的内存区中。此后,别的应用程序才可以调用。

而 BIOS 和 DOS 提供的中断例程是如何安装到内存中的呢?我们下面讲解它们的安装过程。

(1)开机后,CPU一加电,初始化(CS)=0FFFH,(IP)=0,自动从FFF:0单元开始执行程序。FFF:0 处有一条转跳指令,CPU执行该指令后,转去执行 BIOS 中的硬件系统检测和初始化程序。

(2)初始化程序将建立 BIOS 所支持的中断向量,即将 BIOS 提供的中断例程的入口地址登记在中断向量表中。注意,对于BIOS所提供的中断例程,只需将入口地址登记在中断向量表中即可,因为它们是固化到ROM中的程序,一直在内存中存在。

(3)硬件系统检测和初始化完成后,调用 int 19h 进行操作系统的引导。从此将计算机交由操作系统控制。

(4)DOS 启动后,除完成其他工作外,还将它所提供的中断例程装入内存,并建立相应的中断向量。

检测点13.2

判断下面说法的正误:

(1)我们可以编程改变 FFFF:0处的指令,使得CPU不去执行BIOS中的硬件系统检测和初始化程序。

答:FFFF:0处的内容无法改变,他是ROM只读的。

(2)int 19h中断例程,可以由DOS提供。

答:错误,先调用 int 19h后启动DOS

13.6 BIOS中断例程应用

下面我们举几个例子,来看一下BIOS中断例程的应用。

int 10h 中断例程是 BIOS 提供的中断例程,其中包含了多个和屏幕输出相关的子程序。

一般来说,一个供程序员调用的中断例程中往往包括多个子程序,中断例程内部用传递进来的参数来决定执行哪一个子程序。BIOS和DOS提供的中断例程,都用ah来传递内部子程序的编号。

下面看一下int 10h中断例程的设置光标位置功能。

mov ah,2;置光标

mov bh,0;第0页

mov dh,5;dh中放行号

mov dl,12;d1中放列号

int 10h

(ah)=2表示调用第10h号中断例程的2号子程序,功能为设置光标位置,可以提供光标所在的行号(80*25 字符模式下:0~24)、列号(80*25 字符模式下:0~79),和页号作为参数。

(bh)=0,(dh)=5,(dl)=12,设置光标到第0页,第5行,第12列。

bh中页号的含义:内存地址空间中,B8000H~BFFFH共32kB的空间,为80*25彩色字符模式的显示缓冲区。一屏的内容在显示缓冲区中共占4000个字节。

显示缓冲区分为8页,每页 4KB(≈4000B),显示器可以显示任意一页的内容。一般情况下,显示第0页的内容。也就是说,通常情况下,B8000H~B8F9FH中的4000个字节的内容将出现在显示器上。

再看一下int 10h中断例程的在光标位置显示字符功能。

mov ah,9;在光标位置显示字符

mov al,'a';字符

mov bl,7;颜色属性

mov bh,0;第0页

mov cx,3;字符重复个数

int 10h

(ah)=9表示调用第10h号中断例程的9号子程序,功能为在光标位置显示字符,可以提供要显示的字符、颜色属性、页号、字符重复个数作为参数。

bl中的颜色属性的格式如下。

可以看出,和显存中的属性字节的格式相同。

编程:在屏幕的5行12列显示3个红底高亮闪烁绿色的'a'。

;p13_5.asm   13.6 BIOS中断例程应用
;编程:在屏幕的5行12列显示3个红底高亮闪烁绿色的'a'。assume cs:code 
code segment 
start:	mov ah,2						;设置光标mov bh,0						;第0页mov dh,5						;dh中放行号mov dl,12						;dl中放列号int 10hmov ah,9						;在光标位置显示字符mov al,'a'						;字符mov bl,11001010b		        ;颜色属性mov bh,0						;第0页mov cx,3						;字符重复个数int 10hmov ax,4c00h int 21h 
code ends 
end start 
 

注意,闪烁的效果必须在全屏DOS方式下才能看到。

13.7 DOS中断例程应用

int 2lh中断例程是DOS提供的中断例程,其中包含了DOS提供给程序员在编程时调用的子程序。

我们前面一直使用的是int 2lh中断例程的4ch号功能,即程序返回功能,如下:

mov ah,4ch;程序返回

mov al,0;返回值

int 21h

(ah)=4ch表示调用第21h号中断例程的4ch号子程序,功能为程序返回,可以提供返回值作为参数。

我们前面使用这个功能的时候经常写做:

mov ax,4c00h

int 21h

我们看一下int 2lh中断例程在光标位置显示字符串的功能:

ds:dx指向字符串;要显示的字符串需用"S"作为结束符

mov ah,9;功能号9,表示在光标位置显示字符串

int 21h

(ah)=9表示调用第21h号中断例程的9号子程序,功能为在光标位置显示字符串,可以提供要显示字符串的地址作为参数。

编程:在屏幕的5行12列显示字符串“Welcome to masm!”。

;p13_6.asm   13.7 DOS中断例程应用assume cs:code data segment db 'Welcome to masm','$'
data ends code segment 
start:	mov ah,2						;设置光标mov bh,0						;第0页mov dh,5						;dh中放行号mov dl,12 					    ;dl中放列号int 10h mov ax,data mov ds,ax mov dx,0						;ds:dx指向字符串的首地址data:0mov ah,9int 21h mov ax,4c00h int 21h 
code ends 
end start 

运行结果:

上述程序在屏幕的5行12列显示字符串“Welcome to masm!”,直到遇见“$”(“$”本身并不显示,只起到边界的作用)。

如果字符串比较长,遇到行尾,程序会自动转到下一行开头处继续显示;如果到了最后一行,还能自动上卷一行。

DOS 为程序员提供了许多可以调用的子程序,都包含在int 21h中断例程中。我们这里只对原理进行了讲解,对于DOS提供的所有可调用子程序的情况,读者可以参考相关的书籍。


http://www.hkcw.cn/article/UiIRlIwjeB.shtml

相关文章

CFTel:一种基于云雾自动化的鲁棒且可扩展的远程机器人架构

中文标题: CFTel:一种基于云雾自动化的鲁棒且可扩展的远程机器人架构 英文标题: CFTel: A Practical Architecture for Robust and Scalable Telerobotics with Cloud-Fog Automation 作者信息 Thien Tran, Jonathan Kua, Minh Tran, Hongh…

Spring Boot是什么?

Spring Boot是什么? Spring Boot是什么?1. 引言1.1 什么是Spring Boot?1.2 为什么选择Spring Boot? 2. Spring Boot的起源2.1 Spring框架的历史2.2 Spring Boot的诞生背景 3. Spring Boot的核心特性3.1 快速启动和部署3.2 自动配置…

基于大数据爬虫+Python+数据可视化大屏的慧游数据爬虫与推荐分析系统(源码+论文+PPT+部署文档教程等)

博主介绍:CSDN毕设辅导第一人、全网粉丝50W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 技术范围:SpringB…

实时响应的秘密:用Spring Boot轻松实现流式AI输出

1、背景 随着AI的快速发展,越来越多的AI应用诞生了,但是AI也有响应慢的问题,一般不能够即时响应,为了优化用户体验,现在大部分AI应用都是实现了打字机的效果,那么这种效果是如何实现的呢?今天我…

Spring Boot 中 RabbitMQ 的使用

目录 引入依赖 添加配置 Simple(简单模式) 生产者代码 消费者代码 ​编辑 Work Queue(工作队列) 生产者代码 消费者代码 Publish/Subscribe(发布/订阅) 生产者代码 消费者代码 Routing&#x…

如何下载MySQL和如何下载MySQL的JDBC驱动包

1.打开MySql 官网 https://www.mysql.com/ 2.点击 DOWNLOADS 和 MySQL Community (GPL) Downloads(MySQL Community (GPL) Downloads需要滚到最下面) 截屏2022-12-12 14.23.18.png 下载MySQL和下载MySQL的JDBC驱动包前两步是一样的 下载MySQL 3.点击 MyS…

【复杂网络演化博弈_01】理论部分+代码应用

复杂网络演化博弈 一、理论部分(1)研究背景(2)群体合作困境(3)核心要素(4)网络模型1、规则网络2、随机网络3、小世界网络4、无标度网络 二、网络博弈的进展(1&#xff09…

MySQL的备份及还原

备份类型 热备份、温备份、冷备份 (根据服务器状态) 热备份:读、写不受影响; 温备份:仅可以执行读操作; 冷备份:离线备份;读、写操作均中止; 物理备份与逻辑…

【爬虫学习】动态网页数据抓取实战:Ajax逆向与浏览器自动化

【爬虫学习】动态网页数据抓取实战:Ajax逆向与浏览器自动化 摘要 针对现代网站的动态化趋势,本文深入解析Ajax接口逆向与浏览器自动化技术。通过微博热搜实时数据抓取、知乎无限滚动内容采集等实战案例,演示如何突破动态渲染壁垒&#xff0c…

【Spring Cloud Alibaba】:Nacos 使用全详解

目录 一、服务注册发现1、nacos-provider服务提供者创建2、nacos-consumer服务消费者创建 二、配置管理1、添加配置文件2、拉取配置3、读取配置4、配置热更新方式一:添加 RefreshScope 注解方式二:使用ConfigurationProperties注解代替Value注解。 5、多…

【金仓数据库征文】学校AI数字人:从Sql Server到KingbaseES的数据库转型之路

摘要:本文围绕学校 AI 数字人项目从 Sql Server 数据库替换至 KingbaseES 数据库的实践展开,涵盖迁移背景、两种数据库对比、替换实施步骤、应用效果展示、问题与解决措施等多方面内容,为教育领域类似项目提供了详实参考。 目录 1.背景与需求…

前端框架大对决:uni-app、taro、flutter、RN 哪家强?

文章目录 一、引言二、框架初印象三、开发语言与环境搭建3.1 开发语言特色3.2 环境搭建流程四、跨平台能力4.1 适配平台情况4.2 平台专有功能调用与界面适配特点五、性能表现5.1 渲染机制剖析5.2 性能测试数据六、组件与插件生态6.1 内置组件丰富度6.2 插件市场活跃度七、开发体…

rpcsx-ui-android:打造 RPCSX 模拟器原生态 Android UI

rpcsx-ui-android:打造 RPCSX 模拟器原生态 Android UI rpcsx-ui-android 项目地址: https://gitcode.com/gh_mirrors/rp/rpcsx-ui-android 项目介绍 rpcsx-ui-android 是一款为 RPCSX 模拟器量身定制的原生 Android 用户界面。该项目的目标是为用户提供流…

Android 15强制edge-to-edge全面屏体验

一、背景 Edge-to-edge 全面屏体验并非 Android 15 才有的新功能,早在 Android 15 之前系统就已支持。然而,该功能推出多年来,众多应用程序依旧未针对全面屏体验进行适配。因此,在 Android 15 的更新中,Google 终于决…

MacOS上如何运行内网穿透详细教程

本文以市面常见、好用的内网穿透为例,一款为开源内网穿透工具Frp;另一款为国产新锐软件ZeroNews。 一、Frp(开源工作、使用自由) 1. 下载 FRP 访问 FRP 的 GitHub 发布页: https://github.com/fatedier/frp/releases 选择适合 …

250207-MacOS修改Ollama模型下载及运行的路径

在 macOS 上,Ollama 默认将模型存储在 ~/.ollama/models 目录。如果您希望更改模型的存储路径,可以通过设置环境变量 OLLAMA_MODELS 来实现。具体步骤如下: 选择新的模型存储目录:首先,确定您希望存储模型的目标目录路…

iOS uni-app 原生插件开发

下面以创建一个物体检测插件为例。 开发环境: XCode 16.3 SDK包 ,4.45 HBuilderX 4.45 1. 解压 SDK 2. 创建一个插件,放到 HBuilder-uniPluginDemo 目录下 3. 配置依赖 打开 HBuilder-uniPlugin.xcodeproj 将 ObjectDetector.xcodeproj 拖…

生产力工具|vscode for mac的安装python库和使用虚拟环境(一)

一、在vscode中运行python代码(mac或windows) (一)在vscode中安装Python插件 若想在vscode中高效率的编辑Python代码,需要安装Python插件,点击下图中红框内的按钮: 然后在左上角的搜索框中输入…

【超适合小白】苹果电脑MAC——抓包工具-Charles使用超详细教程!!!适合小白!!!

一、Charles是什么? Charles是一个HTTP代理服务器,是类似于一个监视器,简单来说可以直接抓取手机或者浏览器中的接口,当手机/浏览器连接Charles的代理访问互联网时,Charles可以监控浏览器发送和接收的所有数据。它允许…

在macOS上安装MySQL

macOS的MySQL有多种不同的形式: 1、本机包安装程序,它使用本机macOS安装程序(DMG)引导您完成MySQL的安装。有关详细信息,请参阅第2.4.2节,“使用本机包在macOS上安装MySQL”。您可以将包安装程序与macOS一…