汇编学习4
显存屏幕上的内容=显存中的数据 8086cpu显存地址空间A0000-BFFFF共计128K,其中B8000-BFFFF共32K的空间,是80*25彩色字符模式第0页的显示缓冲区 可以显示25行,每行80个字符,每个字符占两个字节,低位字节为ascii码,高位字节为显示属性(BL-R G B-I-R G B:闪烁-背景-高亮-前景) 12345678910111213141516171819202122232425262728assume cs:codesg,ds:datasgdatasg segment db 'welcome to masm!'datasg endscodesg segmentstart: mov ax,datasg mov ds,ax mov ax,0b800h mov es,ax mov si,0 mov di,160*12+80-16 mov cx,16w: mov al,[si] mov es:[di],al inc di mov al,71h mo...
汇编学习3
流程转移与子程序jmp段内转移:只修改ip,例如jmp ax段间转移:修改cs:ip,例如jmp 1000:0(debug使用,源程序不可以使用) jmp 标号 jmp far ptr 标号;段间转移 jmp short 标号;段内短转移 jmp near ptr 标号;段内近转移 jcxz 标号如果cx = 0,跳转到标号处执行 call和retcall 标号;跳转到标号处执行ret;返回调用处 123456789101112131415161718192021assume cs:codedata segment db 'conversation',0;0用来标定字符串的结束data endscode segmentstart: mov ax,data moc ds,ax mov si,0 call capital mov ax,4c00h int 21hcapital:mov cl,[si] mov ch,0 jcxz ok;如果cx =...
汇编学习2
用汇编语言编写程序汇编程序–>编译器–>机器码 123mov ax, 4c00Hint 21H 相当于return 0,程序结束,把控制权交还给系统 一个有意义的汇编程序中至少要有一个段—-代码段 段定义段名 segment ----段的开始 ... 段名 ends ----段的结束 end汇编程序结束的标记位置 assume1assume cs:codesg 将段名为codesg的起始地址放入cs代码段寄存器 完整源程序.asm示例123456789101112assume cs:codesgcodesg segment mov ax,0123 mov bx,0456 add ax,bx add ax,ax mov ax,4c00 int 21Hcodesg endsend 编译使用masm编译源码文件 1masm p4-1.asm; 生成p4-1.OBJ 使用link连接OBJ文件 1link p4-1 debug装载程序1debug p4-1 r命令查看寄存器得到ds=075a,cs=...
汇编学习1
环境搭建链接:https://pan.baidu.com/s/1LHbEvY6aZ8pG8IbVDyvAsg?pwd=fduy提取码:fduy 将压缩包中的MASM复制到D盘根目录,然后默认安装dosbox(注意不要修改安装路径) 打开安装好的dosbox 1mount c d:masm 即将d:masm挂载至c盘 1c: 进入c盘 1dir 查看当前路径下文件 1debug 进入debug汇编环境 1r 查看寄存器值 12r ax1234 修改寄存器ax的值 1d 1000:0 查看1000:0内存中的数据 1d 0000:0000 f 查看0000:0000内存中的f个数据 1e 0000:0000 12 15 34 44 修改0000:0000内存中的数据为12 15 34 44 1234a 073f:0100add bx,axmov cx,ax 修改CS:IP指向的指令 1t 执行CS:IP处的一条指令 1u 073f:0100 将073f:0100处机器码指令翻译为汇编指令 物理地址CPU访问内存单元时需要给出内存单元地址,每个内存单元有个唯一的地址,称作物理地址 8...
ffmpeg SDK学习(3)
ffmpeg编码123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146#include <libavcodec/avcodec.h>#include <libavformat/avformat.h>#include <libavutil/opt.h>static int ptsIndex = 0;void encode(AVCodecContext ...
逆波兰表达式
逆波兰表达式又称作后缀表达式,是一种便于计算机运算的数学表达式,我们日常使用的中缀表达式需要用括号确定优先级,而后缀表达式是不需要括号的 中缀表达式转后缀表达式手写实现转换比如想把(3+5)*4+6/(8-5)转为后缀表达式 为所有运算符加括号 (3+5)*4+6/(8-5)—–>(((3+5)*4)+(6/(8-5))) 将运算符移至")"之后 (((3+5)*4)+(6/(8-5)))—–>(((35)+4)*(6(85)-)/)+ 去除所有括号 (((35)+4)*(6(85)-)/)+—–>35+4*685-/+ 即最终结果为35+4*685-/+ C++实现转换1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495...
博客部署
初始化博客1hexo init 安装butterfly主题12git clone -b master https://github.com/jerryc127/hexo-theme-butterfly.git themes/butterflynpm install hexo-renderer-pug hexo-renderer-stylus --save 配置_config.yml12345deploy: type: git repo: https://github.com/xxx/xxx.github.io.git branch: main token: ghxxxxxxxxxxxxxxxxxxxxxxxxxii 安装部署工具1npm install hexo-deployer-git --save 本地测试1hexo s 部署至git page1hexo d 升级主题在主题文件夹下执行 1git pull 升级Hexo12345678910111213141516171819# 使用淘宝源的 cnpm 替换 npm(如果直接用 npm 执行更新命令,大...
TCP分包与粘包
现象 分包 发送端发送一条报文“helloworld”,接收端收到两条报文“hello”、“world” 粘包 发送端发送两条报文,分别为“hello”、“world”,接收端收到一条报文“helloworld” 出现原因 发送数据大于TCP发送缓冲区剩余空间大小、发送数据大于MSS(最大报文长度),TCP将在传输前进行分包 发送数据小于TCP发送缓冲区剩余空间大小、接收端没有及时读取数据,将会发生粘包 解决方法 自定义报文格式,给报文加包头数据,存放完整报文长度信息 数据包使用flag标志位设置分隔 基于TCP的数据封装过程 层级 协议 数据 客户端 数据 应用层 HTTP HTTP头 + 数据 传输层 TCP TCP头 + HTTP头 + 数据 网络层 IP IP头 + TCP头 + HTTP头 + 数据 网络接口层 以太网 包含MAC的以太网头 + IP头 + TCP头 + HTTP头 + 数据 + FCS帧校验序列 以太网packet(1522字节) = 以太网头(22字节) + IP头(最少20字节)+ TCP头(通...
Linux防火墙
RedHat系 查看防火墙状态 1firewall-cmd --status 查看防火墙已开通端口 1firewall-cmd --list-port 开启防火墙 1systemctl start firewalld.service 关闭防火墙 1systemctl stop firewalld.service 重启防火墙 1systemctl restart firewalld.service 开启某个端口,比如我开启的是8381 1firewall-cmd --zone=public --add-port=8381/tcp --permanent 禁止外部某个端口比如80 1firewall-cmd --zone=public --remove-port=80/tcp --permanent Debian系 查看端口开启状态 1sudo ufw status 开启防火墙 1sudo ufw enable 关闭防火墙 1sudo ufw disable 重启防火墙 1sudo ufw reload 开启某个端口,比如我开启的是8381 ...
Linux 网络编程
socket概念运行在计算机中的两个程序通过socket建立起一个管道,数据在管道中传输,socket把复杂的TCP/IP协议族隐藏了起来,对程序员来说,只要用好socket相关函数,就可以完成网络通信。 socket分类socket提供了流(stream)和数据报(datagram)两种通信机制,即流socket和数据报socket 流socket基于TCP协议,传输数据不会丢失、重复、顺序错乱,可靠且双向 数据报socket基于UDP协议,不需要建立和维持链接,可能会丢失和错乱。效率高 相关的结构 socket函数 1int socket(int domain, int type, int protocol); 参数: domain: 协议族。常用的协议族有AF_INET、AF_INET6、AF_LOCAL、AF_ROUTE。在通信中必须采用对应的协议族,AF_INET决定要用ipv4地址(32bit)与端口号(16bit)的组合。 type: socket类型。常用的类型有SOCK_STREAM、SOCK_DGRAM、SOCK_RAW、SOCK_PACKE...











