- 博客(86)
- 问答 (1)
- 收藏
- 关注
原创 十九、用call和ret指令实现模块化程序设计
1. 利用调用和返回的对应可以实现类似函数的功能: a. 其实高级语言中函数的实现即时基于汇编的call和ret的; b. 这样就可以设计一个个用于解决子问题的子程序,通过调用和返回将各个子程序组合成一个解决大问题的主程序;2. 利用寄存器传参和返回: a. 在传送的数据量不是很少的情况下可以使用,但是如果传送的批量的数据时寄存器
2013-11-15 23:51:16
1333
原创 十八、使用call和ret指令实现子程序的调用和返回
1. 子程序返回: a. 可以用一个标号来标志一段子程序,在C语言里面就是所谓的函数; b. 在子程序的末尾必须使用一个返回指令,将程序返回到调用子程序的位置处,这里先不讨论如何返回程序中的值,先讨论如何使程序回到调用子程序的位置处; c. 使用ret指令实现近返回: i. 即近转移,return的缩写,只修改ip的
2013-11-15 21:19:04
8512
原创 十七、转移指令
1. 通过seg和offset操作符获取标号的段地址和偏移地址: 1) 这两个都是伪指令,都是属于编译器的操作符,不能直接翻译成机器代码,前者是segment的缩写,而后者的意思就是“偏移量”; 2) 这两者可以作用于任何标号,前者用于获取标号所在段的段基,后者用于获取标号所在段的偏移地址,这里的段都是由"XXX segment"定义的段,而这个XXX(也是标号)就是段基了;
2013-11-14 13:44:22
3120
原创 十六、数据处理问题的若干补充
1. 内存访问方式以及bp寄存器的补充: a. 偏移地址的完整描述: i. 可以分三个部分描述; ii. 段中一个完整数据项(比如结构体)的入口处地址,即基址,bx或bp; iii. 数据项中某个字段的入口处地址,即常数; iv. 字段中每个元素的偏移地址,即si、di
2013-11-11 20:17:15
1017
原创 十五、嵌套循环
1. 程序示例:将每行中的单词都变为大写assume cs:code, ds:data, ss:stackdata segment db 'ibm ' db 'dec ' db 'dos ' db 'vax 'data endsstack segment dw 0,
2013-11-10 21:30:55
1120
原创 十四、更为灵活地访问内存
1. [bx + 常数]: a. 显而易见就是以bx和常数相加的值作为总的偏移地址,但是这样一来就可以以ds:[bx]作为基址,而常数作为偏移地址了,给内存的访问带来更多的灵活性; b. Debug中允许的书写形式: i. [bx + 常数] ii. [常数 + bx] iii.
2013-11-08 20:02:29
620
原创 十三、按位与或以及大小写转换
1. 按位与或指令: a. and指令表示按位与,or指令表示按位或; b. 两条指令的参数完全相同,都是将第一个参数和第二个参数进行按位运算,并将结果保存在第一个参数中; c. 参数示意: 第一个参数 第二个参数 寄存器 常数 内存
2013-11-08 19:30:35
1343
原创 二十、使用MFC ODBC开发数据库应用程序
1. 例子简介: a. 这里以一个简单的例子来介绍ODBC数据库应用程序的开发; b. 使用的DBMS是Access 2003; c. 在Visual C++ 6.0中编写数据库应用程序; d. 操作系统是64位Win7;2. 利用Access 2003创建一个简单的数据库: a. 打开Access
2013-11-01 16:32:02
1463
原创 十五、动态链接库介绍以及静态库的编写
1. 静态库和动态库的区别: a. 函数库:将一些公用函数制作成函数库供其它程序调用; b. 静态库:编译的时候将整个静态库都加入工程的链接(即将静态库中的函数复制到主程序中),生成的.exe文件包含库中函数的全部定义; c. 动态库:链接时不将库包含进工程,形成的.exe当然也不包含库中函数的定义,链接时只在工程中保留库的入口(即库在硬盘中的位
2013-10-31 20:34:18
738
原创 十四、Win32 API文件操作
1. Win32 API就是系统调用,偏向底层,像C\C++中的很多函数,比如malloc还有很多文件操作函数都是用Win32 API实现的;2. 创建文件映射: a. 同样也是将硬盘中的文件映射到内存,但是没有FILE *指针指向这片内存了,而是只能用一个void *指针来代替,由此可以看到Win32 API对类型的敏感级别非常低,更加偏向底层,偏向硬件;
2013-10-31 13:03:29
1345
原创 十二、C语言文件操作简介
1. 创建文件指针并和文件关联: a. C语言中将文件映射到内存中的方法就是先为该文件在内存中开辟一段空间作为映射,然后再利用指向该空间的指针对文件进行操作; b. fopen函数可以为文件映射到内存中,并返回该内存映射区域的文件指针; c. 因此C语言打开文件的步骤就是: FILE *file = fopen...或者是
2013-10-30 22:04:25
943
原创 十一、MFC文件操作简介
1. MFC的文件操作: a. MFC专门提供CFile类进行文件操作; b. 注意,CFile是MFC中特有的类,和C语言的文件操作和C++的文件操作没有关系,完全是MFC中特有的类; c. CFile是MFC中所有文件类的基类,提供非缓冲方式的二进制输入输出功能,因此其效率非常高; d. 打开文件的方法:
2013-10-30 20:21:14
1167
原创 十、非模态对话框编程
1. 以进度条对话框为例: a. 在对话框中加一个进度条,以及一个开始按钮; b. 点击开始按钮后当进度达到百分之百时进度条满并推出对话框; 2. 在图形界面下设计进度条对话框: a. 首先要设计一个可以喝用户交互的静态文本: i. 其作用就是当进度条在走时能实时显示进度已显示了百分之几;
2013-10-29 20:32:43
983
原创 九、模态以及模态对话框编程简介
1. 模态对话框和非模态对话框: a. 模态对话框: i. 强制要求用户立刻相应对话框,只有完成该对话框操作后才能对其它对话框进行操作; ii. Word的“打开”对话框就是一个典型的模态对话框,只有确定打开的文件后才可以对该文件进行其它操作(即对其它对话框进行操作); b. 非模态对话框:
2013-10-28 22:43:57
891
原创 八、为对话框添加类、对象(变量)以及消息响应函数
1. 为对话框添加类: a. 四种方法: *1. 在对话框空白处右键→建立类向导; *2. 在对话框空白处双击(推荐使用!方便快捷); *3. 菜单栏→查看(View)→建立类向导; *4. 快捷键Ctrl + W; b. 如果该对话框还没建立过类,则会弹出
2013-10-28 19:42:40
3217
原创 七、对话框的创建、设置以及布局
1. 对话框的控件: a. 对话框主要用于和用户交互,其上有很多按钮以及文本输入框,用于执行一些操作系统命令并接受用户发来的消息; b. 对话框是一种用户自定义的类,而里面的内容(即控件,比如静态文本、编辑框、列表等)都属于它的成员对象(即成员变量); c. 在MFC中需要先定义用户自己设计的对话框类,并在其中定义各种控件(即该类的各种成员对象)
2013-10-28 16:22:35
2338
原创 六、创建的新的工具条
1. 创建新的工具条并重命名: a. 首先还是创建一个单文档的MFC工程,工程名还是Test; b. 创建新工具条的两种方法: *1. 菜单栏中的插入选项中选择资源,然后在资源对话框汇中选择Toolbar,然后新建; *2. 在资源视图中右键Toolbar,选择插入Toolbar,如果选择插入则会打开和*1.中
2013-10-27 16:33:48
813
原创 五、菜单栏和工具栏(主工具栏上创建按钮)
1. 菜单和工具在操作系统中的含义: a. 菜单就是一种展示操作系统命令的目录; b. 也就是菜单中选项中的子目录中的内容其实都是操作系统的命令,比如菜单栏中文件选项中的打开选项,就对应着操作系统的“打开文件命令”; c. 比如Windows系统中的开始菜单还有右键菜单所展示的都是操作系统的命令; d. 应用程序的菜单编程就是指为
2013-10-26 15:28:00
2382
原创 四、视图类简介
1. 文档/视图模式简介: a. 该模式的宗旨就是将数据操作和数据呈现在物理和逻辑上实现分离; b. 文档只负责数据的存储和操作,而视图则负责将文档中的数据以图形化的形式显示给用户看,比如对话框、列表、各种框等等,显示的形式可以是多种多样的; c. 文档/视图的对应关系: i. 文档是视图的材料和基础;
2013-10-26 13:22:58
1017
原创 三、MFC框架结构简介
1. 利用应用程序向导创建MFC框架程序: a. AppWizard是一个生成基础源代码的向导工具; b. 可以利用AppWizard生成一个具有MFC基本框架的源代码; c. 之后先以创建一个单文档且工程名为Test的MFC应用程序为例;2. MFC四大基础类简介: a. 利用MFC AppWizard创建Tes
2013-10-25 23:09:26
3596
原创 二、调试及帮助工具简介
1. 编译、组建和运行: a. Ctrl + F7:只编译当前文件; b. F7:组建,即将工程中所有文件编译,并且链接形成可执行文件; c. Ctrl + F5:运行链接形成的.exe文件;2. 调试快捷键: a. F9:在光标所在行添加和删除断点; b. F5:开始调试; c.
2013-10-25 16:23:11
850
原创 一、工具简介、基本界面和编程模式(包括命名法则)
1. VS2008工具栏的调整: a. 在菜单栏(就是有文件、编辑等选项的一行)或者工具栏(菜单栏下面一行)的空白位置右键即可自由添加(也可以选择自定义); b. VC++6.0调整工具栏的方式和VS2008相同,这不过添加之后都是以浮动窗口的形式显示,关闭后还是可以用相同的方式进行添加; 2. VS2008集成环境中视图窗口的调整:
2013-10-25 14:06:35
845
原创 十二、分段程序
1. 使用db、dw、dd以及dup伪指令定义一段连续的数据空间: 1) 对于前三个伪指令,前缀d表示define,而后面的三个字母分别表示byte、word、double word的意思,分别用于定义字节空间、字空间、双字空间; 2) 示例:assume cs:codesgcodesg segment db 0, 1, 2, 3 dw 0, 1, 2, 3 dd
2013-10-22 21:20:09
1035
原创 十一、在代码段中定义数据、程序入口、使用栈
1. 使用dw伪指令定义字型数据: a. 即define word的缩写,可以用来定义字型数据的伪指令; b. 可以在此伪指令后面连续定义任意多个字型数据,后面的字型数据列表一般都使用十六进制表示; c. 例如:dw 0123h, 0defch等 d. 定义的数据将会被认为是该段的一部分被加载进内存; e
2013-10-22 19:25:32
1460
原创 十、实模式和保护模式简介
1. 纯DOS的实模式: a. 背景是DOS特别简单,没有能力对硬件系统进行全面、严格地管理,因此对用户的一些非法操作将不会检查到,从而这些非法操作可能会导致系统崩溃; b. 因此在DOS系统中用户可以毫无顾虑地对硬件进行操作,而不受到操作系统的限制; c. 这就是实模式; d. 如果在实模式下用户非法修改了DOS系统在内存中的空
2013-10-22 14:45:09
1225
原创 九、访问内存的要素以及INC和LOOP指令和Debug使用方法的扩
1. 访问内存的要素: a. 总共只有两大要素:一是内存单元的地址,而是内存单元的类型; b. 内存单元的首地址由DS:[X]确定,而内存单元的类型(字节型还是字型)由寄存器的类型给出,比如访问内存的寄存器的类型是16位的,则访问的内存单元的类型就是字型的; c. 这里补充如下访问内存的方法:MOV [寄存器], 寄存器,当然这两个参数交换位置同
2013-10-21 20:57:32
2778
原创 八、汇编源程序的基本构成以及编译、调试
1. 以第一个汇编源程序为例说明:assume cs:codesgcodesg segment mov ax, 0123H mov bx, 0456H add ax, bx add ax, ax mov ax, 4C00H int 21Hcodesg endsend 1) 汇编指令和伪指令的区别:首先这里要讲两个概念,即汇编语言包含什么,其总共包含
2013-10-21 15:52:25
1246
原创 七、栈段
1. CPU的栈操作的支持: 1) 现代CPU都提供栈的功能,即提供栈的访问功能,指令有push和pop等; 2) 8086CPU对栈的操作(push、pop等)都是以字为单位的,即16位,因此不得在栈操作中使用非16位的寄存器,如AL等,否则将会报错;2. 用SS:SP定义一个内存栈: 1) 和前面利用DS寄存器定义一个数据段一样,栈同样也是存在于用户
2013-10-21 13:41:13
1158
原创 六、数据段
1. CPU的字单元和内存的字节单元: a. CPU可以是16位、32位的,因此其存储单元可以是字、双字等; b. 但是内存是严格的字节单元,即一个内存单元存放一个字节数据; c. 内存字单元的概念: i. 即使内存是字节单元的,但是仍然可以认为定义内存的字单元; ii. 当将CPU中的一
2013-10-21 12:10:51
1235
原创 八、视图
1. 视图的定义: a. 视图是一种导出表,可以有基本表到导出也可以由视图本身导出,当然也可以由这两种共同导出; b. 视图是一种虚表,没有任何数据,只有视图的定义(定义就是如何从其他表中导出),其真正的数据还是存放在基本表中; c. 因此如果基本表改变了,那么在查询视图时里面的数据也将会发生改变; d. 视图就像一种查询命令(和
2013-10-16 14:46:45
2759
原创 七、数据更新
1. 插入单元组的一般规则: a. 由于是对表进行改变应该是用USE语句和ALTER TABLE语句; b. 一般规则:INSERT INTO 表名(属性列表) VALUES(与属性列表相对应的字段值) c. 使用规则: i. 属性列表中的属性可以缺省; ii. 属性的顺序可以和创建表时属
2013-10-15 19:46:49
586
原创 六、多表查询
1. 多表查询和连接技术: a. 多表查询就是查询涉及到多张表,比如在一张表上的查询结果依赖另一张表上的某种条件表达式等; b. 通常使用连接谓词将两个表中符合条件的两个元组连接在一块儿形成一个新的元组; c. 连接谓词: i. 是指在WHERE条件表达式中用来连接两个表中的元组的条件; i
2013-10-15 14:32:30
1010
原创 五、单表查询
1. 数据查询的一般格式: SELECT ALL|DISTINCT|省略 目标列表达式列表 FROM 表名 WHERE 条件表达式 GROUP BY 列名 HAVING 条件表达式 ORDER BY
2013-10-14 22:18:05
1245
原创 四、表层面上的操作
1. 由于对表的操作都是对象层面的操作,因此在对表进行操作是一定要用USE语句指定表所属的数据库: a. 规则:USE XXX b. 表示打开名为XXX的数据库; c. 接下来再使用CREATE TABLE、ALTER TABLE等语句;2. 表的创建: a. 一般性规则: CREA
2013-10-14 20:20:26
727
空空如也
xcode中如何像VC那样设置prelink step
2014-12-16
TA创建的收藏夹 TA关注的收藏夹
TA关注的人