搜档网
当前位置:搜档网 › Win32笔记

Win32笔记

Win32笔记
Win32笔记

Day 01

1、Win32程序的基本类型:

1)Win32控制台程序

2)Win32窗口程序

3)Win32库程序(动态库、静态库)

动态库:执行文件执行时从中获取代码

静态库:在编译链接时,将库中代码放入到执行文件中

2、编译器:cl.exe /c(只编译不连接)

连接器:link.exe /out:文件名,指定生成的应该用程序名

资源编辑器:rc.exe

3、头文件就只需要包含windows即可

4、窗口程序编程模型:

1)程序的入口函数:WinMain

2)窗口处理函数:WindowProc

3)窗口注册函数:RegisterClass

4)窗口创建函数:CreateWindow

5)窗口的显示:ShowWindow/UpdateWindow

6)消息循环:GetMessage/DispatchMessage

5、消息提示框:MessageBox

6、程序退出的时候,会发送一个WM_DESTROY的消息,程序自动调用WndProc

传递给使用者

7、想要销毁窗口,需要利用PostQuitMessage发送一个退出消息,让系统结束进

程。

8、使用资源:先建立一个资源脚本文件*.rc然后利用rc.exe进行编译生成*.res

文件,然后使用link将*.res文件链接到程序中

*.rc文件的格式:num Type “path”

其中num是随意指定一个标识符,type是资源类型,path是资源的地址名称9、ICON的使用,在RegisterClass的时候,需要指定ICON参数,使用LoadIcon

函数进行指定

Day 02

1、字符的编码方式:

DBCS英文字母一个字节,中文字符两个字节(普遍char)

UNICODE所有字符均占两个字节(宽字符wchar_t)

注:1)给wchar_t初始化时需要加L 如:wchar_t *str =L”abc”

2)当对宽字节字符进行操作时,需要调用对应的宽字符操作函数

3)宽字节字符串和多字节字符串之间的转化

转换函数:WideCharToMultiByte / MultiByteToWideChar

转换过程:①调用上面的函数求解转化后的字符串长度

②然后分配字符串的空间

③再次调用上面的函数,把结果存入分配的空间中。

2、窗口类:

每个窗口都是基于相应的窗口类而创建的,每个窗口类依靠类名称唯一标识3、窗口类的分类:

1)系统窗口类:系统已经定义好的窗口类,所有应用程序都可以直接使用2)应用程序全局窗口类:用户自定义,当前应用程序所有模块都可以使用3)应用程序局部窗口类:用户自己定义,当前应用程序中本模块可以使用4、窗口类的使用:

1)注册前需要先定义WNDCLASS / WNDCLASSEX 窗口类的结构体

2

3)窗口类的常见风格:

CS_GLOBALCLASS ---应用程序全局窗口类

CS_HREDRAW ---当窗口水平变化时,窗口重新绘制

CS_VREDRAW ---当窗口垂直变化时,窗口重新绘制

CS DBLCLKS一允许窗口接收鼠标左键双击

CS_ NOCLOSE一窗口没有关闭按钮

5、创建窗口时,窗口类的查找过程:

1)根据传入的窗口类名称,在局部窗口类中查找,如果找到则执行2否则3 2)比较局部窗口类与创建窗口时传入的HINSTANCE变量。如果发现相等,创建窗口返回。如果不相等,继续执行3

3)在应用程序全局窗口类中查找,如果找到执行4,否则执行5

4)使用找到的窗口类的信息,创建窗口返回。

5)在系统窗口类中查找,如果找到创建窗口返回,否则创建窗口失败。

6、窗口类的附加数据cbClsExtra(设置窗口类附加数据的内存大小)

利用SetClassLong和GetClassLong从窗口类附加数据中存入和读取数据

所有基于该窗口类创建的窗口都会带有这个附加数据

窗口附加数据cbWndExtra(设置窗口附加数据的内存大小)

利用SetWindowLong和GetWindowLong从窗口附加数据中存、取数据7、相关API函数

GetClassInfo / GetClassInfoEx 获取窗口类的信息

UnregisterClass 注销窗口类

GetClassName 获取窗口类的名称

Day03

1、创建窗口:CreateWindow /CreateWindowEx

创建时通常添加WS_OVERLAPPEDWINDOW风格

2、创建子窗口时:1)设置父窗口句柄2)添加WS_CHILD风格

可以利用SetParent / GetParent函数来设置和获取指定窗口的父窗口

3、Win32的消息机制

1)程序执行机制分为:过程驱动、事件驱动(Win32窗口程序)

2)消息的结构体MSG,里面包含了消息ID,消息参数,产生时间等信息3)窗口处理函数,它是回掉函数,函数原型为WindowProc

当GetMessage函数得到消息后会调用DispatchMessage函数,该函

数可以调用对应窗口的窗口处理函数,并传递消息ID和消息参数系统默认的窗口处理函数为DefWindowPro c

4)消息相关函数

GetMessage获取指定的消息ID范围内的消息(阻塞函数)

只有接收到WM_QUIT消息的时候才返回FALSE,结束消息循环

可以使用PostQuitMessage向窗口发送WM_QUIT消息

PeekMessage以查看的方式获取消息,但是并不取出(非阻塞函数)

TranslateMessage将按键消息翻译后产生(发送)一个字符消息

DispatchMessage派发消息,实际就是在内部调用窗口处理函数

4、几个常用的消息

1)WM_DESTROY 窗口被销毁时发出的消息,无消息参数

2)WM_SYSCOMMAND 点击窗口最大化、最小化和关闭按钮时发出的消息

wParam 具体的命令lParam 鼠标的位置

3)WM_CREATE 在窗口创建成功但是还未显示之前发出的消息lParam 保存了CREATESTRUCT结构体的指针

4)WM_SIZE 窗口大小发生变化后发出的消息

wParam 窗口大小发生变化的原因lParam 变化后客户区的大小5)WM_QUIT 用于结束消息循环

6)WM_PAINT 绘图消息

7)键盘消息

8)鼠标消息

9)WM_TIMER 定时器消息

5、消息分类

1)系统消息系统定义好的消息ID 0-0x03FF

2)用户自定义消息用户自己定义ID 0x0400-0x7FFF

3)应用程序消息程序之间通讯时使用ID 0x8000-0Xbfff

4)系统注册消息在系统注册并生成相应的消息ID 0xC000-0xFFFF

6、消息队列:存放消息的内存空间,先进先出

1)系统消息队列:由系统维护,存放系统产生的消息

2)程序消息队列:每个进程(程序)都有,由进程(程序)自己维护

3)消息产生后首先会进入系统消息队列,然后由系统将消息队列中的消息

分配到该消息对应的程序消息队列中。

7、消息分类:

1)队列消息:消息发送后先放入消息队列,然后通过消息循环从队列中获取

PostMessage发送队列消息,发出后立刻返回,不等后消息处理2)非队列消息:消息发送时,找到消息接收窗口的窗口处理函数,然后调用

SendMessage发送非队列消息,发出后等候消息处理结束返回处理结果3)消息本身并不分类,主要是看消息是怎么发送的

8、消息的获取过程GetMessage / PeekMessage

1)在程序消息队列中查找消息,若有满足条件的消息则取出并返回

2)如果程序消息队列中没有消息,则向系统消息队列获取获取消息。若系统队列有该进程消息,则会将消息转发到进程队列,程序获取消息返回

3)如果系统消息队列也没有消息,检查当前窗口的需要重新绘制的区域,如果发现有需要绘制的区域,产生WM_ PAINT消息,取得消息返回

4)如果没有重新绘制区域,则检查定时器,如果有到时的定时器,产生WM_TIM ER消息,取得消息返回

5)如果没有到时的定时器,整理程序的资源、内存等等。

6)GetMessage会继续等候下一条消息。

PeekMessage会返回FALSE,交出程序的控制权。

相关API函数

MoveWindow 移动窗口(包括更改大小,一共是四个位置参数)

Day04

1、WM_PAINT消息

1)消息的产生:由于窗口相互覆盖等,产生需要绘制的区域,系统将会产生WM_PAINT消息

2)利用InvalidateRect函数产生窗口无效区域,进而产生WM_PAINT消息。

3)如果一个消息队列中,有多个WM_PAINT消息,只有最后一个会被处理4)消息参数:

WPARAM不使用

LPARAM不使用

5)消息处理:

开始绘图调用BeginPanit

绘制图形

结束绘图调用EndPaint

2、键盘消息

1)按键消息:

WM_KEYDOWN按键被按下时产生

WM_KEYUP 按键弹起时产生

WM_SYSKEYDOWN 当系统按键被按下时产生ALT/F10

WM_SYSKEYUP 系统按键弹起时产生

WM_CHAR 当字符按键被按下,TranslateMessage会将WM_KEYDOWN 消息翻译,并发出WM_CHAR消息。

2)消息参数:

WPARAM 虚拟键码(在搜索里面搜索virtual-key Codes即可查得)

LPARAM 按键的相关信息

3)WM_CHAR消息的参数:

WPARAM 输入的字符

LPARAM按键相关信息

4)KEYDOWN消息可重复出现,KEYUP消息只能在按键松开时出现1次3、鼠标消息

1)基本鼠标消息

WM_LBUTTONDOWN 鼠标左键按下

WM_LBUTTONUP 鼠标左键弹起

WM_RBUTTONDOWN 鼠标右键按下

WM_RBUTTONUP 鼠标右键弹起

WM_MOUSEMOVE 鼠标移动消息

2)双击消息

WM_LBUTTONDBCLK 鼠标左键双击

WM_RBUTTONDBCLK 鼠标右键双击

鼠标双击时先产生单击消息,然后再产生双击消息

3)滚轮消息:WM_MOUSEWHEEL 鼠标滚轮消息

4)基本鼠标消息和双击消息的参数:

WPARAM 其他按键的状态,如:Ctrl/Shift

LPARAM 鼠标的位置,客户区坐标系

LOWORD ---x坐标HIWORD ---y坐标

5)鼠标滚轮消息的参数:

WPARAM :LOWORD 其他按键的状态

HIWORD 滚轮偏移量,120的倍数(正数向前滚动,负数向后滚动)LPARAM 鼠标当前的位置(屏幕坐标系)

LOWORD ---x坐标HIWORD ---y坐标

6)鼠标的按下和弹起是成对出现的

7)鼠标移动过程中,会根据移动速度产生一系列的鼠标移动消息

8)使用双击消息的时候需要在注册窗口类时添加CS_DBLCLKS风格

9)坐标转换函数ClientToScreen,将客户区坐标转化为屏幕坐标ScreenToClient将屏幕坐标转化为客户区坐标

4、定时器消息

1)可以在程序中设置定时器,当到达时间间隔时,定时器会向程序发送一个WM_TIMER消息。定时器的精度比较低,时间可能不准。

2)消息参数:

WPARAM 定时器的ID

LPRAMA 定时器的处理函数指针

3)定时器的使用

创建定时器:SetTimer

创建时如果指定窗口句柄,则WM_TIMER消息将会发送给指定窗

口,此时如果定时器处理函数赋值为NULL,那么消息将会由窗口

处理函数处理,否则交由定时器处理函数TimerProc处理。如果创建

时未指定窗口句柄,定时器处理函数不能为NULL。

关闭定时器: KillTimer

相关API函数

GetClientRect获取窗口客户区的大小

Day 05

1、菜单的使用每个菜单都会有个HMENU句柄每个菜单项都有一个ID号

1)菜单分类:

窗口顶层菜单CreateMenu创建窗口顶层菜单

弹出式菜单CreatePopupMenu创建弹出式菜单

系统菜单GetSystemMenu获取系统菜单(bRevert建议为false)2)菜单操作函数

AppendMenu添加菜单项,或者将弹出式菜单加入顶层菜单

InsertMenu插入菜单项

DeleteMenu删除菜单项(彻底删除)

RemoveMenu移除菜单项

3)将系统菜单设置到窗口:SetMenu

4)点击菜单项产生的消息:WM_COMMAND消息

5)WM_COMMAND消息参数

WPARAM:LOWORD 对于菜单为0 HIWORD 菜单项的ID

LPARAM:对于菜单为NULL

6)菜单项的状态可以使用菜单API修改状态

CheckMenuItem / EnableMenuItem(使用时注意用菜单索引还是菜单ID)7)点击菜单项后,显示弹出式菜单之前会产生WM_INITMENUPOPUP消息WPARAM 菜单句柄

LPARAM:LOWORD 被点击的菜单项索引HIWORD 是否是系统菜单8)点击系统菜单项产生的消息:WM_SYSCOMMAND消息

WPARAM LOWORD是命令ID(菜单ID)

2、右键菜单

1)右键菜单属于弹出式菜单,利用CreatePopupMenu来创建

2)TrackPopupMenu函数显示菜单(屏幕坐标系)

3)使用右键菜单的位置

鼠标右键抬起发出两个消息:WM_RBUTTONUP / WM_CONTEXTMENU 因此可以在两个消息中添加右键菜单,区别是UP是基于客户区坐标系,而CONTEXT是基于屏幕坐标系,这个与右键菜单的显示坐标系相同。

3、菜单资源的使用MENU

1)添加菜单资源

2)加载菜单资源LoadMenu

将数字形式资源ID转化为字符形式的资源ID:MAKEINTRESOURCE 3)菜单的挂载形式:

注册窗口时挂载

创建窗口时挂载

4、图标资源的使用ICON

1)添加资源

2)加载LoadIcon

3)使用图标资源:注册窗口类时添加;WM_SETICON消息中添加

4)绘制图标:DrawIcon

5、光标资源的使用

1)添加光标资源:默认32*32,每个光标都有HotSpot,即当前鼠标的热点2)加载资源LoadCursor

3)两种方式使用光标资源:注册窗口类时添加;用SetCursor函数设置光标4)鼠标在窗口内移动时会产生WM_SETCURSOR消息

WPARAM 当前使用的光标句柄

LPARAM LOWORD 当前区域的代码HIWORD鼠标的消息ID 5)LoadCursorFromFile从硬盘中加载光标,既可以加载动态也可以加载静态光标

6)GetCursorPos用于获取鼠标当前位置(屏幕坐标系)

6、字符串资源的使用

1)添加字符串资源

2)加载字符串资源LoadString

7、加速键资源(快捷键)

1)添加加速键资源

2)加载加速键资源LoadAccelerators

3)处理加速键消息TranslateAccelerator

4)加速键发出WM_COMMAND消息

WPARAM HIWORD为1,表示加速键;为0,表示菜单

LOWORD 为菜单项ID/加速键ID

5)TranslateAccelerator处理过程

监测消息是否是WM_KEYDOWN / WM_SYSKEYDOWN,获取按键状态根据按键状态,从HACCEL中查找对应的命令ID

找到对应的ID发送WM_COMMAND消息

Day 06

1、绘图相关基础

1)绘图设备DC(Device Context)句柄HDC

2)GDI(windows graphics device interface)win32提供的绘图API

3)颜色用RGB三个颜色表示,每种颜色占8位,共24位

32位颜色,多出来的8位表示透明度

16位颜色:只能表示2^16种颜色

2、颜色的使用

1)用COLORREF来定义颜色COLORREF nColor;

2)用RGB宏来表示颜色nColor=RGB(255,0,0) / RGBA(255,0,0,0) 有透明度3)从一个颜色中获取RGB值:

GetRValue/GetGValue/GetBValue

3、点的使用

绘制点:SetPixel

获取点的颜色:GetPixel

4、线的使用

1)直线

MoveToEx移动当前点到指定位置

LineTo从当前点绘制直线到指定位置

当前点:上一次绘图的最后一点,初始为(0,0)

2)弧线:AngleArc

3)折线:

Polyline给定一个定点坐标数组,然后绘制折线

PolyLineTo和Polyline相同,只是开始时由当前点画直线至第一个顶点4)曲线:PolyBezier 根据给定的点数组画曲线,最少四个点

5)多样式线条:PolyDraw给定点数组,选择点之间的绘制方式,进行绘制5、矩形、圆等图形的绘制

1)普通矩形:Rectangle

2)带圆角的矩形:RoundRect

3)椭圆绘制:Ellipse

4)饼的绘制:Pie

5)弦的绘制:Chord

6)多边形:Polygon

6、GDI绘图对象---画笔HPEN

1)画笔作用:控制线条的颜色样式和宽度

2)画笔的使用:

a.创建画笔:CreatePen

b.创建HGDIOBJ对象,以保存旧画笔

c.设置成当前DC可以使用的画笔,并保存旧画笔:SelectObject

d.绘制图形

e.从当前DC中取出画笔,将旧画笔放入当前DC中SelectObject

f.销毁画笔:DeleteObject

7、GDI绘图对象---画刷HBRUSH

1)画刷作用:填充封闭图形,包括样式颜色等

2)画刷的使用:

a.创建画刷:CreateSolidBrush创建实心画刷

CreateHatchBrush创建填充画刷(以各种线条来填充)

CreatePatternBrush创建位图画刷(以位图来填充区域)

b.将画刷应用到DC中:SelectObject

c.绘图

d.将画刷从DC中取出:SelectObject

e.删除画刷:DeleteObject

8、GDI绘图对象---位图HBITMAP

1)位图:通过保存图像上每个点的颜色生成相应的位图文件光栅图–记录图中每一点的颜色信息

矢量图–记录图像中的算法和绘图指令

2)位图的使用

a.在资源中添加位图资源

b.加载位图:LoadBitmap

c.创建放置位图的DC:CreateCompatibleDC(虚拟DC)

d.将位图放入匹配的DC中:SelectObject

e.绘制位图:原图绘制:BitBlt缩放绘制:StretchBlt

f.取出位图:SelectObject

g.释放位图:DelectObject

h.释放匹配的DC:DeleteDC

3)获取位图信息:GetObject

Day 07

1、坐标系分类

1)设备坐标系:以像素为单位,以设备左上角为原点,x右y下为正屏幕坐标系屏幕左上角为原点

窗口坐标系窗口左上角为原点

客户去坐标系以窗口的客户去左上角为原点

2)逻辑坐标系:在GDI绘图中,都用逻辑坐标系,可以设置坐标单位2、坐标系的映射

1)映射模式:逻辑坐标系和设备坐标系之间的映射关系

MM_TEXT 默认模式1个逻辑单位对应1设备单位,x右y下为正

MM_LOENGLISH 1个逻辑单位=0.01英寸,x右y上为正

MM_HIENGLISH 1个逻辑单位=0.001英寸,x右y上为正

MM_LOMETRIC 1个逻辑单位=0.1毫米,x右y上为正

MM_HIMETRIC 1个逻辑单位=0.01毫米,x右y上为正

MM_TWIPS 1个逻辑单位= 1/1440英寸,打印机使用单位

MM_ISOTROPIC 1个逻辑单位=自定义,x和y方向也是自定义

MM_ANISOTROPIC x的1个逻辑单位=自定义1,

y的1个逻辑单位=自定义2,x和y方向也是自定义2)映射模式的使用

a.设置新映射模式:SetMapMode

b.绘图

c.恢复旧的映射模式:SetMapMode

3)定义MM_ISOTROPIC和MM_ANISOTROPIC后,自定义映射关系设置设备单位:SetViewportExtEx

设置逻辑单位:SetWindowExtEx

同时利用上面两个函数才能确定逻辑单位与设备单位的比

可以通过+-号来改变x和y的正方向

3、文字和字体

1)文字的绘制:TextOut将文字绘制到指定位置

DrawText将文字绘制到指定的矩形框内

2)文字颜色:SetTextColor

文字背景色:SetBkColor

文字背景模式:SetBkMode

3)字体:字体句柄HFONT字体名标识字体类型

4)字体的使用

a.创建字体:CreateFont

字符宽度建议写0;常用字符集:GB2312_CHARSET

b.应用字体到DC:SelectObject

c.绘制文字

d.取出字体:SelectObject

e.删除字体

4、对话框

1)对话框分类

模式对话框:模式对话框显示时,会禁止本进程的其他窗口交互

无模式对话框:对话框显示后,不影响其他窗口的使用

2)模式对话框的使用

a.添加对话框资源

b.对话框的处理函数:DialogProc

返回TRUE 表示DialogProc处理了消息,缺省处理函数不需处理

返回FALSE表示DialogProc没处理此消息,交给缺省处理函数处理

c.创建对话框:DialogBox阻塞函数,只有当对话框关闭后才返回

d.关闭对话框:EndDialog不能用DestroyWindow函数

DestroyWindow函数销毁对话框窗口但是不返回,阻塞不解除

3)无模式对话框

a.添加对话框资源

b.对话框的处理函数:DialogProc

c.创建对话框:CreateDialog非阻塞函数,创建成功后返回窗口句柄

d.显示对话框:ShowWindow

e.关闭对话框:DestroyWindow不能使用EndDialog

4)对话框消息:WM_INITDIALOG 在对话框创建后但是未显示之前产生,可以完成一些初始化操作,与WM_CREATE相似

WPARAM 当前接收输入焦点子控件的窗口句柄

LPARAM 创建时附带的参数

5)对话框和普通窗口的区别

a.创建方式:CreateWindowExDialogBox/CreateDialog

b.窗口处理函数:对话框DiaologProc 缺省函数调用自定义处理函数

普通窗口WindowProc 需要调用缺省窗口函数

c.窗口消息:WM_CREATE WM_INITDIALOG

d.窗口关闭:DestroyWindowEndDialog/DestroyWindow

Day 08

1、子控件基础

1)子控件的创建:系统已经注册好,直接使用CreateWindowEx就可创建,每个控件都有一个ID号,ID号要求不重复

2)子控件的消息:子控件和父窗口的交互都是通过消息完成的,窗口消息:使用SendMessage向控件发消息,获取控件信息或设置控件

通知消息:控件有事件发生后向所在的父窗口发送通知消息

父窗口根据通知消息的ID,进行处理(WM_COMMAND)

2、静态框窗口类名称:STATIC

1)静态框的创建:CreateWindow菜单项要变成控件ID)(HMENU)1001 文字静态框SS_SIMPLE 用于显示文字

图标静态框SS_ICON/BITMAP创建时窗口的名称改为图标ID,”#101”

2)窗口消息

SendMessage发送到控件

STM_SETICON / STM_SETIMAGE 更改显示的图标

3)通知消息需要在创建时加上SS_NOTIFY风格

通过WM_COMMAND消息传递

3、按钮窗口类名称:BUTTON

1)按钮分类:

下压式按钮:BS_PUSHBUTTON / BS_DEFPUSHBUTTON

分组框:BS_GROUPBOX容器,用于提升界面友好性

复选框:BS_CHECKBOX / BS_AUTOCHECKBOX

三态式复选框:BS_3STATE / BS_AUTO3STATE

单选框:BS_RADIOBUTTON / BS_AUTORADIOBUTTON 2)下压式按钮

通知消息:BN_CLICKED

3)复选框:

风格:BS_CHECKBOX 点击选择时,需要自己维护

BS_AUTOCHECKBOX 点击选择时,系统维护

BS_3STATE 复选框三种状态,勾选/非勾选/灰色勾选自己维护

BS_AUTO3STATE 系统维护的三态复选框

窗口消息:BM_SETCHECK wParam 设置复选框状态lParam 为0 BM_GETCHECK 参数都为0 当前状态通过SendMessage函数返回通知消息:BN_CLICKED

4)单选按钮

风格:BS_RADIOBUTTON点击选择时,需要自己维护

BS_AUTORADIOBUTTON 点击选择时,系统维护

窗口消息:BM_SETCHECK / BM_GETCHECK

通知消息:BN_CLICKED

5)一组单选框只能选一个,单选框的分类可以使用WS_GROUP风格从当前具有WS_GROUP风格的单选框到下一个WS_GROUP风格单选

框之前为1组单选框

4、编辑框窗口类名称:EDIT

1)编辑框分类

单行编辑框只能处理一行文字默认样式

多行编辑框可以显示多行文字ES_MULTILINE

密码编辑框密码输入ES_PASSWORD

2)常用风格

ES_AUTOHSCRO水平方向超过边界时仍可输入ES_AUTOVSCROLL

WS_HSCROLL 超过边界时显示滚动条WS_VSCROLL

ES_NUMBER 只允许输入数字

3)窗口消息

WM_SETTEXT wPAram-0 lParam-被设置的字符串的buff

WM_GETTEXT wParam- buff的大小lParam- 接收字符串的buff

WM_GETTEXTLIENGTH 参数为0,文本长度通过SendMessage返回

WM_SETFONT 给编辑框设置字体

4)通知消息

EN_CHANGE 当编辑框内的文字被修改时,通知父窗口

5、附加:

1)一般用new或malloc申请内存后,先用memset清0

2)文本文件长度的获取,一般用fseek把文件指针放到文件末尾,然后用ftell 求文件长度

3)文本框重绘之前会发送WM_CTLCOLOREDIT消息到父窗体,一般通过此消息设置文本框的背景和颜色

4)SetWindowText函数用于更改窗口标题栏信息

GetWindowText函数获取窗口标题栏字符串

GetWindowTextLen获取获取窗口标题栏字符串长度

6、组合框窗口类名称:EDIT

1)组合框分类

简单组合框:CBS_SIMPLE

下拉式组合框:可以输入CBS_DROPDOWN

下拉列表式组合框:只能从选项中选择CBS_DROPDOWNLIST 2)窗口消息

选项的添加:CB_ADDSTRING (加在最后)

CB_INSERTSTRING(在中间插入)

选项的删除:CB_DELETESTRING(删除指定项)

CB_RESETCONTENT(清楚所有项)

获取和设置选择项:CB_GETCURSEL获取选择项

CB_SETCURSEL 设置当前选择项

查找选择项:CB_FINDSTRING 根据字符串查找项(非精确)

从wParam指定项的下一项开始查找lParam指定的字符串

CB_FINDSTRINGEXACT 精确查找字符串

CB_SELECTSTRING 查找并设置成当前被选择项(非精确)获取选项的字符:CB_GETLBTEXTLEN 获择取选项字符串长度CB_GETLBTEXT 获取选择项的字符串(不能获取输入字符)

WM_GETTEXT 获取字符串(可以获取输入字符)

目录的显示:CB_DIR 在组合框中显示指定路径下的文件和子目录3)选项的附加数据

每个选项都可以保存自定义的数据

CB_SETITEMDATA(保存数据)/ CB_GETITEMDATA(取出数据)4)通知消息

CBN_SELCHANGE 当选择项发生变化后通知父窗口

CBN_EDITCHANGE 当输入发生变化后

7、列表框窗口类名称:LISTBOX和组合框相似

1)列表框分类

单列列表框:默认风格

多列列表框:LBS_MULTICOLUMN

2)窗口消息

选项的添加:LB_ADDSTRING(加在最后)

LB_INSERTSTRING(在中间插入)

选项的删除:LB_DELETESTRING(删除指定项)

LB_RESETCONTENT(清楚所有项)

获取和设置选择项:LB_GETCURSEL获取选择项

LB_SETCURSEL 设置当前选择项

LB_GETSEL 获取指定项的选择状态

LB_SETSEL 设置指定项的选择状态

LB_GETSELCOUNT 获取被选择的数量

LB_GETSELITENS 获取被选择项的索引

查找选择项:LB_FINDSTRING 根据字符串查找项(非精确)

获取选项的字符:LB_GETTEXTLEN 获择取选项字符串长度

LB_GETLBTEXT 获取选择项的字符串(不能获取输入字符)3)选项的附加数据

每个选项都可以保存自定义的数据

LB_SETITEMDATA(保存数据)/LB_GETITEMDATA(取出数据)4)通知消息

LBN_SELCHANGE 当选择项发生变化后通知父窗口

8、滚动条窗口类名称:SCROLLBAR

1)滚动条的分类:水平滚动条SBS_HORZ

垂直滚动条SBS_VERT

2)消息处理:水平滚动条WM_HSCROLL

垂直滚动条WM_VSCROLL

3)滚动条的滚动范围:SBM_SETRANGE 设置滚动条的范围

SBM_GETRANGE 获取滚动条的范围

4)滑块位置的设置和获取:SBM_SETPOS 设置滑块位置

SBM_GETPOS 获取滑块位置

注:WM_COMMAND消息参数详解

WPARAM: LOWORD 菜单项、加速键、控件ID

HIWORD 对菜单项为0,对于加速键为1,对于控件为通知码LPARAM:对于菜单项为NULL,对于控件为控件窗口句柄

Day 09

1、Windows库程序

1)静态库程序LIB

2)动态库程序DLL

2、静态库程序

1)特点:a.运行时不独立存在 b.链接到可执行文件或者动态库中

c.目标程序的归档

2)静态库的创建和使用

创建静态库:创建静态库项目,源文件使用.c文件

在程序中导入静态库:关键字pragma

#pragma comment(lib,”路径”);

使用静态库函数:声明要使用的函数

如果在cpp文件中使用C静态库,函数声明前要增加上extern “C”

3、动态库程序

1)特点:a.运行时独立存在 b.不会链接到执行程序

c.使用时加载(加载就是让动态库程序运行起来)

2)动态库与静态库的比较

a.当同一静态库被多个程序使用时,会有多份代码,所以代码体积会增大

而动态库程序代码只需一份,其他程序通过函数地址使用,代码体积小

b.静态库发生变化后,新的代码需要重新连接嵌入到执行程序中

而动态库变化但函数的定义未变化,其他使用dll的程序不需重新链接3)动态库的创建

a.建立项目

b.添加库程序

c.库程序导出(导出函数的偏移地址)

4)动态库的函数

创建动态库

导出动态库:

使用_declspec(dllexport)导出函数

使用extern “C” _ _declspec(dllexport) 以C的方式导出

使用模块定义文件.def导出:添加一个def文件,然后编译即可

在vs里需要设置:属性>连接器>输入>模块定义文件选项5)隐式链接(指动态库加载过程不明显,需要用到配套生成的lib文件)导入lib文件

定义函数原型:_ _declspec(dllimport) / extern “C” _ _declspec(dllimport)

使用函数

6)显示链接(指动态库程序加载过程明显,不用使用配套的lib文件)加载动态库:LoadLibrary返回DLL句柄(HINSTANCE)

获取函数地址:GetProcAddress

使用函数

卸载动态库:FreeLibrary

7)两种链接方式的对比:

隐式链接:库发生变化后,实用程序需要重新编译链接

显示链接:库发生变化,不需重新编译链接(库函数的地址是动态获得)8)动态库的变量

定义全局变量

导出全局变量在声明前加上__declspec(dllexport) / DEF文件导出

导入LIB文件#progma comment

定义导入变量extern _ _declspec(dllimport)

使用变量

9)动态库中的类

创建动态库并定义类

导出类:在类的名称前加上_ _declspec(dllexport)

使用时导入LIB文件

类的定义:使用_ _declspec(import)

10)动态库的入口函数:DLLMain

当动态库加载和释放的时候被调用,主要用于初始化和善后处理

注:def文件的格式

LIBRARY DLLFunc //库

EXPORTS //库导出表

DLL_Mul @1 //导出的函数

Day 10

1、文件系统FAT FAT32 NTFS

1)硬盘的管理:磁道扇扇区(大小为512字节)

2)文件系统最小管理单位簇:由几个连续的扇区组成

FAT32:1个簇16个扇区32位

NTFS :1个簇8个扇区总大小4K

3)文件存储时,以簇为单位占用硬盘空间,即使文件只有1字节,也要占用1簇的空间

2、windows目录

1)系统和当前目录

获取/设置程序当前工作目录:GetCurrentDirectory / SetCurrentDirectory

获取windows目录:GetWindowsDirectory

获取windows的System目录:GetSystemDirectory

获取临时文件目录:GetTempPath

2)目录的使用

创建目录:CreateDirectory

目录删除:RemoveDirectory(要删除的目录必须为空)

目录的修改:MoveFile

3、windows文件

1)创建或打开windows文件:CreateFile返回文件句柄

2)写数据:WriteFile

3)读数据:ReadFile

4)关闭文件:CloseHandle

5)求文件长度:GetFileSize

6)设置文件指针:SetFilePointer(指向当前读取位置)

7)文件的相关操作

拷贝文件:CopyFile

删除文件:DeleteFile

移动文件:MoveFile

8)文件属性

获取设置文件属性:GetFileAttributes(Ex) / SetFileAttributes

4、文件查找

1)查找文件:FindFirstFile返回查找句柄

2)获取下一个文件:FindNextFile

3)关闭查找:FindClose

5、windows内存地址空间

1)地址空间

程序中寻址的最大范围,对于32位操作系统,地址空间范围为0-4G(2^32) 2)地址空间的划分

用户地址空间0-2G,用于存放用户的程序和数据

空指针区0-64K 系统将这个范围内的指针认为是空指针

用户区

64K禁入区(后64K)

内核地址空间2G-4G 用于存放内核的代码和数据

6、地址映射

1)区域一块连续的内存,大小一般为64K或者64K的倍数

区域的状态:

空闲:空闲的,可以被使用

私有:已经被占用但是还未使用

映像:存放代码

映射:存放数据

2)物理内存:系统可以使用的实际内存,CPU可以直接访问的内存

3)虚拟内存:将硬盘文件虚拟成内存使用(pagefile.sys文件)

4)内存页:系统管理地址的最小单位,大小为4K,都有自己的权限

5)页目表:用于管理内存页的表

一个指针分成三个部分:0-11(偏移量)12-21(页表)22-31(页目)6)从内存获取数据的过程:

a.根据地址在物理内存中查找相应位置,若找到物理内存,取回数据,

未找到执行b

b.根据地址去虚拟内存中查找相应位置,若未找到,那么该地址没有内

存空间,返回错误,若找到执行c

c.将该地址所在内存页置换到物理内存中,同时将原屋里内存数据,存

入虚拟内存中

d.将物理内存中的数据返回给使用者

7)内存的分配

虚拟内存分配:适合大内存分配,一般1M以上的内存

堆内存分配:适合小内存分配,一般是1M以下的内存new/malloc

堆栈内存:系统维护的内存区

7、虚拟内存

1)虚拟内存分配:速度快,大内存效率高,将内存和地址分配分别执行,可以在需要的时候再提交内存

2)虚拟内存的使用:

内存分配:VirtualAlloc

参数flAllocationType 分配方式有两种:

MEM_COMMIT 提交内存,分配后返回地址和内存空间

MEM_RESERVE 保留地址,分配后返回地址,内存空间不生成

若要使用,需调用VirtualAlloc,第一个参数填写需提交的地址使用内存

释放内存:VirtualFree

参数dwFreeType 释放方式有两种:

MEM_DECOMMIT 只释放内存

MEM_RELEASE 地址和内存都释放

8、堆内存

1)堆内存的分配

适合分配小内存,每个程序都有默认大小1M的堆,。一个程序可有多个

堆,通过堆内存管理器管理堆中内存,内存分配速度比虚拟内存分配慢

2)堆的使用

堆的消息:GetProcessHeap获取程序的第一个堆的句柄

GetProcessHeaps获取程序中所有的堆的句柄

创建堆:HeapCreate

从堆中分配内存:HeapAlloc

使用内存

释放内存:HeapFree

销毁堆:HeapDestroy

new / malloc调用关系:new / malloc -> HeapAlloc ->VirtualAlloc 9、栈内存

每个程序都有默认大小1M的栈内存,系统维护栈。

10、内存映射文件

将文件映射成内存来使用,当使用内存时,就是在使用文件

内存映射文件的使用:

创建或打开文件:CreateFile

创建内存映射文件:CreateFileMapping

映射成内存地址:MapViewOfFile

使用内存

卸载内存映射文件:UnmapViewOfFile将地址和内存映射文件分开

关闭内存映射文件:CloseHandle 一旦关闭映射文件就没有了

关闭文件:CloseHandle

注:wprintf输出中文时需要设置代码页

setlocale(LC_ALL,”chs”)

最新-单片机原理及应用期末考试必考知识点重点总结 精品

单片机概述 单片机是微单片微型计算机的简称,微型计算机的一种。 它把中央处理器(CPU),随机存储器(RAM),只读存储器(ROM),定时器\计数器以及I\O 接口,串并通信等接口电路的功能集成与一块电路芯片的微型计算机。 字长:在计算机中有一组二进制编码表示一个信息,这组编码称为计算机的字,组成字的位数称为“字长”,字长标志着精度,MCS-51是8位的微型计算机。 89c51 是8位(字长)单片机(51系列为8位) 单片机硬件系统仍然依照体系结构:包括CPU(进行运算、控制)、RAM(数据存储器)、ROM(程序存储器)、输入设备和输出设备、内部总线等。 由于一块尺寸有限的电路芯片实现多种功能,所以制作上要求单片机的高性能,结构简单,工作可靠稳定。 单片机软件系统包括监控程序,中断、控制、初始化等用户程序。 一般编程语言有汇编语言和C语言,都是通过编译以后得到机器语言(二进制代码)。 1.1单片机的半导体工艺 一种是HMOS工艺,高密度短沟道MOS工艺具有高速度、高密度的特点; 另一种是CHMOS工艺,互补金属氧化物的HMOS工艺,它兼有HMOS工艺的特点还具有CMOS的低功耗的特点。例如:8181的功耗是630mW,80C51的功耗只有110mW左右。1.2开发步5骤: 1.设计单片机系统的电路 2.利用软件开发工具(如:Keil c51)编辑程序,通过编译得到.hex的机器语言。 3.利用单片机仿真系统(例如:Protus)对单片机最小系统以及设计的外围电路,进行模拟的硬软件联合调试。 4.借助单片机开发工具软件(如:STC_ISP下载软件)读写设备将仿真中调试好的.hex程序拷到单片机的程序存储器里面。 5.根据设计实物搭建单片机系统。 2.1MCS-51单片机的组成:(有两个定时器) CPU(进行运算、控制)、RAM(数据存储器)、ROM(程序存储器)、I/O口(串口、并口)、内部总线和中断系统等。 工作过程框图如下:

DSP汇编指令学习笔记

Knowledge 问题 谁在DSP的汇编语言中加入了NOP指令? NOP指令加入的条件是什么? About DSP 1.DSP是实时数字信号处理的核心和标志。 2.DSP分为专用和通用两种类型。专用DSP一般采用定点数据结构(一般不支持小数), 数据结构简单,处理速度快;通用DSP灵活性好,但是处理速度有所降低。 3.DSP采用取指、译码、执行三个阶段的流水线(Pipeline)技术,缩短了执行时间,提高了 运行速率。DSP具有8个Functional unit,如果并行处理的话,以600MHz的时钟计算,如果执行的指令是single cycle指令,则可以4800MIPS(指令每秒)。 4.DSP的8个functional Unit,具有独特的功能,对滤波、矩阵运算、FFT(傅里叶变换) 具有 哈弗结构 把指令空间与数据空间隔离的存储方式。 这样实现是为了实现指令的连续读取,而实现pipeline流水线结构。 传统哈弗结构:两个独立的存储空间,还使用独立总线。让取指与执行存储独立,加快执行速度。 改进型哈弗结构:指令与数据的存储空间还是独立的。但是使用公共的总线(地址总线与数据总线)。这样实现的原因是因为出现了CACHE,数据的存储动作大部分被内部的CACHE 总线承接了,所以总线冲突的情况会大大减少。同时让总线的结构与控制变得简单,CACHE 存储的速度也明显快于外设存储器。 冯诺依曼结构:是指令空间与数据空间共享的存放方式。它不能实现pipeline的执行过程。 Pipeline(流水线)技术 是把指令的取指-译码和指令的执行独立开来的技术。虽然每条指令的过程还是要经过取指-译码-执行三个阶段最少3个CPU Cycle。但是多个指令同时并行先后进行,保证总体的指

《汇编语言》(王爽)第8章 数据处理的两个基本问题--笔记

正确表示:mov ax,[bp] (1)错误表示:mov ax,[ds], mov ax,[cx] (2)在内存单元表示的[...]这种形式下,中括号里面只能放bx,si,di,bp 这四个寄存器。 1.bx,si a.bx,di b.bp,si c. bp,di d.正确组合:(1)mov ax,[bx+bp]a.mov ax,[si+di] b.错误表示: (2)在“[...]”里面的寄存器只能是固定的四种组合,其他组合是错误的 2.如果在[...]中包含了bp 这个寄存器,那么默认的段寄存器就是ss 3.8.1 bx 、si 、di 和bp 从机器指令的层面来讲,并不关心数据的数值是多少,而关心在执行指令之前,它将要处理的数据存在在什么位置 1.CPU 内部 (1)内存 (2)端口 (3)处理的指令可以存放的位置有三个: 2.8.2 机器指令处理的数据在什么地方 立即数。直接在指令中给出,执行指令前一刻,和代码一起存储在CPU 的指令缓存器中(1)eg.mov ax,1 寄存器 eg.mov ax,bx (2)段地址(SA )和偏移地址(EA ) eg. mov ax,ds:[3] (3)汇编语言中数据存储的位置有三种声明方式: 1.8.3 汇编语言中数据位置的表达 8.4 寻址方式 在之前的笔记已经整理了——>所有的寻址方式 8.5 指令要处理的数据有多长 mov al,bl (1)mov ax,bx (2)通过寄存器名 1.mov word ptr ds:[0],1(1)inc byte [bx] (2)通过“X ptr [...]”的格式,其中X 为word 或byte 2.pop ax (1)push bx (2)默认或者已经规定(栈操作都是以字为单位) 3.汇编语言中通过三种方式声明所处理的是字还是字节 8.6 寻址方式的综合应用 暂时跳过 div reg(寄存器) (1)div 内存单元 (2)格式: 1.运算规则与涉及到的寄存器 2.例:计算10001/100 3.由于10001>65535,所以被除数需要用DX 和AX 联合存放。即使100<255,除数也必须取16位的,也就是把8.7 div 指令 第8章数据处理的两个基本问题 2019年11月10日17:54

汇编语言程序设计 知识点 V3.0

第一章 1、什么是汇编语言? 2、汇编语言程序设计过程:编辑源程序,编译(汇编),连接,运行调试 3、汇编语言特点?与机器语言一一对应,直接操作硬件,高效率(空间和时间,运行速度快,目标代码短,占用存储空间少) 4、数制转换 第2章8086计算机组织结构 1、计算机硬件系统组成:CPU、存储器、输入输出设备。 2、CPU组成:运算器、控制器、寄存器,运算器和控制器由芯片设计时设计好,不可做任何改动,程序设计员仅能在程序里使用寄存器,寄存器都有相应的名字,如AX,能在程序里直接使用寄存器是汇编语言区别于高级语言的最重要特点,这样就可以直接控制硬件系统。 3、总线结构:数据总线、地址总线、控制总线。数据总线分8位、16位、32位和64位等,多少位机就是以数据总线来划分,比如8位机、32位机。8086机是16位机,但地址总线是20位,地址总线数量决定了内存寻址空间的大小,如8086有20位地址线,那么寻址空间是:220=210*1K=1M,8086最大寻址空间为1MB,即地址范围:00000H~FFFFFH。控制总线主要传送控制信息,如读写操作,读写操作的主体是CPU,读操作是指CPU从内存或外设读取数据,写操作是指CPU把数据写到内存或外设中。 4、存储器:存储器的最小单元是字节(Byte,由8个位组成),字节的多少就是存储器的容量。每一个字节单元都有一个唯一的编号,这个编号就是字节单元的地址,此地址就是物理地址,对于8086而言,编号的形式为:XXXXXH,如85421H。如果要读写存储器,必须知道某一个字节单元的地址。多个字节单元可以组合成更大的单元(数),比如2个字节单元组合成一个字(Word),4个字节单元组合成一个双字(Double Word)等,规定:这个组合后的大单元是以最小字节单元地址为自己的地址。如85421H字节单元内容为12H,85422H 字节单元内容为34H,那么以85421H地址的字单元的内容就是3412H。 地址取最小字节单元的地址为大单元的地址。 内容排序按照“高高低低”原则:高字节放在高地址里,低字节放在低地址里。 详细请参看2.3节(P30页) 5、8086CPU寄存器 (1)通用类:AX(AH,AL)、BX(BH,BL)、CX(CH,CL)、DX(DH,DL) (2)段寄存器类:CS、DS、ES、SS (3)与偏移地址相关类:SI、DI、SP、BP (4)特殊类:IP、FLAGS 所有寄存器都是16位大小,通用类的16位又可看成2个8位的寄存器组成,区分为高8位(High)和低8位(Low),因此取名为AH和AL,其他类似。 CS:存放代码段段地址,DS:存放数据段段地址,SS:存放堆栈段段地址,ES:存放数据附加段段地址,一般作为DS的辅助使用,比如在一段程序里需要用到2个不同数据段的数据时,其中一个数据段段地址存放在DS中,另一个存放在ES中。 SI、DI:一般用于变址寻址方式,如[BX+SI]、[BX+DI], SP:堆栈段中堆栈栈顶的偏移地址,不可修改,由SS:SP逻辑地址始终指向堆栈的栈顶。 详细参看2.3.2,P32页 BP:一般也用于堆栈,可以作为SP的备份,通常也是用SS:BP逻辑地址表示,BP可以随意修改,因此通过SS:BP可以访问堆栈的任何地方。此外,BP还与BX一样,可以作为基地址

汇编语言学习笔记之通用寄存器

汇编语言学习笔记之通用寄存器 从昨天开始,正式拉开了学习汇编语言的序幕,对于汇编语言的一些特点以及数据的表示及类型做了一番了解,由于这些东西每一种语言里都要介绍,而且一时半会也真弄不太明白它们的具体使用,也就粗略的看了一下,留待在今后的学习中结合实例加以体会吧。 而通用寄存器应该说是CPU内部重要的数据存储资源,学习汇编语言必须要掌握清它们的功能。因此汇编语言学习的第一篇学习笔记就从通用寄存器开始了。以下内容摘自汇编教程中。 寄存器是CPU内部重要的数据存储资源,是汇编程序员能直接使用的硬件资源之一。由于寄存器的存取速度比内存快,所以,在用汇编语言编写程序时,要尽可能充分利用寄存器的存储功能。 寄存器一般用来保存程序的中间结果,为随后的指令快速提供操作数,从而避免把中间结果存入内存,再读取内存的操作。在高级语言(如:C/C++语言)中,也有定义变量为寄存器类型的,这就是提高寄存器利用率的一种可行的方法。 另外,由于寄存器的个数和容量都有限,不可能把所有中间结果都存储在寄存器中,所以,要对寄存器进行适当的调度。根据指令的要求,如何安排适当的寄存器,避免操作数过多的传送操作是一项细致而又周密的工作。有关“寄存器的分配策略”在后续课程《编译原理》中会有详细的介绍。 由于16位/32位CPU是微机CPU的两个重要代表,所以,在此只介绍它们内部寄存器的名称及其主要功能。 1、16位寄存器组 16位CPU所含有的寄存器有: 4个数据寄存器(AX、BX、CX和DX), 2个变址和指针寄存器(SI和DI), 2个指针寄存器(SP和BP) 4个段寄存器(ES、CS、SS和DS), 1个指令指针寄存器(IP), 1个标志寄存器(Flags) 2、32位寄存器组 32位CPU除了包含了先前CPU的所有寄存器,并把通用寄存器、指令指针和标志寄存器从16位扩充成32位之外,还增加了2个16位的段寄存器:FS 和GS。 32位CPU所含有的寄存器有: 4个数据寄存器(EAX、EBX、ECX和EDX), 2个变址和指针寄存器(ESI和EDI), 2个指针寄存器(ESP和EBP) 6个段寄存器(ES、CS、SS、DS、FS和GS),

精选读书笔记作文汇编十篇

精选读书笔记作文汇编十篇 读书笔记作文篇1 在这个十一长假,我看了一本日本作家惊鸠十的动物小说《月轮熊》。在这本书中我看到的不仅仅是黑白的书页,还看到了故事中动物们所表现出来的母爱。其中《独脚麻雀妈妈》这个故事最让我感动。 《独脚麻雀妈妈》这个故事一只只有一只脚的麻雀妈妈在很短的时间里造好了一个很漂亮的窝,还下了一个蛋,但是很不幸,这个蛋被蛇吃了。于是,它又造了一个很漂亮的窝,生出了三只小麻雀。这是来了一条黑蛇,麻雀妈妈要保护它的孩子,她勇敢地与黑蛇打斗起来,因为勇敢,麻雀妈妈竟然将毒蛇打败了。 就是这一只只有一只脚却充满了母爱的麻雀妈妈,为了自己的孩子不顾自己生命危险去和黑蛇作战,创造了一个几乎不可能实现的奇迹,这就是母爱的力量! 读了这个故事,我知道了母爱的伟大,也知道了我们一定要珍惜母亲对我们的爱。平时妈妈们时时刻刻用实际行动表达着对我们的爱:在我们生病的时候,妈妈会焦急地陪伴在我们身边;在我们遇到危险的时候,妈妈会在第一时间保护我们…… 让我们一起珍惜这一份宝贵的母爱,让我们用实际行动报答妈妈对我们的关心与爱护! 读书笔记作文篇2 最近,我看了一本关于古时候的书——《史记故事》,其中里面有飞将军李广驻守边塞的故事;还有大禹治水的传说;有廉颇、蔺相如将相和的故事,但使我最受教育的当然是赵括的“纸上谈兵”啦。 赵括是赵国大将军赵奢的儿子,他从小熟读兵书,谈论军事,大家从来都驳不过他,但是他父亲不相信赵括能真正运用兵法,因为他没有亲身上战场的经历。 赵括骄傲自大、刚愎自用。赵括父亲每次都将大王赏赐的宝贝分发给下属,而赵括都将宝贝藏起来,占为己有;赵括父亲有很多的朋友,并且和下属的关系也像朋友,而赵括的下属都很惧怕他。

32位80x86汇编语言ptr指令学习笔记

阅读反汇编后的汇编程序挺麻烦,尤其是在c语言程序的子函数参数中有数组参数,同时当子函数里有循环操作时,反汇编后的代码中频繁出现ptr指令操作。该指令的用法十分灵活,有时候读入(或写入)的是某内存地址,有时候读入(写入)的是某内存地址中存储的值,初学时总感觉很迷惑,分不清什么时候读内存地址,什么时候读内存地址中值,参考相关文献和书籍后作如下总结。 例如一段简单的C语言程序: int mywork(int a[9], int b[9], int c[9]) { int i; for ( i=0; i<9; i++) c[i] =a[i] +b[i]; } 这段代码debug版反汇编后代码很简单,但是里面有许多小细节值得推敲。 int mywork(int a[9], int b[9], int c[9]) ;原c代码 … … ;这里为开始调用函数时当前寄存器数据保存 for ( i = 0 ; i < 9 ; i ++) mov dword ptr [i], 0;这里为i初始化,值为0 jmp mywork+xx1h ;进入循环体内部 mov eax, dword ptr [i]; add eax, 1 mov dword ptr [i], eax mywork+xx1h:cmp dword ptr [i], 9 jge mywork+xx2h ;如果i等于或大于9,跳出循环 c[i] =a[i] +b[i]; mov eax, dowrd ptr [i] ;读入参数i mov ecx, dword ptr [a] ;这里是读入参数数组a的首地址 mov edx, dword ptr [b] ;这里是读入参数数组b的首地址 mov eax, dword ptr [ecx + eax*4] ;读入a add eax, dword ptr [edx +eax*4] ; eax = a[i]+b[i] mov edi, dword ptr [c] ;这里是读入参数数组c的首地址 mov dword ptr [edi+ eax*4], eax ;这里保存计算结果,c[i]= a[i]+b[i] inc eax jmp mywork+xx1h mywork+xx2h: … … ;一些数据恢复操作,主要是出栈等 ret 文中用红色标记处两处涉及ptr指令的地方。 第一处为mov eax, dword ptr [i] 本条mov指令的结果是将变量i的值读入到eax寄存器中,至于从i变量存储地址处读取几个字节,由dword修饰符指定(4个字节)。 第二处为mov ecx, dword ptr [a] 这里表示将参数数组a的首地址读入到ecx寄存器中。 同样两个mov 寄存器, dword ptr [变量]操作,为何第一个寄存器eax读入数值,而第二个ecx寄存器读入的为地址呢?

汇编语言程序设计知识点

汇编语言程序设计知识点 第一章基础知识 (1)正负数的补码表示, 掌握计算机中数和字符的表示; 1、假设机器字长为8位,[+3]补 =00000011B,[-3]补= FD H 。 2、十六进制数0F8H表示的十进制正数为 248 ,表示的十进制负数为 -8。 3、8位二进制数被看成是带符号补码整数时,其最小值是 -128,最大值是 127 。 4、计算机处理问题中会碰到大量的字符、符号,对此必须采用统一的二进制编码。目前,微机中普遍采用的是ASCII 码,称为美国信息交换标准码。 第二章80x86计算机组织 (1)中央处理机CPU的组成和80x86寄存器组,重点:专用寄存器,段寄存器 1、IP寄存器中保存的是?下一条指令的首地址 2、FLAGS标志寄存器中共有几位条件状态位?6位 3、有几位控制状态位?3位 4、标志寄存器分为哪2类?条件码,控制 5、哪个标志位用来控制可屏蔽中断请求是否被CPU响应?IF 6、键盘I/O、显示I/O和打印I/O分别对应16、10和17号中断。 (2)存储单元的地址和内容,存储器地址的分段,实模式下逻辑地址、物理地址的表示。 1、如果SS=6000H,说明堆栈段起始物理地址是60000H。 2、已知字节(00018H)=14H,字节(00017H)=20H,则字(00017H)为1420H 。 3、如果数据段中一个内存单元对应的物理地址为3F756H,(DS)=3F00H,那么使用DS段寄存器指明该单元的段基值时,需要使用哪一个偏移量才能正确访问该单元756H。 4.如果(SI)=0088H,(DS)=5570H,对于物理地址为55788H的内存字单元,其内容为0235H,对于物理地址为5578AH的内存字单元,其内容为0E60H,那么执行指令LDS SI,[SI]以后,(SI)= 0235H ,(DS)= 0E60H . 第三章80x86的指令系统和寻址方式 (1)与数据有关的寻址方式(立即寻址方式,寄存器寻址方式,直接寻址方式,寄存器间接寻址方式,寄存器相对寻址方式,基址变址寻址方式,相对基址变址寻址方式)和与转移地址有关的寻址方式(段内直接寻址,段内间接寻址,段间直接寻址,段间间接寻址).数据传送指令(通用数据传送指令、累加器专用传送指令、输入输出指令)、算术指令(加法指令、减法指令(*加减指令对4个标志位的影响[of,cf,sf,zf])、乘法指令(*乘法指令的要求:目的操作数必须是累加器)、除法指令(*被除数在累加器中,除法指令执行完以后,商和余数在?))、逻辑指令(逻辑运算指令(*XOR,AND,OR,TEST指令及指令执行后对标志位的影响)、移位指令)、串处理指令(与REP相配合工作的MOVS、STOS、LODS指令,与REPE/REPZ和REPNE/REPNZ

arm汇编指令笔记.

ARM assembler guide DUI0068 是一个RISC指令结构,因为有一个加载存储结构。只有load和store可以读取内存。 ARM的处理器模式 可以全部大写或小写,不能混 标志符表示一个地址

常量的定义格式: 123 0x1C 2_1001 ARM编译、链接后最终生成一个ELF格式(Executable and Linking Format)的可执行文件(后缀.axf) ELF中是分section部分的,一个ELF section 在汇编中定义一个section使用AREA指令。

ENTRY指令指示汇编代码第一条要执行的指令。 start是一个标识符,代表一个地址。 结束的方式是产生一个软件中断,把控制权交给调试器。 END指令指示汇编的结束 使用cmd进行调试: Microsoft Windows XP [版本5.1.2600] (C) 版权所有1985-2001 Microsoft Corp. C:\Documents and Settings\Administrator>cd D:\Program Files\ARM\ADSv1_2\Bin C:\Documents and Settings\Administrator>D; 'D' 不是内部或外部命令,也不是可运行的程序 或批处理文件。 C:\Documents and Settings\Administrator>D: D:\Program Files\ARM\ADSv1_2\Bin>armsd E:\dsparm\pxa270\project\armex\__image.ax f ARM Source-level Debugger, ADS1.2 [Build 805] Software supplied by: Team-EFA

汇编语言符号汇总

汇编语言符号和教材符号汇总 (8088/8086 IBM PC计算机) --学习笔记" "∶教材符号 +、-、*、/∶算术运算符。 &∶宏处理操作符。宏扩展时不识别符号和字符串中的形式参数,如果在形式参数前面加上一个& 记号,宏汇编程序就能够用实在参数代替这个形式参数了。 $∶地址计数器的值——记录正在被汇编程序翻译的语句地址。每个段均分配一个计数器,段内定义的所有标号和变量的偏移地址就是当前汇编地址计数器的值。 ?∶操作数。在数据定义语句中,操作数用?,其作用是分配并保留存储空间,但不存入确定的数据。 =∶等号伪指令——符号定义。对符号进行定义和赋值,功能与EQU相似,但允许(重复)再定义。 :∶修改属性运算符(操作符)——段操作符。用来临时给变量、标号或地址表达式指定一个段属性(不用缺省的段寄存器),自动生成一个“跨段前缀字节”。注意,段寄存器CS和ES不能被跨越,堆栈操作时也不能跨越SS。 ;∶注释符号。 %∶特殊宏操作符,用来将其后的表达式(通常是符号常数,不能是变量名和寄存器名)转换成它所代表的数值,并将此数值的ASCII码嵌入到宏扩展中。 ( )∶1.运算符——用来改变运算符的优先级别。2.教材符号,表示括号内存储单元(或寄存器)的内容。 < >∶宏调用时用来将带间隔符(如空格,逗号等)的字符串(作为实参)括起来。 ∶运算符。方括号括起来的数是数组变量的下标或地址表达式。带方括号的地址表[ ] 1. ② 达式必须遵循下列原则,①只有BX、BP、SI、DI这四个寄存器可在方括号内出现;BX 或BP可单独出现在各方括号中,也可以与常数、SI或DI一起出现在方括号内,但不 ③和DI可以单独出现在各方括号内,也可允许BX和BP出现在同一个方括号内;SI 以与常数、BP或BX一起出现在方括号内,但不允许SI和DI出现在同一个方括号内; ④一个方括号内包含多个寄存器时,它们只能作加法运算;⑤若方括号内包含基址指针BP,则隐含使用堆栈段寄存器SS提供段基址,否则均隐含使用数据段寄存器DS提供段基址。2.教材符号,表示其中的内容可省略。

《汇编语言》学习笔记(清华大学 王爽)

清华大学《汇编语言》(王爽)读书笔记 第一章基础知识 ◎汇编语言由3类指令组成 汇编指令:机器码的助记符,有对应机器码。 伪指令:没有对应机器码,由编译器执行,计算机并不执行 其他符号:如+-*/,由编译器识别,没有对应机器码 ◎一个CPU有n根地址线,则可以所这个CPU的地址线宽度为n,这样的CPU最多可以寻找2的n 次方个内存单元。 ◎ 1K=2^10B 1M=2^20B 1G=2^30B ◎8086 CPU地址总线宽度为20,寻址范围为00000~FFFFF 00000~9FFFF 主存储器地址空间(RAM) A0000~BFFFF 显存地址空间 C0000~FFFFF 各类ROM地址空间 第二章寄存器(CPU工作原理) ◎16位结构描述了一个CPU具有下面几个方面的结构特性 运算器一次最多可以处理16位的数据 寄存器的最大宽度为16位 寄存器和运算器之间的通路为16位 ◎8086有20位地址总线,可以传送20位地址,达到1M的寻址能力。采用在内部用两个16位地址合成的方法来形成一个20位的物理地址 ◎物理地址 = 段地址 × 16 + 偏移地址 ◎在编程是可以根据需要,将若干地址连续的内存单元看作一个段,用段地址×16定位段的起始地址(基础地址),用偏移地址定位段中的内存单元。段地址×16必然是16的倍数,所以一个段的起始地址也一定是16的倍数;偏移地址位16位,16位地址的寻址能力为64KB,所以一个段的长度最大为64KB ◎8086有四个段寄存器 CS、DS、SS、ES ◎CS为代码段寄存器,IP为指令指针寄存器。任意时刻,设CS中内容为M、IP中内容为N,8086CPU从内存M×16+N读取一条指令执行 ◎不能用mov修改CS、IP,因为8086CPU没有提供这样功能,可用指令JMP 段地址:偏移地址。JMP 2AE3:3 JMP AX 修改IP 第三章寄存器(内存访问) ◎DS数据段寄存器。不能将数据直接送入段寄存器,所以『MOV DS, 1』不正确 ◎字在存储时要两个连续的内存单元,低位在低地址,高位在高地址 ◎[address]表示一个偏移地址为address的内存单元 ◎SS:SP指向栈顶元素 ◎PUSH AX:(1)SP = SP - 2;(2)AX送入SS:SP ◎POP AX:(1)SS:SP送入AX;(2)SP = SP + 2 ◎PUSH/POP 寄存器 PUSH/POP 段寄存器 PUSH/POP 内存单元 第四章第1个程序 ◎可执行文件包含两部分:程序和数据,相关的描述信息 ◎程序加载后, ds中存放这程序所在内存区的段地址,这个内存区的偏移地址为0,策程序所在的内存区的地址为ds:0;这个内存区的前256个字节中存放的是PSP,dos用来和程序进行通信。从256字节处向后的空间存放的是程序。 第五章 [BX]和loop指令 ◎[BX]表示一个内存单元,它的段地址在ds中,偏移地址在bx中。MOV AX,[BX] MOV AL,[BX]

大学计算机基础 重点笔记

大学计算机基础 重点笔记 工商管理一班 郑沛琪 1. 现代计算机发展历程: ①第一代电子管计算机(1946 EMIAC ,标志着现代计算机的诞生), ②第二代晶体管计算机, ③第三代集成电路计算机, ④第四代(超)大规模集成电路计算机(1981年IBM 推出PC ) 2. 计算机系统:包括硬件和软件两个部分。 硬件:运算器、控制器、存储器、输入设备、输出设备。(或:CPU 、存储器、I/O 设备) 软件 3. 存储器:包括主存(内存)和辅存(外存)两种。 内存:①特点:相对快、小、带电储存(易失性) ②举例:CPU 内存元件、内存条、高速缓存 外存:①特点:相对慢、大、不带电储存 ②举例:硬盘、光盘、MP3(4,5)、U 盘、磁盘等 4. ROM (只读存储器)与RAM (可读写存储器) 5. (1)键盘键区分布 (2)正确的打字方法 (3)一些键的描述: 例如:组合键 Ctrl ,Alt ; 上档键 Shift ; 奇偶键 Num Lock ,Caps Lock, Insert (插入/替换) 6. 显示器 7. 打印机 击打式打印机 例如:点阵式,高速宽行 非击打式打印机 例如:喷墨,激光 8. 总线:各种公共信号线的集合。 AB :地址总线—传递地址功能 DB :控制总线—传送控制信号和时序信号 CB :数据总线—传递数据信息 9. 软件系统 (1)系统软件:OS (操作系统),DVMS (数据库管理系统) (2)应用软件 10. 计算机病毒 (1)计算机病毒的特点(性征):破坏性、传染性、潜伏性、隐蔽性 (2)计算机病毒的分类:根据其对计算机和用户使用的危害/干扰程度分为良性病毒、恶性病毒两种。 11. 计算机的数字和单位 系 统 总 线 C P U AB DB CB RAM ROM I/O 接口 外设

汇编语言学习笔记

汇编语言学习笔记 《汇编语言》--王爽 前言 学习汇编目的:充分获得底层编程体验;深刻理解机器运行程序的机理。 原则:没有通过监测点不要向下学习;没有完成当前实验不要向下学习。 第一章基础知识 有三类指令组成汇编语言:汇编指令;伪指令;其他符号。8bit = 1byte = 一个存储单元有n根地址线,则可以寻址2的n次方个内存单元。 1.1节--1.10节小结 (1)汇编指令是机器指令的助记符,同机器指令一一对应。 (2)每一种cpu都有自己的汇编指令集。 (3)cpu可以直接使用的信息在存储器中存放。 (4)在存储器中指令和数据没有任何区别,都是二进制信息。 (5)存储单元从零开始顺序编号。 (6)一个存储单元可以存储8个bit,即八位二进制数。 (7)每一个cpu芯片都有许多管脚,这些管脚和总线相连。也可以说,这些管脚引出总线。一个cpu可以引出的三种总线的宽度标志了这个cpu不同方面的性能。地址总线的宽度决定了cpu的寻址能力;数据总线的宽度决定了cpu与其他器件进行数据传送时的一次数据传送量;控制总线的宽度决定了cpu对系统中其他器件的控制能力。 监测点:1KB的存储器有1024个存储单元?存储单元的编号从0到1023. 内存地址空间: 最终运行程序的是cpu,我们用汇编编程时,必须要从cpu的角度思考问题。对cpu来讲,系统中的所有存储器中的存储单元都处于一个统一的逻辑存储器中,它的容量受cpu 寻址能力的限制。这个逻辑存储器即是我们所说的内存地址空间。 第二章寄存器(cpu的工作原理) mov ax, 2 add ax, ax add ax, ax add ax, ax (1)cpu中的相关部件提供两个16位的地址,一个称为段地址,另一个称为偏移地址; (2)段地址和偏移地址通过内部总线送人一个称为地址加法器的部件; (3)地址加法器将两个16位地址合成为一个20位的物理地址; (4)地址加法器通过内部总线将20位物理地址送人输入输出控制电路; (5)输入输出控制电路将20位物理地址送上地址总线; (6)20位物理地址被地址总线传送到存储器;

计算机基础知识笔记(个人整理)

计算机基础知识笔记 第一章计算机基础 计算机分类:服务器、工作站、台式机、便携机(笔记本、移动PC)、手持设备(掌上电脑、亚笔记本)[ 其他手持设备有PDA (个人数字助理)、商务通、快译通及第二代半、第三代手机] 。 服务器:安全性、可靠性、联网特性、远程管理、自动监控。 计算机制四特点: 1、有信息处理的特性; 2、有程序控制的特性 3、有灵活选择的特性 4、有正确应用的特性。 计算机发展经历五个阶段:1、大型机阶段2、小型机阶段3、微型机阶段4、客户机/服务器阶段5、互联网阶段 计算机指标: 1、位数。8 位是一个字节。 2、速度。MIPS 是表示单字长定点指令的平均执行速度。MFLOPS 是考察单字长浮点指令的平均执行速度。 3、容量。Byte 用B 表示。1KB =1024B。平均寻道时间是指磁头沿盘片移动到需要读写的磁道所要的平均时间。平均 等待时间是需要读写的扇区旋转到磁头下需要的平均时间。数据传输率是指磁头找到所要读写的扇区后,每秒可 以读出或写入的字节数。 4、带宽。Bps 用b。 5、版本。 6、可靠性。平均无故障时间MTBF 和平均修复时间MTTR 来表示。 计算机应用领域:1、科学计算2、事务处理3、过程控制4、辅助工程5、人工智能6、网络应用 一个完整的计算机系统由软件和硬件两部分组成。计算机硬件组成四个层次:1、芯片2、板卡3、设备4、网络 奔腾芯片的技术特点: 1、超标量技术。通过内置多条流水线来同时执行多个处理,其实质是用空间换取时间。 2、超流水线技术。通过细化流水、提高主频,使得机器在一个周期内完成一个甚至多个操作,其实质是用时间换取 空间。奔腾采用每条整数流水线分为四级流水:指令预取、译码、执行和写回结果。其浮点流水线分为八级流水, 前四级与整数流水线相同。后四级有:两级浮点操作、一级四舍五入及写回浮点运算结果、一级为出错报告。 3、分支预测。动态的预测程序分支的转移情况。 4、双CACHE 哈佛结构:指令与数据分开。 5、固化常用指令。 6、增强的64 位数据总线。内部总线是32 位,外部总线增为64 位。 7、采用PCI 标准的局部总线。 8、错误检测及功能冗余校验技术。 9、内建能源效率技术。 10、支持多重处理。 经典奔腾中,由两条整数指令流水线(U 指令流水线和V 指令流水线)和一条浮点指令流水线组成。U 可执行精简指令与复杂指令、V 执行精简指令。 主板由五个部分组成:CPU、总线、存储器、插槽以及电源。 主板的十种分类: 1、按CPU 芯片分类,如486 主板、奔腾主板、奔腾 4 主板等。 2、按CPU 插座分类,如Socket7主板、Slot1 主板等。 3、按主板的规格分类,如AT 主板、Baby-AT 主板、ATX 主板等。 4、按存储器容量分类,如16M 主板、32M 主板、64M 主板等。 5、按芯片集分类,如TX 主板,LX 主板,BX 主板等。 6、按是否即插即用分类,如PnP 主板、非PnP 主板等。 7、按系统总线的带宽分类,如66MHz 、100Mhz 主板等。

汇编笔记

第一章基础知识 1. 汇编指令是机器指令的助记符,同机器指令一一对应。 2. 每一种CPU都有自己的汇编指令集。 汇编语言发展至今,由以下三类指令组成: 1汇编指令:机器码的助记符,有对应的机器码; 2伪指令:没有对应的机器码,由编译器执行,计算机并不执行; 3其他符号:如:+,--,*,/等,由编译器识别,没有对应的机器码。 3. CPU可以直接使用的信息在存储器中存放。 4. 在存储器中指令和数据没有任何区别,都是二进制信息。 5. 存储单元从零开始顺序编号。 6. 一个存储单元可以存储8个bit(用作单位写为“b”),即8位二进制数 7. 1B=8b 1KB=1024b 1MB=1024KB 1GB=1024MB 1TB=1024GB 8. 每一个CPU芯片都有许多管脚,这些管脚和总线相连,也可以说这些管脚引 出总线。一个CPU可以引出总线的宽度标志了这个CPU的不同方面的性能:V地址总线的宽度决定了CPU的寻址能力; Vv数据总线的宽度决定了CPU与其他器件进行数据传送时的 一次数据传送量; Vvv控制总线的宽度决定了CPU对系统中其他器件的控制能力; 9. 在每一台PC机中,都有一个主板,主板上有核心器件和一些主要器件,这 些器件通过总线相连。这些器件有:CPU,存储器,外围芯片组,扩展插槽等。扩展插槽上一般插有RAM内存条和各类接口卡。 10. CPU对外部设备都不能直接控制,直接控制这些设备进行工作的是插在扩 展插槽上的接口卡。扩展插槽通过总线和CPU相连,所以接口卡液通过总线同CPU相连。即CPU通过总线向接口卡发送命令,接口卡根据CPU的命令控制外设进行工作。 11. 随机存储器RAM,可读可写,但是必须带电存储,关机后存储的内容丢失; 只读存储器ROM,只能读取不能写入,关机后其中的内容不丢失。 存储器从功能和连接上分为: * 随机存储器:用于存放供CPU使用的绝大部分程序和数据,主随机存储

新公司法笔记(精华版)汇编

《公司法》笔记 一、公司具有法人资格 1、依法成立 2、公司必须具备必要的财产,独立享有财产权 3、能够独立承担民事责任 4、有自已的名称和组织机构以及场所 二、公司是社团法人具有社团性 社团法人是以社员为成立基础的法人,公司属于社团法人。公司的社团性主要表现为它通常要求2个或2个以上的股东出资设立。 三、公司的权利能力和行为能力 1、公司权利能力于公司成立之日产生,至公司终止之日消灭。公司签发营业执照日期为公司 成立日期。 2、公司注销登记之日,即为公司法人资格终止之时,也就是公司权利能力丧失之时。 3、权利能力的限制 1)性质的限制 除了专属于自然人基于性别、年龄、生命、身体、亲属关系而产生的权利与义务,公司不能承受外,公司作为拟制的法人,其权利能力不再受性质的限制。公司可以享有名称权、名誉权,公司可以作为其它公司的董事,可以成为资合公司的发起人,可以成为其它公司的有限责任股东,还可以作为受遗赠人,接受被继承人的遗产。 2)经营范围 必须在公司章程中载明其经营范围,经营范围必须依法登记才产生公示效力。 3)转投资的限制 必须以责任有限、互不连带为原则。依照公司章程的规定由董事会或者股东会、股东大会决议的,必须经过董事会或者股东会决议;公司章程对投资总额及单项投资有限额规定的,不得超过规定的限额。 4)借贷的限制 只能向银行代款,企业之间不能拆借。董事、高级管理人员不得违反公司章程规定,未经股东会、股东大会或者董事会同意,将公司资金借贷给他人。 5)担保的限制 董事、高级管理人员不得违反公司章程规定,未经股东会、股东大会或者董事会同意,以公司财产为他人(包括公司的股东、其他自然人、其他法人)提供担保的。 公司为他人提供担保的要求: A.首先,应在公司章程中作出明确规定;其次,应依公司章程的规定由董事会或者股东会、 股东大会作出决议;否则,无效。还必须遵守章程规定的限额,超过部分无效。 B.公司为股东或者实际控制人提供担保的,必须经过股东会或者股东大会决议,否则,无效。 (公司章程不得做出相反规定) 6)公司举债的限制 发行公司债券的公司,其累计债券余额不超过公司净资产额的40% 7)设立中的公司不得享有法人的权利能力,解散后的公司只能在清算范围内享有权利和承担 义务。 四、总公司与分公司 1、分公司不具有法人资格,由总公司承担全部责任。该责任不是连带责任,因为连带意味着双方是平等主体,连带责任的前提是连带责任人之间相互独立。 2、分公司可以自已的名义独立订立合同,也可以自已的名义参加诉讼。 3、企业法人的分支机构在法人授权范围内提供的保证有效,但职能机构不可以作为保证人,以其名义出具的保证合同无效。 五、母公司与子公司 1、母公司的最根本特征不是否持有子公司的股份,而是是否参与子公司的业务经营。子公司分

汇编语言部分知识点整理

8大通用寄存器: EAX累加器常用、放数据 EBX基址寄存器常用、放地址 ECX计数器少用、多用于循环操作、控制循环次数egloop EDX数据寄存器常用!放数据(要输出的字符串地址放在DX、字符的ASCII码放在DL里ESI 源变址寄存器放源操作数(数组或字符串)的地址即指向他 EDI目的变址寄存器放目的操作数(数组/字符串)的地址即指向他 EBP 基址指针寄存器一般不用,指向堆栈区域的数据,主要用于在子程序中访问通过堆栈传递的参数和局部变量 ESP堆栈指针寄存器指向栈顶的数据,在涉及堆栈操作的指令中自加自减,一般不能自主变化。 6大段寄存器: CS 代码段,存放程序中的指令代码 SS 堆栈段,指明程序使用的堆栈区域 DS 数据段,存放当前运行程序所用的数据 ES 附加数据段特别的:专为处理数据串设计的串操作指令必须使用附加数据段作为其目的操作数的存放区域。 FS 附加数据段 GS 附加数据段 另外两个常用寄存器: FLAGS状态寄存器:CF(进位)ZF(零)OF(溢出)PF(奇偶)SF(符号) AF(调整一般不用)(DF IF) IP 16位(EIP 32位)指令指针寄存器,专门用来存放将要执行的指令在主存中的位置。特别的EIP有自动增量功能。一般不能改,不可中断。但可以调整其指令执行顺序实现循环 MASM操作符:对常量、变量、地址等进行操作的关键字。 Eg:+ - * / offset(取得变量的偏移地址) 程序模板: ;example.asm in DOS .model small .486 .stack (可以没有) .data (可以没有) ……;数据定义eg:msg db ‘hello,Sarah!54581415’ .code ;定义代码段 .startup ;程序执行开始,同时设置数据段寄存器DS指向程序的数据段 ……;主程序eg:mov dx,offset msg ……等等 …… …… .exit ;程序执行结束,返回DOS ……;子程序(可以没有) .end ;汇编结束

王力古代汉语笔记整理完整版(汇编)

王力古代汉语整理 《古代汉语》(王力)笔记 一、填空: 1、汉语字典的编排方式主要有三种: A、按音序排列。现在通行按照汉语拼音字母次序排列(汉语拼音方案);古代按照平水韵106韵排列(上、下平声各15韵,上声29韵、去声30韵,入声17韵)。 B、按部首和笔划排列。同一部首的字归在一起,部首的先后以笔划多少为序;同一部首内,字的先后以笔划多少为序。笔划相同时,在按起笔的笔形排列。一般是把起笔分成点(、)、横(一)、直(ㄧ)、撇(ノ)四种或点、横、直、撇、折(┐)五种依次排列。 C、按编码排列。通行的是四角号码检字法。汉字方形有四个角,角的形式共十种,用0至9代表。角的顺序是左上角、右上角、左下角、右下角。每字得四码。 2、《康熙字典》张玉书、陈廷敬等编,在明代梅膺祚《字汇》和张自烈《正字通》基础上编成。按照部首排列,分成214部,在按十二地支分十二集,每集分上中下三卷。释字体例先音后义。先列主要韵书的反切,再释义,每义引古书为证。 3、王引之《字典考证》、王力《康熙字典音读订误》,进行纠正。 4、《中华大字典》陆费逵、欧阳溥存主编,1915年中华书局。部首排列,注音用《集韵》的反切,还加注直音。 5、《辞源》1915商务印书馆,陆尔奎、方毅等人编写,是近代出版最早的以语词为主,兼顾百科常识的大辞书。部首排列法,沿用《康熙字典》214部首。注音反切,全部采用清代李光地《音韵阐微》的改良的反切。基本奠定了汉语现代词典的编纂体例格局。1958年修订为“以语文为主,百科为辅”的工具书,吴泽炎、黄秋耘。刘叶秋负责。采用汉语拼音字母和注音字母注音,采用《广韵》的反切。 6、《辞海》1936中华书局编印,舒新城、沈颐,张相主编。1958年修订为综合性辞书。舒新城、陈望道主持。 7、东汉许慎《说文解字》,中国文字学奠基之作,第一部系统完备的字典,分析小篆字形。宋代徐铉采用孙愐《唐韵》校订过。清代黎永春的《说文通检》。徐灏《说文解字注笺》 8、清代研究《说文解字》的四大家:段玉裁《说文解字注》、桂馥《说文解字义疏》、王筠《说文句读》、朱骏声《说文通训定声》。 9、清代阮元《经籍籑诂》,一部专门收集唐前各种古书注解的字典。韵母排列法,以平水韵一韵一卷。还有清代刘淇《助字辨略》,何乐士《古代汉语虚词通释》。 10、清代王引之《经传释词》(古声母排列)和近人杨树达《词诠》(注音字母),解释虚词。 11、近人张相《诗词曲语辞汇释》,1953中华书局,研究诗词曲中特殊词语的一部专著。 12、古代汉语以单音词为主,现代以复音词主要是双音词为主。单变复主要有三种情况: A、换成完全不同的词。

X86汇编语言

汇编(破解系列基础) (王爽汇编语言笔记第一版2013-8-1) (王爽汇编语言笔记第二版2013-8-11) 笔记目录: 第一章:基础知识(机器语言与汇编语言,及8086cpu的地址数据控制总线。) 第二章:寄存器cpu工作原理(寄存器的初步认识,字和字节概念,最主要的是8086cpu物理地址的表达方法,及汇编开始执行代码段。) 第三章:寄存器的内存访问(cpu是如何访问内存的,并附加一些简单的汇编指令,重要的是栈概念的引入。) 第四章:第一个程序(==,主要记录DEBUG是怎么用的......) 第五章:[bx]和loop指令(循环的引入,及段前缀的概念。) 第六章:包含多个段的程序(包含多个段使程序使数据代码栈更加清晰) 第七章:更灵活的定位内存地址的方法(引进SI DI16寄存器使程序寻址更加方便,模拟高级语言中数组和结构体表达,及and和or指令汇编指令。) 第八章:数据处理的两个基本问题(==) 第九章:跳转指令的原理(jmp jcxz各种跳转地址表达方法,及offset操作符。)第十章:call和ret(最重要,类似高级语言中函数的功能。) 第十一章:标志寄存器(各种”jump”,各种标志位...每次执行后可由标志位判断数据处理情况,破解中尤其重要。)

第一章:基础知识 1:【机器语言】(010000001000000)0和1的组成 2:【汇编语言】:每条汇编指令对应一条机器语言 13BE:0100B80010MOV AX,1000 (B8对应AX,0010高低字节对应1000,第十章中有详细的解释) 3:【CPU对内存的读写】(8086CPU,X86) CPU到内存3条总线:控制总线地址总线数据总线 ①地址总线(内存索引):8086CPU一共16条,每条传送0或1。 ②数据总线(CPU与外部的传送速度) ③控制总线(多少种控制总线是CPU对外界器件有多少种控制,有些命令是几根控制线综合发出的) 4:【RAM(随机储存)和ROM(只读储存)】 RAM和ROM是内存,硬盘是外存。 ①RAM主随机存储器 ②ROM刷BIOS储存引导设置(把病毒刷入BIOS…^^) ③接口卡RAM比如显存 第二章:寄存器CPU工作原理 5:【8086CPU的寄存器】 通用类:AX BX CX DX,16位寄存器。 通用类又可以分为高段(AH)低段(AL),也就是高字节和低字节8位 段地址类:CS(代码段地址)DS(数据段地址)SS(栈段)ES(混合类)

相关主题