汇编中基本的数据类型

1、字节(DB)define byte

一个字节有8位二进制组成,其最高位是第7位,最低位是第0位。在表示有符号数时,最高位就是符号位。

00001001    =9

10001011    = -11    有符号

=  139         无符号

通常情况下,存储器按字节编址,读写存储器的最小信息单位就是一个字节。

Var_byte     db    10011101B

Var_bytes    db    41H,42D,61H

那么一个字节8位最大的值为 11111111=256  最小的值为-256

ah 和 al 这些能存储8位的值 所以对于int型值(这里不能说汇编有int型 只能说转换为10进制的数字 的范围 因为数据默认是10进制的) 只能到 -256  256

2、字(DW)define word

由2个字节组成一个字,其最高位是第15位,最低位是第0位。高8位称为高字节,低8位称为低字节。

0010101000111100

Var_word              dw   4512

这里一个字只是一种类型 不能说明 一个字母代表一个字

汇编中一个字是一个字节 一个汉字两个字节

3、双字(DD)define doubleword

用2个字(4个字节)来组成一个双字,其高16位称为高字,低16位称为低字。

双字有较大的数据表示范围,它通常是为了满足数据的表示范围而选用的数据类型,也可用于存储远指针。

Var_dword      dd    0F99728H  2H 0ABH

4、四字(DQ)

由4个字(8个字节)组成一个四字类型,它总共有64个二进制位,当然,也就有更大的数据表示范围,但在汇编语言中很少使用该数据类型。

5、十字节(DT)

由10个字节组成一个十字节类型,它总共有80个二进制位。

6、字符串(DB)

字符串是由若干个字节组成的,字节数不定,通常每个字节存储一个字符。该数据形式是汇编语言程序中经常使用的另一种数据形式。

Char_ABC      db    ‘A’,’B’,’C’

String_ABC    db    ‘ABC’

时间: 2024-10-10 23:00:28

汇编中基本的数据类型的相关文章

栈以及内存操作在汇编中的实现

一. 学习过程 要在计算机中用到一段存储空间,必须要知道两个信息:(1)存储空间在哪?(2)存储空间有多大.对于寄存器来说,只要给出寄存器的名字就可以了,因为每个寄存器在计算机中都是唯一的,而且寄存器大小是规定的.对于内存空间来说,就要给出地址和数据类型,数据类型就代表一个存储空间的大小. 以前学习C语言的时候,并没有仔细研究过,原来C语言中还可以以这种语法直接向内存单元中写入数据:*(char *)0x2000=’a’;向偏移地址为2000h的内存空间写入char型数据a.*(char far

逆向知识十三讲,汇编中数组的表现形式,以及还原数组

逆向知识十三讲,汇编中数组的表现形式,以及还原数组 讲解数组之前,要了解数组的特性 1.数据具有连续性 2.数据类型相同 比如: int Ary[3] = {0,1,2}; 我们可以看出,上面定义的数组,数据是连续的,其中每个数据类型大小都是int类型(类型也是一样的) 汇编中识别数组: 1.地址连续 2.带有比例因子寻址   (lea  reg32,[xxx  + 4 *xxxx]) 一丶一维数组在汇编中的表现形式 首先说下数组寻址公式,便于下面讲解 公式: 数组首地址 + sizeof(ty

64位汇编第二讲——64位汇编中局部变量使用及抬栈方法29171230

一.纯写64位汇编时局部变量处理和参数寄存器保存位置 纯写64位汇编和用VS2013写64位C代码生成的汇编会有一些格式上的区别,VS2013写64位C代码生成的汇编中是没用到栈基址寄存器rbp的,但是纯写汇编时只要申明了参数和使用了@LOCAL定义的局部变量,就会用到rbp.且看如下例子:1)用C写64位程序空函数生成的汇编代码, ;C代码 void FunTest2() { } ;汇编代码 000000013F753290 40 57 push rdi 000000013F753292 5F

逆向知识第九讲,switch case语句在汇编中表达的方式

一丶Switch Case语句在汇编中的第一种表达方式 (引导性跳转表) 第一种表达方式生成条件: case 个数偏少,那么汇编中将会生成引导性的跳转表,会做出 if else的情况(类似,但还是能分辨出来的) 1.高级代码: #include "stdafx.h" int main(int argc, char* argv[]) { switch(argc) { case 0: printf("case 0\n"); break; case 1: printf(&

MySql中的字符数据类型

MySql中的varchar类型 1.varchar类型的变化 MySQL数据库的varchar类型在4.1以下的版本中的最大长度限制为255,其数据范围可以是0~255或1~255根据不同版本数据库来定.在MySQL5.0以上的版本中,varchar数据类型的长度支持到了65535,也就是说可 以存放65532个字节的数据, 起始位和结束位占去了3个字节,也就是说,在4.1或以下版本中需要使用固定的TEXT或BLOB格式存放的数据可以使用可变长的varchar来存放,这样就能有效的减少数据库文

汇编中Enter与Leave指令

Enter的作用相当==push ebp和mov ebp,esp 这后面两句大家很熟悉吧?函数开始一般都是这两句 Leave的作用相当==mov esp,ebp和pop ebp 而这后面这两句也很常见,函数调用完后一般的用到 以上的Enter和leave的作用分别函数开始和结束 Win32汇编中局部变量的使用方法可以解释一个很有趣的现象:在DOS汇编的时候,如果在子程序中的push指令和pop指令不配对,那么返回的时候ret指令从堆栈里得到的肯定是错误的返回地址,程序也就死掉了.但在Win32汇

汇编中的跳转指令

能修改CS以及IP的指令都是转移指令.它分为段内转移,段间转移. 段内转移:只修改IP的值 段间转移:同时修改CS以及IP的值 段内转移根据转移的距离远近分为:短转移,近转移 短转移:转移范围为-128 – 127 近转移:转移范围为-32768 –32767 根据转移情况又分为: 无条件转移指令 条件转移指令 循环指令 过程 中断 <1> jmp short xxx(行号) 这个是短转移指令,实现段内的转移,在翻译成机器码的时候,码内并没有目标地址,有的只是转移位移,这样做的好处就是防止目标

结合手机上网流量业务来说明Hadoop中的自定义数据类型(序列化、反序列化机制)

大家都知道,Hadoop中为Key的数据类型必须实现WritableComparable接口,而Value的数据类型只需要实现Writable接口即可:能做Key的一定可以做Value,能做Value的未必能做Key.但是具体应该怎么应用呢?--本篇文章将结合手机上网流量业务进行分析. 先介绍一下业务场景:统计每个用户的上行流量和,下行流量和,以及总流量和. 本次描述所用数据: 日志格式描述: 日志flowdata.txt中的具体数据: 接下来贴出详细代码,代码中含有详细注释,从代码中可以看出,

boost中自动确定数据类型(BOOST_TYPEOF和BOOST_AUTO)的使用

#include<boost/typeof/typeof.hpp> #include<vector> #include<iostream> #include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP() //为了注册新的数据类型 using namespace std; namespace ex{ //定义新的数据类型 struct demo_class { int a,b; }; BOOST_TYPEOF_REGISTER_T