汇编语言数据类型以及数据定义详解

汇编器识别一组基本的内部数据类型(intrinsic data type),按照数据大小(字节、字、双字等等)、是否有符号、是整数还是实数来描述其类型。这些类型有相当程度的重叠,例如,DWORD 类型(32 位,无符号整数)就可以和 SDWORD 类型(32 位,有符号整数)相互交换。 可能有人会说,程序员用 SDWORD 告诉读程序的人,这个值是有符号的,但是,对于汇编器来说这不是强制性的。汇编器只评估操作数的大小。因此,举例来说,程序员只能将 32 位整数指定为 DWORD、SDWORD
分类: 其他 发布时间: 06-23 23:42 阅读次数: 0

汇编语言等号=伪指令

等号伪指令(equal-sign directive)把一个符号名称与一个整数表达式连接起来,其语法如下: name = expression 通常,表达式是一个 32 位的整数值。当程序进行汇编时,在汇编器预处理阶段,所有出现的 name 都会被替换为 expression。假设下面的语句出现在一个源代码文件开始的位置: COUNT = 500 然后,假设在其后 10 行的位置有如下语句: mov eax, COUNT 那么,当汇编文件时,MASM 将扫描这个源文件,并生成相应的代码行: m
分类: 其他 发布时间: 06-23 23:42 阅读次数: 0

汇编语言计算数组和字符串长度

在使用数组时,通常会想要知道它的大小。下例使用常量 ListSize 来声明 list 的大小: list BYTE 10,20,30,40 ListSize = 4 显式声明数组的大小会导致编程错误,尤其是如果后续还会插入或删除数组元素。声明数组大小更好的方法是,让汇编器来计算这个值。 $ 运算符(当前地址计数器)返回当前程序语句的偏移量。在下例中,从当前地址计数器($)中减去 list 的偏移量,计算得到 ListSize: list BYTE 10,20,30,40 ListSize =
分类: 其他 发布时间: 06-23 23:42 阅读次数: 0

汇编语言EQU伪指令

EQU 伪指令把一个符号名称与一个整数表达式或一个任意文本连接起来,它有 3 种格式: name EQU expression name EQU symbol name EQU <text> 第一种格式中,expression 必须是一个有效整数表达式。第二种格式中,symbol 是一个已存在的符号名称,已经用 = 或 EQU 定义过了。第三种格式中,任何文本都可以岀现在<…>内。当汇编器在程序后面遇到 name 时,它就用整数值或文本来代替符号。 在定义非整数值时,EQU 非常有用。比如,可
分类: 其他 发布时间: 06-23 23:41 阅读次数: 0

汇编语言TEXTEQU伪指令

TEXTEQU 伪指令,类似于 EQU,创建了文本宏(text macro)。它有 3 种格式:第一种为名称分配的是文本;第二种分配的是已有文本宏的内容;第三种分配的是整数常量表达式: name TEXTEQU <text> name TEXTEQU textmacro name TEXTEQU %constExpr 例如,变量 prompt1 使用了文本宏 continueMsg: continueMsg TEXTEQU <"Do you wish to continue (Y/N)?"
分类: 其他 发布时间: 06-23 23:41 阅读次数: 0

汇编语言操作数类型

x86 的指令格式为: [label:] mnemonic [operands][ ;comment ] 指令包含的操作数个数可以是:0 个,1 个,2 个或 3 个。这里,为了清晰起见,省略掉标号和注释: mnemonic mnemonic [destination] mnemonic [destination] , [source] mnemonic [destination] , [source-1] , [source-2] 操作数有 3 种基本类型: 立即数——用数字文本表达式 寄存
分类: 其他 发布时间: 06-23 23:41 阅读次数: 0

汇编语言PTR运算符:重写操作数的大小类型

PTR 运算符可以用来重写一个已经被声明过的操作数的大小类型。只要试图用不同于汇编器设定的大小属性来访问操作数,那么这个运算符就是必需的。 例如,假设想要将一个双字变量 myDouble 的低 16 位传送给 AXO 由于操作数大小不匹配,因此,汇编器不会允许这种操作: .data myDouble DWORD 12345678h .code mov ax,myDouble 但是,使用 WORD PTR 运算符就能将低位字(5678h)送入 AX: mov ax,WORD PTR
分类: 其他 发布时间: 06-23 23:41 阅读次数: 0

汇编语言ALIGN伪指令:对齐一个变量

ALIGN 伪指令将一个变量对齐到字节边界、字边界、双字边界或段落边界。 语法如下: ALIGN bound Bound 可取值有:1、2、4、8、16。当取值为 1 时,则下一个变量对齐于 1 字节边界(默认情况)。当取值为 2 时,则下一个变量对齐于偶数地址。当取值为 4 时,则下一个变量地址为 4 的倍数。当取值为 16 时,则下一个变量地址为 16 的倍数,即一个段落的边界。 为了满足对齐要求,汇编器会在变量前插入一个或多个空字节。为什么要对齐数据?因为,对于存储于偶地址和奇地址的数据
分类: 其他 发布时间: 06-23 23:40 阅读次数: 0

汇编语言MOV指令:将源操作数复制到目的操作数

MOV 指令将源操作数复制到目的操作数。作为数据传送(data transfer)指令,它几乎用在所有程序中。在它的基本格式中,第一个操作数是目的操作数,第二个操作数是源操作数: MOV destination,source 其中,目的操作数的内容会发生改变,而源操作数不会改变。这种数据从右到左的移动与 C++ 或 Java 中的赋值语句相似: dest = source; 在几乎所有的汇编语言指令中,左边的操作数是目标操作数,而右边的操作数是源操作数。只要按照如下原则,MOV 指令使用操作数
分类: 其他 发布时间: 06-23 23:40 阅读次数: 0

汇编语言MOVZX和MOVSX指令

尽管 MOV 指令不能直接将较小的操作数复制到较大的操作数中,但是程序员可以想办法解决这个问题。假设要将 count(无符号,16 位)传送到 ECX(32 位),可以先将 ECX 设置为 0,然后将 count 传送到 CX: .data count WORD 1 .code mov ecx,0 mov cx,count 如果对一个有符号整数 -16 进行同样的操作会发生什么呢? .data signedVal SWORD -16 ; FFF0h (-16) .
分类: 其他 发布时间: 06-23 23:40 阅读次数: 0

汇编语言LAHF和SAHF指令

LAHF(加载状态标志位到 AH)指令将 EFLAGS 寄存器的低字节复制到 AH。被复制的标志位包括:符号标志位、零标志位、辅助进位标志位、奇偶标志位和进位标志位。使用这条指令,可以方便地把标志位副本保管在变量中: .data saveflags BYTE ? .code lahf ;将标志位加载到 AH mov saveflags, ah ;用变量保存这些标志位 SAHF(保存 AH 内容到状态标志位)指令将 AH 内容
分类: 其他 发布时间: 06-23 23:40 阅读次数: 0

汇编语言XCHG指令:交换两个操作数内容

XCHG(交换数据)指令交换两个操作数内容。该指令有三种形式: XCHG reg, reg XCHG reg, mem XCHG mem, reg 除了 XCHG 指令不使用立即数作操作数之外,XCHG 指令操作数的要求与《MOV指令》一节中介绍的 MOV 指令操作数要求是一样的。 在数组排序应用中,XCHG 指令提供了一种简单的方法来交换两个数组元素。下面是几个使用 XCHG 指令的例子。 xchg ax,bx ;交换 16 位寄存器内容 xchg ah,al ;交
分类: 其他 发布时间: 06-23 23:39 阅读次数: 0

汇编语言直接偏移量操作数

变量名加上一个位移就形成了一个直接 – 偏移量操作数。这样可以访问那些没有显式标记的内存位置。假设现有一个字节数组 arrayB: arrayB BYTE 10h,20h,30h,40h,50h 用该数组作为 MOV 指令的源操作数,则自动传送数组的第一个字节: mov al,arrayB ;AL = 10h 通过在 arrayB 偏移量上加 1 就可以访问该数组的第二个字节: mov al,[arrayB+1] ;AL = 20h 如果加 2 就可以访问该数组的第三个字节: mov al,
分类: 其他 发布时间: 06-23 23:39 阅读次数: 0

汇编语言数据传送示例

;数据传送示例 .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 DWORD 10000h,20000h .code main PROC ;演示 MOVZX 指令
分类: 其他 发布时间: 06-23 23:39 阅读次数: 0

汇编语言加法和减法详解

算术运算是汇编语言中一个大得令人惊讶的主题!本节重点在于加法和减法的运算。 先从最简单、最有效的指令开始:INC(增加)和 DEC(减少)指令,即加 1 和减 1。然后是能提供更多操作的 ADD、SUB 和 NEG(非)指令。最后,将讨论算术运算指令如何影响 CPU 状态标志位(进位位、符号位、零标志位等)。请记住,汇编语言的细节很重要。 INC 和 DEC 指令 INC(增加)和DEC(减少)指令分别表示寄存器或内存操作数加 1 和减 1。语法如下所示: INC reg/mem DEC re
分类: 其他 发布时间: 06-23 23:39 阅读次数: 0

linux入门开发基础教程系列

好的开始是成功的一半。学习 Linux 的第一个问题是搞明白 Linux 是什么,了解其来龙去脉、前世今生,知道其发展趋势、应用前景,弄清楚为什么学习它,以及如何掌握它和使用它,知其然更要知其所以然。 工欲善其事,必先利其器。建议学习 Linux 的朋友不要忽视本章章。很多人看技术类图书都不喜欢或不重视第一章,甚至直接跳过去,觉得大多是介绍性的内容,陈词滥调、形式化,且没什么 技术含量。 Linux简介 1.1 操作系统是什么 1.2 Linux和UNIX的关系及区别 1.3 类UNIX系统
分类: 其他 发布时间: 06-23 23:38 阅读次数: 0

zabbix硬件、软件需求(4)

为什么80%的码农都做不了架构师?>>> 在了解完 zabbix进程构成之后,我们接着聊zabbix的硬件配置、软件需求,或者说我安装 zabbix需要什么软件,服务器需要什么样的配置,监控100台服务器需要怎样的一台服务器,或者我有一台8核16G的服务器,我能监控多少台服务器?来,带着困惑往下看. 1. 硬件需求 无非就是cpu、内存、硬盘之类的 1.1 CPU 由你的zabbix数据库使用情况来做决定,如果你监控的项目越多,那你的cpu要越好。具体多好,下面有个表格 1.2 内存与硬盘 最
分类: 其他 发布时间: 06-23 23:38 阅读次数: 0

CYQ.Data 轻量数据层之路 使用篇-MAction 数据查询 视频 E (二十二)

2019独角兽企业重金招聘Python工程师标准>>> 说明: 本次录制主要为使用篇:CYQ.Data 轻量数据层之路 使用篇二曲 MAction 数据查询(十三) 的附加视频教程-下半部分。 本次视频介绍了: 1:GridView/DataList/Repeater控件配合分页控件实现列表绑定。 2:利用视图实现多表操作 3:得用自定SQL语句实现多表操作。 这本次录制的视频上传于-秋色园: 注意如果要看清晰版本,要点击视频下面的:查看原始大小的动画 本次视频大小分辨率为:1024*768,
分类: 其他 发布时间: 06-23 23:37 阅读次数: 0

【ES6基础】迭代器(iterator)

迭代器(iterator)是一个结构化的模式,用于从源以一次一个的方式提取数据。迭代器的使用可以极大地简化数据操作,于是ES6也向JS中添加了这个迭代器特性。新的数组方法和新的集合类型(如Set集合与Map集合)都依赖迭代器的实现,这个新特性对于高效的数据处理而言是不可或缺的,在语言的其他特性中也都有迭代器的身影:新的for-of循环、展开运算符(...),甚至连异步编程都可以使用迭代器。 今天笔者将从以下几个方面进行介绍迭代器: 什么是迭代器(iterator)? 基于协议实现迭代器 迭代器
分类: 其他 发布时间: 06-23 23:37 阅读次数: 0

文件服务器 之 一步一学Linux与Windows 共享文件Samba

作者:北南南北,正在增加中... ... 需要您的参与; 来自:LinuxSir.Org 简介:本文只是讲一讲我们最常用的Linux与Windows共享文件,主要是为新手指一指路。如何建立最简单的Samba服务器,并讲述遇到问题应该从何处寻找解决方案;正在更新之中,希望您的参加 ... ... 谢谢; 目录 0、架设Samba 服务器的前提; 0.1 查看文件内容和编辑文件的工具; 0.2 关于文件和目录相关; 03 用户和用户组相关; 04 进程管理; 1 Samba 简介 2 Samba
分类: 其他 发布时间: 06-23 23:37 阅读次数: 0