自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(21)
  • 收藏
  • 关注

原创 [Intel汇编-MASM]数据标号和直接定址表

1. 数据标号:    1) 往往有这种需求,想在db/dw/dd等数据定义之前加个标号以便于对定义的数据区的访问,但是汇编语法不支持这样做(会直接报错的!),但MASM提供了一种更加便捷的方式来实现这种内存的访问方式,并且比想象中的功能还要强大;    2) 以上的这种标号在MASM中叫做数据标号,和普通地址标号不同的地方在于定义它不需要使用冒号:,而是直接在db/dw/dd之前写标号:

2014-12-21 22:17:10 2112

原创 [Intel汇编-MASM]外中断

1. 外中断的概念:    1) 之前叙述过,外中断基本上都是外设引发的,而外设和CPU通信的桥梁就是端口;    2) 外中断分为可屏蔽中断和不可屏蔽中断两种:        i. 可屏蔽中断:几乎所有由外设引发的外中断都是可屏蔽的,即在程序可以通过设置IF标志位决定是否允许在当前程序中被外中断打断;           *1. sti:set interrupt flag,将I

2014-12-21 14:10:44 904

原创 [Intel汇编-MASM]端口通信

1. 那些不能被CPU统一编址的芯片:    1) 可以被CPU统一编制的芯片都有一个共同的特点,那就是基本都是存储器(ROM、RAM、显存等)、其上的数据有且仅有CPU有权限读写、速度跟得上CPU,比如硬盘虽然也是存储器、也只能被CPU读写,但是速度太慢容量太大而无法被CPU统一编址到一个逻辑内存空间中;    2) 很多外设(一些I/O设备)的芯片,其上的数据不仅可以被CPU修改,同时

2014-12-21 01:18:12 1040

原创 [Intel汇编-MASM]内中断

1. 内中断的产生:    1) 中断是指一种特殊的信息,一旦CPU收到中断信息就必须暂停当前的工作并转去执行处理该信息的代码(有时可以选择性地屏蔽中断信息),处理完成之后再回复中断前的环境并继续执行中断前的任务;    2) 内中断和外中断:        i. 内中断是指从CPU内部发出的中断信息,具体说就是指当前CPU正在执行的任务自己产生的中断,这种中断是无法屏蔽的(由于是CP

2014-12-20 14:52:04 2080

原创 [Intel汇编-MASM]标志寄存器

1. 标志寄存器的功能:    1) 即SF寄存器(16位),Sign Flag Register,用于存放程序运行时的一些状态信息以及一些运算的临时结果等,该寄存器中的信息称为程序状态字PSW(Program Status Word,因为是16位字型的);    2) 该寄存器和其它通用寄存器和专用寄存器有明显的区别,首先它不是用来存放数据和地址的,它是按位起作用的,每一位保存着不同意义

2014-12-19 21:29:39 3726

原创 [Intel汇编-MASM]转移指令

1. 通过seg和offset操作符获取标号的段地址和偏移地址:    1) 这两个都是伪指令,都是属于编译器的操作符,不能直接翻译成机器代码,前者是segment的缩写,而后者的意思就是“偏移量”;    2) 这两者可以作用于任何标号,前者用于获取标号所在段的段基,后者用于获取标号所在段的偏移地址,这里的段都是由"XXX segment"定义的段,而这个XXX(也是标号)就是段基了;

2014-12-19 02:20:29 2242

原创 [Intel汇编-MASM]嵌套循环问题

1. 嵌套循环中循环计数器不够的问题:    1) 即多重循环就需要有多个循环计数器,并且每个计数器都是相互独立的,分别为各自的循环技术;    2) 但是对于loop指令只提供了cx这一个计数器,这就产生了多个循环争用一个cx计数器的竞争问题了;    3) 这个问题的解决方思路就是在进入一层循环的开始先将外面一层循环的计数器先保存起来,等到内存循环退出的时候在将外层循环的计数器重新

2014-12-18 15:27:22 2588

原创 [Intel汇编-MASM]内存单元访问扩展

1. 偏移地址的表示方式汇总:    1) 偏移地址表示规则:在中括号[ ]中最多有一个基址寄存器、最多有一个索引寄存器、最多有一个立即数,这三者的顺序可以任意,之间必须用+相连,不得用其它符号;    2) 基址寄存器:是指bx(base register基址寄存器)和bp(base pointer基址指针),两者都属于基址寄存器,只不过bx作为偏移地址时默认ds为段基,而bp作为偏移地

2014-12-18 00:25:26 1390

原创 [Intel汇编-MASM]与或以及乘除

1. 按位与/或指令:    1) and指令表示按位与,or指令表示按位或;    2) 两条指令的参数完全相同,都是将第一个参数和第二个参数进行按位运算,并将结果保存在第一个参数中;    3) 两个操作数的类型和前面讲过的mov指令差不多,并且这里先不提两个操作数都是内存单元的情况;    4) 操作数中不能有段寄存器,其余寄存器可以随便用,只要出现段寄存器就会报错!

2014-12-17 23:03:42 2675

原创 [Intel汇编-MASM]数据定义与分段程序

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

2014-12-17 20:49:27 4958

原创 [Intel汇编-MASM]内存访问方式以及循环程序的调试

1. 内存单元的访问方式(这里的不全,之后会进一步补充):    1) 总共有四种方式:        i. [立即数],但是在这种情况下只能作为源操作数(即第二个操作数,比如mov ax, [15]等),此时访问的内存是(ds:立即数),但是不能作为目的操作数(即第一个操作数),如果作为第一个操作数则编译器会将看做是一个普通的立即数而报错,比如mov [15], ax就会看成mov 15

2014-12-17 17:05:01 3122

原创 [Intel汇编-MASM]源程序的组成以及编译调试

1. 以第一个汇编源程序为例说明:assume cs:codesgcodesg segment mov ax, 0123H mov bx, 0456H add ax, bx add ax, ax mov ax, 4C00H int 21Hcodesg endsend    1) 汇编指令和伪指令的区别:首先这里要讲两个概念,即汇编语言包含什么,其

2014-12-17 15:34:25 2129

原创 [Intel汇编-MASM]栈

1. CPU的栈操作的支持:    1) 现代CPU都提供栈的功能,即提供栈的访问功能,指令有push和pop等;    2) 8086CPU对栈的操作(push、pop等)都是以字为单位的,即16位,因此不得在栈操作中使用非16位的寄存器,如AL等,否则将会报错;2. 用SS:SP定义一个内存栈:     1) 和前面利用DS寄存器定义一个数据段一样,栈同样也是存在于用户

2014-12-16 22:52:55 1517

原创 [Intel汇编-MASM]用DS寄存器定义一段数据

1. 数据段的段基——DS:    1) 可以使用寄存器DS指向内存中一段数据的段基;    2) 由于8086的硬件设计,不支持直接将立即数送入段寄存器,而只能通过一个普通寄存器中转的方式给段寄存器赋值(其它段寄存器都是这样,包括CS等),比如:mov ax, 1000hmov ds, ax    3) 使用DS寄存器存放一段数据的段基的好处是在语法上支持直接使用"

2014-12-16 20:24:03 2613

原创 [Intel汇编-MASM]Debug的使用

1. bug和debug名词的由来:    1) 最早的计算机都是用电子管搭的,一次实验中因为电子管的光热引入一只小飞虫(bug)进入其真空结构内导致整个计算机瘫痪,废了科学家好长时间才排除了这个故障电子管,当时他们把这个排除故障的过程调侃为去除虫子(debug);    2) 现在人们将bug当做计算机系统、程序中的错误、漏洞和缺陷,而排除这些错误和漏洞的过程就叫debug,通常叫调试;

2014-12-16 19:30:15 2075

原创 [Objective-C]简介、数据类型、NSLog、运算符

1. OC历史简介:    1) 以后OC就作为Objective-C的简称了;    2) 大致经过:         i) 最早由Brad J.Cox创造,仅仅是对C语言进行了一定的扩展,因此具有C语言的特性,但很多语法基于SmallTalk,因此是面向对象的;         ii) NeXT公司获得OC授权,并发展出了OC的语言库和开发环境(该环境基于NEXTSTEP操作系

2014-12-16 14:39:26 1462

原创 [Intel汇编-MASM]程序中可用的寄存器

1. (最常用的)通用寄存器:    1) 最早CPU寄存器个数只有4~8个,发展到现在,CPU寄存器个数已经有几十个了,即使这样,CPU寄存器资源仍然相当宝贵,一定要合理运用;    2) 先对几个大写英文字母做一些说明:            E:Extended,即扩展的意思,在这里表示从16位扩展成32位,表示寄存器容量的升级;            X:即Register

2014-12-14 21:25:26 2370

原创 [Swift]泛型

1. Swift泛型的定义方法:    1) 和C++泛型概念一样,用法和C++也相似,同样也是使用一个类型占位符(代表一个通用类型,也是泛型的参数,用户随意取名,但要求按照标示符命名规则进行,因为其代表一个通用类型,因此和定义其它类型名的规范一样,最好是首字母大写的驼峰命名方式,一般取T);    2) 一个简单的泛型函数的例子:func mySwap(inout a: T, ino

2014-12-06 15:24:17 1210

原创 [Swift]协议

1. 协议的概念:    1) 其实就是Java中的接口,Swift的遵守协议就是Java中的实现接口,如果放在C++中就是纯虚类的概念,即协议就是一种高度抽象的抽象类,里面值规定了方法、属性等内容,但没有提供任何实现,所有遵守该协议的类、结构体或枚举都必须实现协议中规定的内容,只不过C++没有接口而只能通过继承虚基类来实现其中的内容而已;    2) 协议是面向接口编程的必不可少的机制,

2014-12-04 14:55:31 9933

原创 [Swift]扩展

1. Swift扩展的概念以及重要性:    1) 扩展的概念:是指向一个已有的类、结构体、枚举添加新的功能(属性、方法、下标等),但不需要修改这些类型的源代码甚至不需要拥有这些类型的源代码;    2) 和继承的区别:首先扩展可以运用到不止类(还包括结构体和下标,甚至是Int、Double等基本类型,实际上这些基本类型也是用结构体来实现的);其次,虽然可以通过继承在新的子类中添加更多

2014-12-03 20:53:07 2186

原创 [Swift]多态类型转换以及不确定类型

1. Swift的多态:    1) 和其它语言多态描述一致,都是用父类指针或引用(这里的父类是指祖先类)指向子类的实例,然后在子类中覆盖父类的方法,利用该父类引用调用相同的方法而产生不同的行为;    2) Swift的多态类型转换:和普通的类型转换不一样,普通的类型转换是指一般意义上的强制类型转换,但是强制类型转换不能发生在类型之间,如果使用"类名(转换对象)"则会触发相应类的构造器而

2014-12-02 16:17:11 3068

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除