ASM16 8-10 寻址方式
x86指令编码(硬编码)的结构
opcode最少1个字节,最多3个字节。
opcode是指令中最重要的组成部分。
前缀指令只能影响自己,而opcode、ModR/M、SIB决定了整条指令的长度。
有没有ModR/M是由opcode决定的,有没有SIB是由ModR/M决定的。
定长指令、变长指令
定长指令(精简指令集 arm):它的长度永远没有变化,只要opcode的长度确定了,那么它的长度就确定了。
变长指令(复杂指令集 intel amd):仅仅通过opcode是没有办法确定长度的。
如何区分指令定长还是变长?
opcode后面没有ModR/M,该指令就是定长指令。如果opcode后面紧跟ModR/M,该指令就是变长指令
1234567操作码(1字节) 寻址方式 操作数操作码(1字节) 2bit(寻址方式) 3bit(源操作数) 3bit(目的操作数)寻址方式:11 => 寄存器=>寄存器10 => [bx+di+xxx]01 => [bx+di-xxx]00 => [bx+ ...
ASM16 7 地址与逻辑段
存储器组织与段寄存器
寄存器是微处理器内部暂存数据的存储单元,以名称表示
存储器则是微处理器外部存放程序及其数据的空间
程序及其数据可以长久存放在外存,在程序需要是才进入主存
主存需要利用地址区别
数据信息的表达单位
计算机中信息的单位
二进制位Bit:存储一位二进制数:0或1
字节Byte:8个二进制位,D7~D0
字Word:16位,2个字节,D15~D0
双字DWord:32位,4个字节,D31~D0
最低有效位LSB:数据的最低位,D0位
最高有效位MSB:数据的最高位,对应字节、字、双字分别指D7、D15、D31位
存储单位及其存储内容
每个存储单元都有一个编号;被称为存储器地址
每个存储单位存放一个字节的内容
多字节数据存放方式
多字节数据在存储器中占连续的多个存储单元:
存放时,低字节存入低地址,高字节存入高地址;
表达时,用它的低地址表示多字节数据占据的地址空间。
80x86处理器采用“低对低、高对高”的存储形式,被称为“小端方式Little Endian”
相对应还存在“大端方式Big Endian”
存储单元及其存储内容
每个存储单 ...
ASM16 5-6 汇编语言寄存器篇(标志寄存器)
标志寄存器
标志(Flag)用于反映指令执行结果或控制指令执行性形式
8086处理器的各种标志形成了一个16位的标志寄存器FLAGS(程序状态字PSW寄存器)
标志的分类
状态标志——用来记录程序运行结果的状态信息,许多指令的执行都将相应地设置它 CF ZF SF PF OF AF
控制标志——可由程序根据需要用指令设置,用于控制处理器执行指令的方式 DF IF TF
进位标志CF(Carry Flag)
当运算结果的最高有效位有进位(加法)或借位(减法)时,进位标志置1,即CF=1;否则CF=0.
零标志ZF(Zero Flag)
若运算结果为0,则ZF=1;否则ZF=0
符号标志SF(Sign Flag)
运算结果最高位为1,则SF=1;否则SF=0
奇偶标志PF(parity Flag)
当运算结果最低字节中“1”的个数为零或偶数时,PF=1;否则PF=0
溢出标志OF(Overflow Flag)
若算术运算的结果有溢出,则OF=1;否则OF=0
溢 ...
ASM16 3-4 汇编语言寄存器篇
什么是指令系统
计算机的指令系统就是指该计算机能够执行的全部指令的集合
每种计算机都有它支持的指令集合
16位8086指令系统是Intel 80x86系列微处理器指令系统的基础
调试程序DEBUG
DEBUG是常用的汇编语言级调试工具,为汇编语言的程序员提供了分析指令、跟踪程序的有效手段
常用命令:
-A汇编
-U反汇编
-T单步执行
-G断点执行
-D数据显示
-R寄存器
8086的寄存器组
对程序员来说,8086内部结构的最重要的是其寄存器组
8个通用寄存器
1个指令指针寄存器
1个标志寄存器
4个段寄存器
8086的通用寄存器
8086的16位通用寄存器是:AX BX CX DX SI DI BP SP
其中前4个数据寄存器都还可以分成高8位和低8位两个独立的寄存器
8086的8位通用寄存器是:AH BH CH DH AL BL CL DL
对其中某8位的操作,并不影响另外对应8位的数据
数据寄存器
数据寄存器用来存放计算的结果和操作数,也可以存放地址
每个寄存器又有它们各自的专用目的
AX——累加器,使用频率最高,用于算术。逻辑运算以及与外设传送信息 ...
ASM16 1-2 汇编语言入门
什么是汇编语言
汇编语言的主要特点:
汇编语言程序与处理器指令系统密切相关
程序员可直接、有效地控制系统硬件
形成的可执行文件运行速度快、占用主存容量少
汇编语言和高级语言
汇编语言与处理器密切相关:汇编语言程序的通用性、可移植性较差
高级语言与具体计算机无关:高级语言程序可以在多种计算机上编译后执行
汇编语言功能有限、涉及硬件细节:编写程序比较繁琐,调试起来也比较困难
高级语言提供了强大的功能,不必关心琐碎问题:类似自然语言的语法,易于掌握和应用
汇编语言本质上就是机器语言:
可以直接、有效地控制计算机硬件
易于产生速度快、容量小的高效率目标程序
高级语言不针对具体计算机系统
不易直接控制计算机的各种操作
目标程序比较庞大、运行速度较慢
汇编语言的优点:
直接控制计算机硬件部件
可以编写在“时间”和“空间”两方面最有效的程序
汇编语言的缺点:
与处理器密切有关
需要熟悉计算机硬件系统、考虑许多细节
编写繁琐,调试、维护、交流和移植困难
汇编语言的优点使得它在程序设计中占有重要的位置,是不可被取代的
汇编语言的缺点使得人们主要采用高级语言进行程序开发工作
有时需要 ...
网络 5 udp和tcp的区别
udp和tcp的区别区别
udp-无连接,数据报,不安全不可靠不稳定
tcp-面向连接,数据流,安全可靠稳定
udp
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061// Server.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。//#define _WINSOCK_DEPRECATED_NO_WARNINGS#include <iostream>using namespace std;#define WIN32_LEAN_AND_MEAN//仅保留windows.h中的必要的头文件//如果不加这一行则要把Winsock2.h放到windows.h前面,否则会因重定义而报错#include <windows.h>#include <Winsock2.h>#pragma comment(lib,"Ws2_32.lib& ...
网络 3-4 心跳包和tcp
心跳包和tcp心跳包这节用的还是上节课的代码,算是对上一节的补充扩展
keep-alive-保活
在ChatClient中添加类向导
123456void CChatClientDlg::OnTimer(UINT_PTR nIDEvent){ CPackage pkg(PT_HEARTBEAT, m_client); sendto(m_sockClient, (char*)&pkg, sizeof(pkg), 0, (sockaddr*)&m_siServer, sizeof(m_siServer)); CDialogEx::OnTimer(nIDEvent);}
添加类
12345678910111213//CLock.h#pragma once#include<Windows.h>class CLock{public: CLock(); ~CLock(); void Lock(); void Unlock();private: CRITICAL_SECTION m_cs;};
123456789101112 ...
网络 2 聊天室
聊天室上线新建控制台程序
新建头文件
Proto.h
123456789101112131415161718192021222324252627282930#pragma once#define WIN32_LEAN_AND_MEAN#include <windows.h>#include <WinSock2.h>#pragma comment(lib,"ws2_32.lib")//包类型enum PackageType{ PT_ONLINE, PT_OFFLINNE, PT_PUBLIC,//群聊,公聊 PT_PRIVATE//私聊};#define NAMELEN 64struct CLientInfo{ sockaddr_in m_si; char m_szName[NAMELEN];};#define MASLEN 1300struct CPackage{ PackageType m_pt;//包的类型 CLientInfo m_ci;//客户端的信息 char m_szMsg[M ...
网络 1 udp
基础概念协议:约定好的数据格式,约定好的数据的解析方式
在cmd中输入ipcongfig可以查看IP配置
ip地址:当我们使用计算机或者其他网络设备进行互联网通信时,每一个设备都需要一个唯一的标识符来进行通信。这个标识符被称为 IP 地址。IP(Internet Protocol)地址是一个由32位二进制表示的数字,通常被分为四个数字组成的点分十进制的形式表示,例如:192.168.1.1。
端口
protocol port(协议端口)
操作系统中通信的端点,与IP地址及通信协议关联,用来获取相应的网络服务。
(eg.IP地址就像银行的地址,而端口就是银行处理不同业务的窗口)
在网络技术中,端口(Port)大致有两种意思:
一是物理意义上的端口,比如,ADSL Modem、集线器、交换机、路由器用于连接其他网络设备的接口,如RJ-45端口、SC端口等等。
二是逻辑意义上的端口,一般是指TCP/IP协议中的端口
公网
公网是相对于内网而言的。内网上网的计算机得到的IP地址是Internet上的保留地址;而公网上网的计算机得到的IP地址是因特网的公用地址,是非保留的地址。公网的 ...
windows 14 钩子和服务
钩子和服务钩子-windows hook
SetWindowsHookEx
参数说明:
参数 idHook:指示欲被安装的挂钩处理过程之类型,类型如下。WH_MSGFILTER(-1):安装一个挂钩处理过程,以监视由对话框、消息框、菜单条、或滚动条中的输入事件引发的消息.详情参见MessageProc挂钩处理过程.
WH_JOURNALRECORD(0):安装一个挂钩处理过程,对寄送至系统消息队列的输入消息进行纪录.详情参见JournalRecordProc挂钩处理过程.
WH_JOURNALPLAYBACK(1):安装一个挂钩处理过程,对此前由WH_JOURNALRECORD 挂钩处理过程纪录的消息进行寄送.详情参见 JournalPlaybackProc挂钩处理过程.
WH_KEYBOARD(2):安装一个挂钩处理过程对击键消息进行监视. 详情参见KeyboardProc挂钩处理过程.
WH_GETMESSAGE(3):安装一个挂钩处理过程对寄送至消息队列的消息进行监视,详情参见 GetMsgProc 挂钩处理过程.
WH_CALLWNDPROC(4): 安装一个挂钩处理过程,在 ...