- 博客(108)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 linux入门开发基础教程系列
好的开始是成功的一半。学习 Linux 的第一个问题是搞明白 Linux 是什么,了解其来龙去脉、前世今生,知道其发展趋势、应用前景,弄清楚为什么学习它,以及如何掌握它和使用它,知其然更要知其所以然。工欲善其事,必先利其器。建议学习 Linux 的朋友不要忽视本章章。很多人看技术类图书都不喜欢或不重视第一章,甚至直接跳过去,觉得大多是介绍性的内容,陈词滥调、形式化,且没什么 技术含量。...
2019-06-18 22:00:01
1421
1
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 大数据入门基础教程系列
所谓大数据(Big Data),就是需要处理的数据量非常巨大,已经达到了 TB、PB 甚至 EB、ZB 级别,需要成千上万块硬盘才能存储。传统的技术手段在大数据面前不堪一击,只能探索一套新的解决方案。这套《大数据技术与应用教程》对大数据处理过程中涉及的各种关键技术做了详细的介绍,包括大数据思维、大数据采集、大数据处理、大数据存储、大数据挖掘、大数据应用等各个环节,帮助初学者规划了一条完整的学习...
2019-06-18 21:59:58
5322
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 Java学习开发入门基础教程系列
ava是一种跨平台的语言,一次编写,到处运行,在世界编程语言排行榜中稳居第二名(第一名是C语言)。Java用途广泛,可以用来开发传统的客户端软件和网站后台,也可以开发如火如荼 Android 应用和云计算平台。一. Java概述1.Java语言概述2.Java虚拟机以及跨平台原理3.Java的主要就业方向4.Java的不同版本5.Java开发环境搭建6.第一个Jav...
2019-06-18 21:54:59
1544
1
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 web前端开发入门基础教程系列
前端工程师是互联网时代软件产品研发中不可缺少的一种专业研发角色。从狭义上讲,前端工程师使用 HTML、CSS、JavaScript 等专业技能和工具将产品UI设计稿实现成网站产品,涵盖用户PC端、移动端网页,处理视觉和交互问题。从广义上来讲,所有用户终端产品与视觉和交互有关的部分,都是前端工程师的专业领域。html教程HTML简介HTML编辑器HTML基础HTML元素HTML属性HTML标题H...
2019-06-18 21:54:58
3037
1
原创 汇编语言XOR指令:对两个操作数进行逻辑(按位)异或操作
XOR 指令在两个操作数的对应位之间进行(按位)逻辑异或(XOR)操作,并将结果存放在目标操作数中:XOR destination, sourceXOR 指令操作数组合和大小与 AND 指令及 OR 指令相同。两个操作数的每一对对应位都应用如下操作原则:如果两个位的值相同(同为 0 或同为 1),则结果位等于 0;否则结果位等于 1。下表描述的是布尔运算 X㊉y:x y...
2019-06-24 20:08:52
18833
原创 汇编语言位向量(位映射)
有些应用控制的对象是从一个有限全集中选出来的一组项目。就像公司里的雇员,或者气象监测站的环境读数。在这些情景中,二进制位可以代表集合成员。与 Java HashSet 用指针或引用指向容器内对象不同,应用可以用位向量(或位映射)把一个二进制数中的位映射为数组中的对象。如下例所示,二进制数的位从左边 0 号开始,到右边 31 号为止,该数表示了数组元素 0、1、2 和 31 是名为 S...
2019-06-24 20:08:49
454
原创 汇编语言TEST指令:对两个操作数进行逻辑(按位)与操作
TEST 指令在两个操作数的对应位之间进行 AND 操作,并根据运算结果设置符号标志位、零标志位和奇偶标志位。TEST 指令与《AND指令》一节中介绍的 AND 指令唯一不同的地方是,TEST 指令不修改目标操作数。TEST 指令允许的操作数组合与 AND 指令相同。在发现操作数中单个位是否置位时,TEST 指令非常有用。示例:多位测试TEST 指令同时能够检查几个位。假设想要知...
2019-06-24 20:08:46
7715
原创 汇编语言位向量(位映射)
有些应用控制的对象是从一个有限全集中选出来的一组项目。就像公司里的雇员,或者气象监测站的环境读数。在这些情景中,二进制位可以代表集合成员。与 Java HashSet 用指针或引用指向容器内对象不同,应用可以用位向量(或位映射)把一个二进制数中的位映射为数组中的对象。如下例所示,二进制数的位从左边 0 号开始,到右边 31 号为止,该数表示了数组元素 0、1、2 和 31 是名为 S...
2019-06-24 20:07:43
439
原创 汇编语言AND指令:对两个操作数进行逻辑(按位)与操作
AND 指令在两个操作数的对应位之间进行(按位)逻辑与(AND)操作,并将结果存放在目标操作数中:AND destination,source下列是被允许的操作数组合,但是立即操作数不能超过 32 位:AND reg, regAND reg, memAND reg, immAND mem, regAND mem, imm操作数可以是 8 位、16 位、32 位和 64...
2019-06-24 20:07:41
34344
原创 汇编语言布尔和比较指令简介
前面介绍了四种基本的布尔代数操作:AND、OR、XOR 和 NOT。用汇编语言指令,这些操作可以在二进制位上实现。同样,这些操作在布尔表达式层次上也很重要,比如 IF 语句。首先了解按位指令,这里使用的技术也可以用于操作硬件设备控制位,实现通信协议以及加密数据,这里只列举了几种应用。Intel 指令集包含了 AND、OR、XOR 和 NOT 指令,它们能直接在二进制位上实现布尔操作,如下...
2019-06-24 20:07:38
740
原创 汇编语言ALIGN伪指令:对齐一个变量
ALIGN 伪指令将一个变量对齐到字节边界、字边界、双字边界或段落边界。语法如下:ALIGN boundBound 可取值有:1、2、4、8、16。当取值为 1 时,则下一个变量对齐于 1 字节边界(默认情况)。当取值为 2 时,则下一个变量对齐于偶数地址。当取值为 4 时,则下一个变量地址为 4 的倍数。当取值为 16 时,则下一个变量地址为 16 的倍数,即一个段落的边界。...
2019-06-24 20:00:00
717
原创 汇编语言PTR运算符:重写操作数的大小类型
PTR 运算符可以用来重写一个已经被声明过的操作数的大小类型。只要试图用不同于汇编器设定的大小属性来访问操作数,那么这个运算符就是必需的。例如,假设想要将一个双字变量 myDouble 的低 16 位传送给 AXO 由于操作数大小不匹配,因此,汇编器不会允许这种操作: .data myDouble DWORD 12345678h .code mov ax,myDouble...
2019-06-24 19:59:57
306
原创 汇编语言TYPE运算符:返回变量的大小
TYPE 运算符返回变量单个元素的大小,这个大小是以字节为单位计算的。比如,TYPE 为字节,返回值是 1;TYPE 为字,返回值是 2;TYPE 为双字,返回值是 4;TYPE 为四字,返回值是 8。示例如下: .data var1 BYTE ? var2 WORD ? var3 DWORD ? var4 QWORD ?下表是每个 TYPE 表达式的值。表达式 ...
2019-06-24 19:59:53
3515
原创 汇编语言LENGTHOF运算符:计算数组中元素的个数
LENGTHOF 运算符计算数组中元素的个数,元素个数是由数组标号同一行出现的数值来定义的。示例如下: .data byte1 BYTE 10,20,30 array1 WORD 30 DUP (?),0,0 array2 WORD 5 DUP(3 DUP(?)) array3 DWORD 1,2,3,4 digitStr BYTE "12345678",0如果...
2019-06-24 19:59:52
4888
原创 汇编语言OFFSET运算符:返回数据标号的偏移量
OFFSET 运算符返回数据标号的偏移量。这个偏移量按字节计算,表示的是该数据标号距离数据段起始地址的距离。如下图所示为数据段内名为 myByte 的变量。OFFSET 示例在下面的例子中,将用到如下三种类型的变量: .data bVal BYTE ? wVal WORD ? dVal DWORD ? dVal2 DWORD ?假设 bVal 在偏移量为 0040 ...
2019-06-23 20:59:59
6216
原创 汇编语言加法和减法详解
算术运算是汇编语言中一个大得令人惊讶的主题!本节重点在于加法和减法的运算。先从最简单、最有效的指令开始:INC(增加)和 DEC(减少)指令,即加 1 和减 1。然后是能提供更多操作的 ADD、SUB 和 NEG(非)指令。最后,将讨论算术运算指令如何影响 CPU 状态标志位(进位位、符号位、零标志位等)。请记住,汇编语言的细节很重要。INC 和 DEC 指令INC(增加)和DE...
2019-06-23 20:59:57
9474
1
原创 汇编语言数据传送示例
;数据传送示例 .386 .model flat,stdcall .stack 4096 ExitProcess PROTO,dwExitCode:DWORD .data val1 WORD 1000h val2 WORD 2000h arrayB BYTE 10h,20h,30h,40h,50h arrayW WORD 100h,200h,300h arrayD DWO...
2019-06-23 20:00:01
453
原创 汇编语言直接偏移量操作数
变量名加上一个位移就形成了一个直接 – 偏移量操作数。这样可以访问那些没有显式标记的内存位置。假设现有一个字节数组 arrayB:arrayB BYTE 10h,20h,30h,40h,50h用该数组作为 MOV 指令的源操作数,则自动传送数组的第一个字节:mov al,arrayB ;AL = 10h通过在 arrayB 偏移量上加 1 就可以访问该数组的...
2019-06-23 19:59:59
1131
原创 汇编语言XCHG指令:交换两个操作数内容
XCHG(交换数据)指令交换两个操作数内容。该指令有三种形式:XCHG reg, regXCHG reg, memXCHG mem, reg除了 XCHG 指令不使用立即数作操作数之外,XCHG 指令操作数的要求与《MOV指令》一节中介绍的 MOV 指令操作数要求是一样的。在数组排序应用中,XCHG 指令提供了一种简单的方法来交换两个数组元素。下面是几个使用 XCHG 指令的...
2019-06-23 19:59:57
6712
原创 汇编语言LAHF和SAHF指令
LAHF(加载状态标志位到 AH)指令将 EFLAGS 寄存器的低字节复制到 AH。被复制的标志位包括:符号标志位、零标志位、辅助进位标志位、奇偶标志位和进位标志位。使用这条指令,可以方便地把标志位副本保管在变量中: .data saveflags BYTE ? .code lahf ;将标志位加载到 AH mov saveflags...
2019-06-23 19:59:55
4289
原创 汇编语言MOVZX和MOVSX指令
尽管 MOV 指令不能直接将较小的操作数复制到较大的操作数中,但是程序员可以想办法解决这个问题。假设要将 count(无符号,16 位)传送到 ECX(32 位),可以先将 ECX 设置为 0,然后将 count 传送到 CX: .data count WORD 1 .code mov ecx,0 mov cx,count如果对一个有符号整数 -16 进行同样的操作会发生...
2019-06-23 19:59:54
2322
原创 汇编语言MOV指令:将源操作数复制到目的操作数
MOV 指令将源操作数复制到目的操作数。作为数据传送(data transfer)指令,它几乎用在所有程序中。在它的基本格式中,第一个操作数是目的操作数,第二个操作数是源操作数:MOV destination,source其中,目的操作数的内容会发生改变,而源操作数不会改变。这种数据从右到左的移动与 C++ 或 Java 中的赋值语句相似:dest = source;在几乎所...
2019-06-23 19:59:52
3276
原创 汇编语言ALIGN伪指令:对齐一个变量
ALIGN 伪指令将一个变量对齐到字节边界、字边界、双字边界或段落边界。语法如下:ALIGN boundBound 可取值有:1、2、4、8、16。当取值为 1 时,则下一个变量对齐于 1 字节边界(默认情况)。当取值为 2 时,则下一个变量对齐于偶数地址。当取值为 4 时,则下一个变量地址为 4 的倍数。当取值为 16 时,则下一个变量地址为 16 的倍数,即一个段落的边界。...
2019-06-23 19:50:02
1664
原创 汇编语言PTR运算符:重写操作数的大小类型
PTR 运算符可以用来重写一个已经被声明过的操作数的大小类型。只要试图用不同于汇编器设定的大小属性来访问操作数,那么这个运算符就是必需的。例如,假设想要将一个双字变量 myDouble 的低 16 位传送给 AXO 由于操作数大小不匹配,因此,汇编器不会允许这种操作: .data myDouble DWORD 12345678h .code mov ax,myDouble...
2019-06-23 19:50:00
1368
原创 汇编语言操作数类型
x86 的指令格式为:[label:] mnemonic [operands][ ;comment ]指令包含的操作数个数可以是:0 个,1 个,2 个或 3 个。这里,为了清晰起见,省略掉标号和注释:mnemonicmnemonic [destination] mnemonic [destination] , [source] mnemonic [destination] ,...
2019-06-22 17:49:59
1629
原创 汇编语言TEXTEQU伪指令
TEXTEQU 伪指令,类似于 EQU,创建了文本宏(text macro)。它有 3 种格式:第一种为名称分配的是文本;第二种分配的是已有文本宏的内容;第三种分配的是整数常量表达式:name TEXTEQU <text>name TEXTEQU textmacroname TEXTEQU %constExpr例如,变量 prompt1 使用了文本宏 continue...
2019-06-22 17:49:57
894
1
原创 汇编语言EQU伪指令
EQU 伪指令把一个符号名称与一个整数表达式或一个任意文本连接起来,它有 3 种格式:name EQU expressionname EQU symbolname EQU <text>第一种格式中,expression 必须是一个有效整数表达式。第二种格式中,symbol 是一个已存在的符号名称,已经用 = 或 EQU 定义过了。第三种格式中,任何文本都可以岀现在&l...
2019-06-22 17:30:02
11251
原创 汇编语言计算数组和字符串长度
在使用数组时,通常会想要知道它的大小。下例使用常量 ListSize 来声明 list 的大小:list BYTE 10,20,30,40ListSize = 4显式声明数组的大小会导致编程错误,尤其是如果后续还会插入或删除数组元素。声明数组大小更好的方法是,让汇编器来计算这个值。$ 运算符(当前地址计数器)返回当前程序语句的偏移量。在下例中,从当前地址计数器($)中减去 li...
2019-06-22 17:30:00
3003
原创 汇编语言等号=伪指令
等号伪指令(equal-sign directive)把一个符号名称与一个整数表达式连接起来,其语法如下:name = expression通常,表达式是一个 32 位的整数值。当程序进行汇编时,在汇编器预处理阶段,所有出现的 name 都会被替换为 expression。假设下面的语句出现在一个源代码文件开始的位置:COUNT = 500然后,假设在其后 10 行的位置有如...
2019-06-22 17:00:01
1448
原创 汇编语言数据类型以及数据定义详解
汇编器识别一组基本的内部数据类型(intrinsic data type),按照数据大小(字节、字、双字等等)、是否有符号、是整数还是实数来描述其类型。这些类型有相当程度的重叠,例如,DWORD 类型(32 位,无符号整数)就可以和 SDWORD 类型(32 位,有符号整数)相互交换。可能有人会说,程序员用 SDWORD 告诉读程序的人,这个值是有符号的,但是,对于汇编器来说这不是强制性...
2019-06-22 16:59:59
7779
原创 汇编器以及汇编流程
用汇编语言编写的源程序不能直接在其目标计算机上执行,必须通过翻译或汇编将其转换为可执行代码。实际上,汇编器与编译器 (compiler) 很相似,编译器是一类程序,用于将 C++ 或 Java 程序翻译为可执行代码。汇编器生成包含机器语言的文件,称为目标文件 (object file)。这个文件还没有准备好执行,它还需传递给一个被称为链接器 (linker) 的程序,从而生成可执行文件 ...
2019-06-22 16:59:57
1579
原创 汇编语言整数加减法示例
在《第一个汇编语言程序》一节中给出的 AddTwo 程序,并添加必要的声明使其成为完全能运行的程序。 ; AddTwo.asm -两个 32 位整数相加 .386 .model flat,stdcall .stack 4096 ExitProcess PROTO, dwExitCode:DWORD .code main PROC mov eax,5 ;将数字...
2019-06-22 16:59:54
1728
原创 汇编语言指令详解
指令(instruction)是一种语句,它在程序汇编编译时变得可执行。汇编器将指令翻译为机器语言字节,并且在…指令(instruction)是一种语句,它在程序汇编编译时变得可执行。汇编器将指令翻译为机器语言字节,并且在运行时由 CPU 加载和执行。一条指令有四个组成部分:标号(可选) 指令助记符(必需) 操作数(通常是必需的) 注释(可选)不同部分的位置安排如下所示:...
2019-06-22 16:59:52
1019
原创 汇编语言伪指令
伪指令 (directive) 是嵌入源代码中的命令,由汇编器识别和执行。伪指令不在运行时执行,但是它们可以定义变量、宏和子程序;为内存段分配名称,执行许多其他与汇编器相关的日常任务。默认情况下,伪指令不区分大小写。例如,.data,.DATA 和 .Data 是相同的。下面的例子有助于说明伪指令和指令的区别。DWORD 伪指令告诉汇编器在程序中为一个双字变量保留空间。另一方面,MO...
2019-06-22 16:59:50
687
原创 汇编语言常量
常量(constant)是程序中使用的一个确定数值,在汇编阶段就可以确定,直接编码于指令代码中,不是保存在存储器中可变的变量,因为是编码在指令中的量,和指令一起存储了,所以不用单独开辟主存空间,所以也就没法动态改变它了,这也正是高级语言常量无法修改的原因。整数常量整数常量(integer literal)(又称为整型常量(integer constant))由一个可选前置符号、一个或...
2019-06-21 21:59:00
553
原创 字符在计算机中是如何表示的?
如果计算机只存储二进制数据,那么它如何表示字符呢?计算机使用的是字符集,将字符映射为整数。早期,字符集只用 8 位表示。即使是现在,在字符模式(如 MS-DOS)下运行时,IBM 兼容微机使用的还是 ASCII(读为“askey”)字符集。ASCII 是美国标准信息交换码(AmeTican Standard Code for Information Interchange)的首字母缩写。...
2019-06-21 21:58:00
2579
原创 汇编语言布尔表达式(NOT、AND、OR)
布尔代数(boolean algebra)定义了一组操作,其值为真(true)或假(false)。它的发明者是十九世纪中叶的数学家乔治・布尔(George Boole)。在数字计算机发明的早期,人们发现布尔代数可以用来描述数字电路的设计。同时,在计算机程序中,布尔表达式被用来表示逻辑操作。一个布尔表达式(boolean expression)包括一个布尔运算符以及一个或多个操作数。每...
2019-06-21 21:57:58
4728
原创 CPU处理器架构和工作原理浅析
汇编语言是学习计算机如何工作的很好的工具,它需要我们具备计算机硬件的工作知识。基本微机设计下图给出了假想机的基本设计。中央处理单元(CPU)是进行算术和逻辑操作的部件,包含了有限数量的存储位置——寄存器(register),一个高频时钟、一个控制单元和一个算术逻辑单元。其中:时钟 (clock) 对 CPU 内部操作与系统其他组件进行同步。 控制单元 (control ...
2019-06-21 21:57:56
682
原创 32位x86处理器架构
本节重点讲解了 32 位 x86 处理器的基本架构特点。这些处理器包括了 Intel IA-32 系列中的成员和所有 32 位 AMD 处理器。操作模式x86 处理器有三个主要的操作模式:保护模式、实地址模式和系统管理模式;以及一个子模式:虚拟 8086 (virtual-8086) 模式,这是保护模式的特殊情况。以下是对这些模式的简介:1) 保护模式 (Protected Mo...
2019-06-21 21:57:55
493
原创 64位x86-64处理器架构
本节重点关注所有使用 x86-64 指令集的 64 位处理器的基本架构细节。这些处理器包括 Intel 64 和 AMD64 处理器系列。指令集是已讨论的 x86 指令集的 64 位扩展。以下为一些基本特征:1) 向后兼容 x86 指令集。2) 地址长度为 64 位,虚拟地址空间为 2 64 字节。按照当前芯片的实现情况,只能使用地址的低 48 位。3) 可以使用 64 位通用寄...
2019-06-21 21:55:02
2981
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人