随笔分类 - 学习笔记
学习笔记及分享
摘要:#pragma once 防止重复编译,头文件很可能会被多个cpp文件包含,这样一方面节省时间,另一方面防止类或者变量重复定义(全局变量可使用extern),c语言里面采用: ①DECLARE_DYNAMIC和IMPLEMENT_DYNAMIC是为了确定运行时对象属于哪一个类而定义的宏。 同时还有一
阅读全文
摘要:之前把调试项目的时候软件界面变成了很古板的那种界面,后来查了一会发现因为字符集的改变,个人习惯统一我一般用同一种字符集,虽然Unicode只涉及语言问题,不过总感觉它占内存,用非字符集,搜索发现将代码中的#ifdef __UNICODE去掉就可以,注意后面的#endif。 不过在搜的过程中碰到了ma
阅读全文
摘要:MVC开始是存在于桌面程序中的,M是指业务模型,V是指用户界面,C 则是控制器,使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。比如一批统计数据可以分别用柱状图、饼图来表示。C存在的目的则是确保M和V的同步,一旦M改变,V应该同步更新。 MVC原理: 优点: 耦合性
阅读全文
摘要:前言小甲鱼老师说前言是用来吹的,好奇怪啊。当想做一件事情的时候就立马去做,而且要尽快,还要尽快完成,拖久了心劲就少了,中断了就很难再继续往下了。行动是吹牛的老妈,为了证实想法和看法是正确的,进行了一番实践。从上上周六到现在,整整十天,十天的浴血奋战,汇编教程终于看完了,除了吃饭,睡觉,上课,上自习,其余时间就是看汇编了,从早上六点起开始,到晚上11点,直到现在脑子了除了汇编就是小甲鱼(汇编教程里面幽默诙谐的小甲鱼老师)了。。。。。于是就决定写这本书纪念一下下。没有目录的目录1、2、3、4、5、6、附录详情内容:时光飞逝,转眼间,大学两年就要过去了(好久不用了,感觉好亲切的词汇)。突然发现之前好
阅读全文
摘要:1、int 9中断例程对键盘输入的处理:键盘缓冲区中有16个字单元,可以存储15个按键的扫描码和对应的ASCII码。int 16中断例程读取键盘缓冲区:读取键盘输入的功能编号为0。他们相互配合,实现对键盘的输入和读取。2、字符串的输入:字符的输入和输出是按照栈的访问规则进行的,即后进先出。这样我们就可以用栈的方式来管理字符串的存储空间,也就是说,字符串的存储空间实际上是一个字符栈,字符栈中的所有字符,从栈底到栈顶,组成一个字符串。View Code 1 ;最基本的字符串输入程序,需要具备下面的功能: 2 ;(1) 在输入的同时需要显示这个字符串; 3 ;(2)一般在输入回车符后,字符串...
阅读全文
摘要:1、描述了单元长度的标号:后面没有冒号的标号可以同时描述内存地址和单位长度。因为这种标号包含了对单元长度的描述,所以,在指令中,它可以代表一个段中的内存单元。称为数据标号。2、一般来说,我们不会在代码段中定义数据,而是将数据定义到其他段中。注意:1.在后面加有“:”的地址标号,只能在代码段中使用,不能在其他段中使用。2.如果想在代码段中,直接用数据标号访问数据,则需要用伪指令assume将标号所在的段和一个段寄存器联系起来。3、在其他段中使用数据标号:4、seg操作法,功能为取得某一标号的段地址。5、“查表”方法:目的:1.为了算法的清晰和简洁;2.为了加快运算速度;3.为了使程序易于扩充。例
阅读全文
摘要:1、在PC系统的接口卡和主板上,装有各种借口芯片。这些外设接口芯片的内部有若干寄存器,CPU将这些寄存器当做端口来访问。外设的输入不直接送入内存和CPU,而是送入相关的接口芯片的端口中;CPU向外设的输出也不是直接送入外设,而是先送入段口中,再由相关的芯片送到外设。也就是说CPU通过端口和外部设备进行联系。2、可屏蔽中断的引发的中断信息来自于CPU外部,中断类型码是通过数据总线送入CPU的。IF设置为1,才能执行可屏蔽中断。IF设置指令:sti,设置IF=1,cli设置IF=0。3、PC机键盘的处理过程(开机的时候是不能没有键盘,键盘比操作系统还要早加载):扫描码:断码=通码+80h。BIOS
阅读全文
摘要:1、CPU可以直接读写3个地方的数据:CPU内部的寄存器、内存单元、端口。2、端口的读写指令只有两条:in和out,读取和写入。(1)访问端口3、网页访问的是80端口,ftp访问的是21号端口。4、CMOS RAM芯片:①包含一个实时钟和一个有128个存储单元的RAM存储器。②该芯片靠电池供电。因此关机后其内部的实时钟仍可正常工作,RAM中的信息部丢失;③128个字节的RAM中,内部实时钟占用0——0dh单元来保存时间信息,其余大部分单元用于保存系统配置信息,供系统启动时BIOS程序读取。④该芯片内部有两个端口,地址为70h和71h,70h为地址端口,存放要访问的CMOS RAM单元的地址,7
阅读全文
摘要:1、int指令:CPU执行int n,相当于引发一个n号中断的中断过程。因此,一般情况下,系统将一些具有一定功能的子程序,以中断处理程序的方式提供给应用程序调用。2、int和iret指令配合跟call和ret指令相似。3、注意寄存器值的保存和恢复。4、对int、iret和栈的深入理解:用7ch中断完成loop指令。5、 BIOS和DOS中断例程的安装判断下面说法的正误:1.我们可以编程改变FFFF:0处的指令,使得CPU不去执行BIOS中的硬件系统检测和初始化程序。答:这种说法是错误的。因为该内存单元具有‘只读’属性。2.int 19h中断例程,可以由DOS提供。答:这种说法是错误的。因为in
阅读全文
摘要:1、中断是CPU处理外部突发事件的一个重要技术。引起中断的原因或者说发出中断请求的来源叫做中断源。根据中断源的不同,可以把中断分为硬件中断和软件中断两大类,而硬件中断又可以分为外部中断和内部中断。外部中断是指由计算机外设发出的中断请求,如:键盘中断、打印机中断、定时器中断等。外部中断是可以屏蔽的中断,也就是说利用中断控制器可以屏蔽这些外部设备中断请求。内部中断是指因硬件出错(如突然掉电、奇偶校验错等)或运算出错(除数为零、运算溢出、单步中断等)所引起的中断。内部中断是不可屏蔽的中断。软件中断其实并不是真正的中断,他们只是可被调用执行的一般程序以及DOS的系统调用功能(int 21h)等都是软件
阅读全文
摘要:1、8086CPU的标志寄存器(flag)有16位,其中存储的信息通常被称为程序状态字(PSW,program state word)。标志寄存器是按位起作用的,也就是说,它的每一位都有专门的含义,记录特定的信息(用0或者1表示有还是没有)2、flag中的1、3、5、12、13、14、15在8086中没有使用,不具有任何意义。第六位是ZF,零标志位,它记录相关指令执行后,结果为0,ZF=1,结果不为0,ZF=0。第二位PF,奇偶标志位,记录结果的所有二进制位中1的个数,偶数,PF=1。第七位SF,符号标志位,结果为负,SF=1。第零位CF,进位标志位,一般来说,在进行无符号数运算的时候,它记录
阅读全文
摘要:1、call和ret指令都是转移指令,他们都修改ip或同时修改cs和ip。2、ret指令用栈中的数据,修改ip的内容,从而实现近转移。操作:1.(ip)=((ss*16)+(sp));2.(sp)=(sp)+2。retf指令用栈中的内容同时修改cs和ip3、call指令经常跟ret指令配合使用,因此CPU执行call指令,进行两步操作:1.将当前的ip或cs和ip压入栈中;2.转移(jmp)。Call指令不能实现短转移,跟jmp操作相似。操作:1.push IP;2.jum near ptr 标号。范围-32768~32767,补码表示。(转移位移)4、转移的目的地址在指令中的call指令:段
阅读全文
摘要:1、8086CPU转移指令分类:1.无条件转移指令(如jmp);2.条件转移指令;3.循环指令(如:loop);4.过程;5.中断。2、offse,伪指令,功能是取得标号的偏移地址。3、nop的机器码占一个字节,不产生任何结构,仅消耗几个时钟周期,接着执行后续指令,常用于程序的延时等。4、jmp指令要给出两种信息:1.转移的目的地址;2.转移的距离(段间转移、段内短转移、段内近转移)。5、依据位移进行的jmp指令:①jmp short 标号(转到标号处执行指令),这种格式的jmp指令实现的是段内短转移,它对ip的修改范围为-128~127;②jup near ptr 标号,near ptr指明
阅读全文
摘要:实验九头疼了一天,终于搞定了,其实也不是算法问题,算法倒是挺简单的,主要是显示问题,好纠结。。。。View Code 1 ;测试:向内存从b810:0000开始的单元写入数据如:-e B810:0000 01 01 02 02 03 03 04 04 2 assume cs:code,ds:data,ss:stack 3 4 data segment 5 db 'welcome to masm!' 6 data ends 7 8 stack segment 9 dw 0,0,010 stack ends11 code segment12 13 start: mov...
阅读全文
摘要:1、计算机是进行数据处理、运算的机器,那么有两个最基本的问题:1.处理的数据在什么地方?2.要处理的数据有多长?2、定义描述性符号:reg(register 寄存器)和sreg(segment register 段寄存器)。Reg的集合包括:ax、bx、cx、dx、ah、al、bh、bl、ch、cl、dh、dl、sp、bp、si、di。sreg集合包括:ds、ss、cs、es(扩展段)。3、1.在8086CPU只有这4个寄存器(bx、bp、si、di)可以用[ ]来进行内存单元寻址;2.在[ ]中,这四个寄存器(bx、bp、si、di)可以单个出现,或只能以四种组合出现:bx和si、bx和di
阅读全文
摘要:1、and指令:逻辑与指令,按位进行运算,通过and指令可将操作对象的相应位设为0,其他位不变,例:and al 10111111B。or指令:逻辑或指令,按位进行运算,通过or指令可将操作对象的相应位设为1,其他位不变,例:or al 01000000B。2、用字母表示数据,例:‘a’。3、小写转大写and al 11011111b。大写转小写or al 00100000b。4、[bx+idata]形式实现数组:idata[bx]。5、SI和DI寄存器:16位寄存器,但是不能够分为两个8位寄存器来使用。6、16位寄存器进行内存单元之间的数据传送,一次复制两个字节。[bx][si]。7、[bx
阅读全文
摘要:1、在代码段中使用数据:“dw”定义字型数据,即define word。定义字节型数据db,define byte。dw定义数据处于代码段的最开始,所以偏移地址为0。2、CPU根据机器指令的不同组合会构成不同的代码。3、在代码段中使用栈:定义8个字型数据也可以说开辟了8个字型空间。4、将数据、代码、栈放入不同的段:实验五:5、mov ax,aMov cs,axMov ax,bMov ds axMov ax,cMov ss,axMov bx,0Mov cx,8S:add ss:[bx],ds[bx]Add ss:[bx],cs[bx]Add bx,2Loop s6、mov ax,aMov ds,
阅读全文
摘要:1、用debug写命令和编译器写命令是不一样的。2、完整的描述一个内存单元需要两种信息:1.内存单元的地址;2.内存单元的长度(类型)。我们用[0]表示一个内存单元时,0表示单元的偏移地址,段地址默认在ds中,单元的长度(类型)可以由具体指令中的其他操作对象(比如说寄存器)指出,如前边的AX,AL。3、[bx]同样也表示一个内存单元,它的偏移地址在bx。4、描述性符号“()”表示取内容。约定符号idata表示常量。5、loop指令使用:1.在cx中存放循环次数;2.loop指令中的标号所标识地址要在签名;3.要执行的程序段要写在标号和loop指令中间。6、考虑计算会不会溢出。7、把内存单元xx
阅读全文
摘要:1、一个程序从写出到执行的过程:编写(使用文本编辑器)、编译链接(使用汇编语言编译程序(MASM.EXE)对源程序编译,产生目标文件,在用链接程序(link.exe)对目标文件进行链接,生产可执行文件)、执行(操作系统依照可执行文件中的描述信息,将可执行文件中的机器码和数据加载入内存,并进行相关的初始化(比如:设置CS:IP指向第一条要执行的指令),然后由CPU执行程序。2、可执行文件:1.程序(从源程序中的汇编指令翻译过来的机器码)和数据(源程序中定义的数据)2.相关的描述信息(比如:程序有多大、要占多少内存空间等)。PE(黑客)3、源程序:汇编指令(有对应的机器码,最终被CPU执行)、伪指
阅读全文
摘要:1、字型数据考虑两个字节,本高字单元+本字单元2、DS和[address]:DS存放要访问数据的段地址。3、mov指令可以完成两种传送功能:1.将数据直接送入寄存器;2.讲一个寄存器中的内容送入到另一个寄存器。除此之外,mov指令还可以将一个内存单元中的内容送入到一个寄存器。例mov al,[0]。执行指令时,8086CPU会自动取DS中的数据为内存单元的段地址。4、如何把1000H送入DS?8086CPU不支持将数据直接送入段寄存器的操作,DS是一个段寄存器(硬件设计问题)。数据——通用寄存器——段寄存器。5、如何将al中的数据送入内存单元10000H?6、[0]何时是一个字,何时是一个字节
阅读全文

浙公网安备 33010602011771号