dword负数 dword - 电脑|办公 - 电脑办公-杀毒安全-网络-V3学习网
微商网
 
 
导航:首页 |电脑|办公|正文

dword负数 dword

时间:2020-06-25 14:35:57
filldword 如何赋值负数 pascal位运算简介及实用技巧(一):基础篇 什么是位运算? 程序中的所有数在计算机内存中都是以二进制的形式储存的。位运算说穿了,就是直接对整数在内存中的二进制位进
作者:

dword负数

filldword 如何赋值负数 pascal

位运算简介及实用技巧(一):基础篇 什么是位运算? 程序中的所有数在计算机内存中都是以二进制的形式储存的。

位运算说穿了,就是直接对整数在内存中的二进制位进行操作。

比如,and运算本来是一个逻辑运算符,但整数与整数之间也可以进行and运算。

举个例子,6的二进制是110,11的二进制是1011,那么6 and 11的结果就是2,它是二进制对应位进行逻辑运算的结果(0表示False,1表示True,空位都当0处理): 110 AND 1011 --------------- 0010 --> 2 由于位运算直接对内存数据进行操作,不需要转成十进制,因此处理速度非常快。

当然有人会说,这个快了有什么用,计算6 and 11没有什么实际意义啊。

这一系列的文章就将告诉你,位运算到底可以干什么,有些什么经典应用,以及如何用位运算优化你的程序。

Pascal和C中的位运算符号 下面的a和b都是整数类型,则: C语言 | Pascal语言 -------+------------- a & b | a and b a | b | a or b a ^ b | a xor b ~a | not a a a >> b | a shr b 注意C中的逻辑运算和位运算符号是不同的。

520|1314=1834,但520||1314=1,因为逻辑运算时520和1314都相当于True。

同样的,!a和~a也是有区别的。

各种位运算的使用 === 1. and运算 === and运算通常用于二进制取位操作,例如一个数 and 1的结果就是取二进制的最末位。

这可以用来判断一个整数的奇偶,二进制的最末位为0表示该数为偶数,最末位为1表示该数为奇数. === 2. or运算 === or运算通常用于二进制特定位上的无条件赋值,例如一个数or 1的结果就是把二进制最末位强行变成1。

如果需要把二进制最末位变成0,对这个数or 1之后再减一就可以了,其实际意义就是把这个数强行变成最接近的偶数。

=== 3. xor运算 === xor运算通常用于对二进制的特定一位进行取反操作,因为异或可以这样定义:0和1异或0都不变,异或1则取反。

xor运算的逆运算是它本身,也就是说两次异或同一个数最后结果不变,即(a xor b) xor b = a。

xor运算可以用于简单的加密,比如我想对我MM说1314520,但怕别人知道,于是双方约定拿我的生日19880516作为密钥。

1314520 xor 19880516 = 20665500,我就把20665500告诉MM。

MM再次计算20665500 xor 19880516的值,得到1314520,于是她就明白了我的企图。

下面我们看另外一个东西。

定义两个符号#和@(我怎么找不到那个圈里有个叉的字符),这两个符号互为逆运算,也就是说(x # y) @ y = x。

现在依次执行下面三条命令,结果是什么? x y x 执行了第一句后x变成了x # y。

那么第二句实质就是y 加法和减法互为逆运算,并且加法满足交换律。

把#换成+,把@换成-,我们可以写出一个不需要临时变量的swap过程(Pascal)。

procedure swap(var a,b:longint); begin a:=a + b; b:=a - b; a:=a - b; end; 好了,刚才不是说xor的逆运算是它本身吗?于是我们就有了一个看起来非常诡异的swap过程: procedure swap(var a,b:longint); begin a:=a xor b; b:=a xor b; a:=a xor b; end; === 4. not运算 === not运算的定义是把内存中的0和1全部取反。

使用not运算时要格外小心,你需要注意整数类型有没有符号。

如果not的对象是无符号整数(不能表示负数),那么得到的值就是它与该类型上界的差,因为无符号类型的数是用00到$FFFF依次表示的。

下面的两个程序(仅语言不同)均返回65435。

var a:word; begin a:=100; a:=not a; writeln(a); end. #include int main() { unsigned short a=100; a = ~a; printf( "%d\n", a ); return 0; } 如果not的对象是有符号的整数,情况就不一样了,稍后我们会在“整数类型的储存”小节中提到。

=== 5. shl运算 === a shl b就表示把a转为二进制后左移b位(在后面添b个0)。

例如100的二进制为1100100,而110010000转成十进制是400,那么100 shl 2 = 400。

可以看出,a shl b的值实际上就是a乘以2的b次方,因为在二进制数后添一个0就相当于该数乘以2。

通常认为a shl 1比a * 2更快,因为前者是更底层一些的操作。

因此程序中乘以2的操作请尽量用左移一位来代替。

定义一些常量可能会用到shl运算。

你可以方便地用1 shl 16 - 1来表示65535。

很多算法和数据结构要求数据规模必须是2的幂,此时可以用shl来定义Max_N等常量。

=== 6. shr运算 === 和shl相似,a shr b表示二进制右移b位(去掉末b位),相当于a除以2的b次方(取整)。

我们也经常用shr 1来代替div 2,比如二分查找、堆的插入操作等等。

想办法用shr代替除法运算可以使程序效率大大提高。

最大公约数的二进制算法用除以2操作来代替慢得出奇的mod运算,效率可以提高60%。

位运算的简单应用 有时我们的程序需要一个规模不大的Hash表来记录状态。

比如,做数独时我们需要27个Hash表来统计每一行、每一列和每一个小九宫格里已经有哪些数了。

此时,我们可以用27个小于2^9的整数进行记录。

例如,一个只填了2和5的小九宫格就用数字18表示(二进制为000010010),而某一行的状态为511则表示这一行已经填满。

需要改变状态时我们不需要把这个数转成二进制修改后再转回去,而是直接进行位操作。

在搜索时,把状态表示成整数可以更好地进行判重等操作。

这道题是...

安卓游戏杀手2

您好,安卓杀手2这款游戏是可以用八门神器改的,必须要root。

网上有人说中文版的改不了只能改英文版的,那是错误的。

现在时间是2013年8月31日17:00:55,我现在在360手机助手上下载了这款游戏,是中文的。

八门神器可以有两种方法修改,本人刚刚亲自试过。

方法一(用来修改金币):打开游戏进入商店,点击精装组合,里面会有打折的道具卖,然后你心里选择一个道具包,比如枪手包,折后价钱是550金币(以后不知道是不是这个价格,但现在是,反正你明白修改的程序就行了),记住这个数字。

然后最小化打开八门神器,输入550,搜索模式DWORD。

然后你就会有大概50到80个数据。

我说明一下问什么要用打折的道具包,因为这样的数字在搜索的时候容易找到,不会出现上百个数据。

此时如果你的八门神器是注册过的,那么就选择数据控制,把全部数据修改成负的9999999,也就是-9999999.然后你会发现你想买的道具的价钱仍然是550金币,没事,你不用管它,直接点购买,然后你就发现你的金币变成999999999了,而且道具也到手了,现在就修改完成。

若没注册过,就比较麻烦,你就一个一个的修改吧,我也是这样过来的,也不用几分钟的。

然后购买,记得改成负数,你的金币就变成9999999了,修改完成。

给个提示,我发现真正的数据一般是在最后20-30个之中,建议从后往前依次改。

每改20个就购买试试,这样省时间。

方法二(这方法有条件,就是你首先必须要有金币,哪怕就是只有1金币也行):进入游戏进入商店,选择狙击武器,记住金钱豹CM-7狙击弩的价格,之所以选择它因为它的威力最大,搜索数据的数量也最小。

然后最小化打开八门神器,输入它的价格,搜索,你将会有50-80个数据,全部改成1,然后你只用一金币就能买到了。

其实方法一和二都是一样的,只不过用方法二买了武器之后不会拥有很多金币,这样游戏才不失去乐趣。

纯手工,望采纳,网友们修改成功后记得赞一个!!谢谢。

.ini文件介绍

INI 文件的操作 -------------------------------------------------------------------------------- 概述 在程序中经常要用到设置或者其他少量数据的存盘,以便程序在下一次执行的时候可以使用,比如说保存本次程序执行时窗口的位置、大小、一些用户设置的数据等等,在 Dos 下编程的时候,我们一般自己产生一个文件,由自己把这些数据写到文件中,然后在下一次执行的时候再读出来使用。

在 Win32 编程中当然你也可以这样干,但 Windows 已经为我们提供了两种方便的办法,那就是使用注册表或者 ini 文件(Profile)来保存少量数据。

本文中先介绍一下 .ini 文件的使用。

ini 文件是文本文件,中间的数据格式一般为: [Section1 Name] KeyName1=value1 KeyName2=value2 ... [Section2 Name] KeyName1=value1 KeyName2=value2 ini 文件可以分为几个 Section,每个 Section 的名称用 [] 括起来,在一个 Section 中,可以有很多的 Key,每一个 Key 可以有一个值并占用一行,格式是 Key=value,Win32 对 ini 文件操作的 api 中,有一部分是对 win.ini 操作的,有一部分是对用户自定义的 ini 文件操作的。

Win.in 和 system.ini 是Windows的两个非常重要的初始化文件,Windows将用户所作的选择以及各种变化的系统信息记录在这两个文件中。

System.ini 描述了系统硬件的当前状态,Win.ini 文件则包含了Windows 系统运行环境的当前配置。

由于 Win.ini 文件的重要性和常用性,Win32 中有专门对 Win.ini 进行操作的 api,它们是: GetProfileInt - 从 Win.ini 文件的某个 Section 取得一个 key 的整数值,它的原形是: GetProfileInt( LPCTSTR lpAppName, // 指向包含 Section 名称的字符串地址 LPCTSTR lpKeyName, // 指向包含 Key 名称的字符串地址 INT nDefault // 如果 Key 值没有找到,则返回缺省的值是多少 ); 如果 Key 值没有找到的话,返回值是 nDefault 指定的缺省值,如果 Key 中的值是负数,则返回 0,如果 Key 指定的是数字和字符串的混合,则返回数字部分的值,比如说 x=1234abcd,则返回 1234 GetProfileString - 从 Win.ini 文件的某个 Section 取得一个 key 的字符串,它的原形是: GetProfileString( LPCTSTR lpAppName, // 指向包含 Section 名称的字符串地址 LPCTSTR lpKeyName, // 指向包含 Key 名称的字符串地址 LPCTSTR lpDefault, // 如果 Key 值没有找到,则返回缺省的字符串的地址 LPTSTR lpReturnedString, // 返回字符串的缓冲区地址 DWORD nSize // 缓冲区的长度 ); 返回的字符串在缓冲区内,返回的 eax 值是返回的字符串的长度(不包括尾部的0) GetProfileSection - 从 Win.ini 文件中读出整个 Section 的内容,它的原形是: GetProfileSection( LPCTSTR lpAppName, // 指向包含 Section 名称的字符串地址 LPTSTR lpReturnedString, // 返回数据的缓冲区地址 DWORD nSize // 返回数据的缓冲区长度 ); WriteProfileSection - 将一个整个 Section 的值 写入 Win.ini 文件的指定 Section 中,它的原形是: WriteProfileSection( LPCTSTR lpAppName, // 指向包含 Section 名称的字符串地址 LPCTSTR lpString // 要写入的数据的地址 ); 如果 Win.ini 没有指定的 Section,API 会新建立一个并写入数据,如果已经存在,则先删除原来 Seciton 中所有的 Key 值然后写入新的。

WriteProfileString - 将一个 Key 值写入 Win.ini 文件的指定 Section 中,它的原形是: WriteProfileString( LPCTSTR lpAppName, // 指向包含 Section 名称的字符串地址 LPCTSTR lpKeyName, // 指向包含 Key 名称的字符串地址 LPCTSTR lpString // 要写的字符串地址 ); 如果 Win.ini 没有指定的 Section,API 会新建 Section,如果没有指定的 Key 则新建一个 Key 并写入数据,如果已经存在,则用字符串代替原来的值。

以上的 Api 是对 Win.ini 操作的,当然对于我们来说,用的更多的是在程序运行的目录中建立自己的 ini 文件,如果需要对自己的 ini 文件操作,就要用到另一组 Api,这一组 api 和上面的很象,只要把上面一组的 Profile 换成 PrivateProfile(私有的)就可以了,参数中也相应的多了一个 ini 文件名的参数。

例如 GetPrivateProfileInt、GetPrivateProfileSection、WritePrivateProfileString 等等, 下面分别介绍: GetPrivateProfileInt - 从 ini 文件的某个 Section 取得一个 key 的整数值,它的原形是: GetPrivateProfileInt( LPCTSTR lpAppName, // 指向包含 Section 名称的字符串地址 LPCTSTR lpKeyName, // 指向包含 Key 名称的字符串地址 INT nDefault // 如果 Key 值没有找到,则返回缺省的值是多少 LPCTSTR lpFileName // ini 文件的文件名 ); 中间参数和返回值的定义和 GetProfileInt 是一样的。

GetPrivateProfileString - 从 ini 文件的某个 Section 取得一个 key 的字符串,它的原形是: GetPrivateProfileString( LPCTSTR lpAppName, // 指向包含 Section 名称的字符串地址 LPCTSTR lpKeyName, // 指向包含 Key 名称的字符串地址 LPCTSTR lpDefault, // 如果 Key 值没有找到,则返回缺省的字符串的地址 LPTSTR lpReturnedString, // 返回字符串的缓冲区地址 DWORD nSize // 缓冲区的长度 LPCTSTR ...

glu的职业杀手2 怎么用八门神器修改金币 金币的地址是什么

修改美金(绿色钞票):1,进入职业杀手2,搜索1500,数据类型选择 DWORD大概会搜到70多个结果2,找到4开头,F94结尾的地址4XXXXF943,把这个地址的数据修改成负数负一千万还是负一亿随便4,进入商店,选择 “装备”,可以看到 “闪光弹 3 - 包” 的价格变成了负值OK,买吧,越买钱越多————————————————————————————————修改GLU金币:1,进入游戏,搜索1100,大概会搜到50个结果2,找到4开头,824结尾的地址4XXXX8243,把这个地址的数值改成负数4,进入商店,选择 “精选包”,买 “终极包” 吧这个不管用的话 就把开头的4 换成6开头的就是了

西门子PLC数据类型

bool 布尔量 就是开关量 只有 0,1byte 字节word 字 16位整数dword 双字 32位整数int 带符号16位整数dint 带符号32位整数real 浮点数 实数 32位适配器 就是plc 和电脑的 连接线 例如 MPI电缆 以s7300为例:S7-300的数据类型分以下三种:基本数据类型、复合数据类型和参数类型。

一、基本数据类型 1、位(bit) 常称为BOOL(布尔型),只有两个值:0或1。

如:I0.0,Q0.1,M0.0,V0.1等。

2、字节(Byte) 一个字节(Byte)等于8位(Bit),其中0位为最低位,7位为最高位。

如:IB0(包括I0.0~I0.7位),QB0(包括Q0.0~Q0.7位),MB0,VB0等。

范围:00~FF(十进制的0~255)。

3、字(Word) 相邻的两字节(Byte)组成一个字(Word),来表示一个无符号数,因此,字为16位。

如:IW0是由IB0和IB1组成的,其中I是区域标识符,W表示字,0是字的起始字节。

需要注意的是,字的起始字节(如上例中的“0”)都必须是偶数。

字的范围为十六进制的0000~FFFF(即十进制的0~65536)。

在编程时要注意,如果已经用了IW0,如再用IB0或IB1要特别加以小心。

4、双字(Double Word) 相邻的两个字(Word)组成一个双字,来表示一个无符号数。

因此,双字为32位。

如:MD100是由MW100和MW102组成的,其中M是区域标识符,D表示双字,100是双字的起始字节。

需要注意的是,双字的起始字节(如上例中的“100”)和字一样,必须是偶数。

双字的范围为十六进制的0000~FFFFFFFF(即十进制的0~4294967295)。

在编程时要注意,如果已经用了MD100,如再用MW100或MW102要特别加以小心。

以上的字节、字和双字数据类型均为无符号数,即只有正数,没有负数。

5、16位整数(INT,Integer) 整数为有符号数,最高位为符号位,1表示负数,0表示正数。

范围为-32768~32767。

6、32位整数(DINT,Double Integer) 32位整数和16位整数一样,为有符号数,最高位为符号位,1表示负数,0表示正数。

范围为-2147483648~2147483647。

7、浮点数(R,Real) 浮点数为32位,可以用来表示小数。

浮点数可以为:1.m*2e,其存储结构如图所示: 8、常数的表示方法 常数可以是字节、字或双字,CPU以二进制方式存储,也可以用十进制,十六进制ASCII码或浮点数形式来表示。

如下图所示: 说明:(1)S5T#格式为:S5T#aD_bH_cM_dS_eMS,其中a,b,c,d,e分别是日,小时,分,秒和毫秒的数值,输入时可以省掉下划线,如表中所示。

(2)D#取值范围为:D#1990_1_1~D#2168_12_31。

二、复合数据类型 用户通过复合基本数据类型而生成就是复合数据类型。

复合数据类型包括以下几种: 1、数组(ARRAY) 将一组同一类型的数据组合在一起组成一个单位就是数组。

2、结构(STRUCT) 将一组同不同类型的数据组合在一起组成一个单位就是结构。

3、字符串(STRING) 字符串是由最多254个字符组成的一维数组。

4、日期和时间(DATE-AND-TIME) 用于存储年、月、日、时、分、秒、毫秒和星期的数据。

占用8个字节,BCD编码。

星期天代码为1,星期一~星期六代码分别是2~7。

如:DT#2004_07_15_12:30:15.200为2004年7月15日12时30分15.2秒。

5、用户定义的数据类型(UDT,User-Defined Data Types) 由用户将基本数据类型和复合数据类型组合在一起形成的数据类型。

可以在数据块DB和变量声明表中定义复合数据类型。

三、参数类型 是为在逻辑块之间传递参数的形参(Formal Parameter,形式参数)定义的数据类型。

有符号和无符号的区别是什么?

有符号和无符号的区别是一个有符号位,另一个没有符号位. 没有符号位的数字只能有0和正值,有符号位的数字可以有正零,负零和正数负数.数值覆盖范围取决于字长和数的表达方式.有符号或者没符号取决于对变量的声明.例如:int a; short int b; long int c;float d; double e;// a,b,c,d,e 是有符号数unsigned char f[10];unsigned int g;WORD gg; DWORD h;// f,g,gg,h 是无符号数...

怎么精确控制数值把门放进去。

看不懂怎么设置那个动态数值

精确搜索 - 是按照数据的确切数值进行搜索的方式,如数值是50,就搜索50。

该搜索方式可以用较快的速度定位数据所在的内存地址。

但是要求输入的数值就是被搜索对象在内存中的实际数值。

需要注意的是,通常情况下,游戏所显示的数值就是实际数值,但有一部分游戏显示的数值并不是真实数值,如Miss Driller显示的分值,真实值是显示值的1/10。

模糊搜索 - 是在不知道确切的数值时,对数值变化状态进行搜索的方式。

模糊搜索支持对三种状态的搜索:变小了、无变化、变大了。

该搜索方式并不能很快定位数据所在的内存地址,可能需要数倍于精确搜索的次数。

不过,合理对“无变化”状态进行搜索,可以提高搜索的速度。

注意:模糊搜索会把数据缓存到E盘或C盘,因此搜索过程会比精确搜索慢。

修改方法:以 精确搜索 为例:1. 启动八门神器按返回让程序运行于后台;2. 运行游戏;3. 记录下游戏的某项数据,假设这里要搜索的是HP,并假设此时HP为1004. 按下热键切换到八门神器 ;5. 通过Options菜单选择精确搜索 ;6. 输入数值,并确认 ,此时会有搜索结果显示;7. 按返回回到原来的游戏;8. 当HP发生变化时,重复4 ~ 7的操作9. 当在第6步中,搜索到的地址只有一个或很少几个时,就可以尝试着修改数值了。

模糊搜索与此类似,只不过是按照数值大小的变化来搜索罢了。

不同的数据类型在内存中占用的字节数是不一样的,因此有不同的数值范围。

DWORD :四个字节 -2147483648 ~ 2147483647WORD :两个字节 -32768 ~ 32767BYTE :一个字节 -128 ~ 127通常情况下,使用默认的DWORD型就可以对大部分数据进行正确搜索,不过仍然有部分数据需要选用较小的数据类型。

若数值可以超过65535,必须用DWORD,如果数值可以超过255,就应该选择DWORD或WORD,而绝不可能是BYTE型。

注意:原则上,本程序使用有符号数对数据进行搜索。

利用热键可以在游戏状态下切换到八门神器,软件也由此确定需要对那个程序的数据进行修改。

请将热键设置为你的手机支持的按键。

自动删除负数可有效去除大量无意义的数据。

该功能可以设置为开启或关闭,但重新启动程序时仍然为开启。

建议开启。

存储与锁 都功能可以将搜索到的数据临时保存起来,在清空列表时,被存储与锁定的数据都不会被删除。

存储与锁定的差别:只有锁定功能可以每0.5秒周期性的写入指定的数值到被锁定的数据里,对高难度的动作游戏的血进行锁定,会起到不死的效果。

其他本修改器不能保证可以修改任何游戏,也不保证修改不造成任何问题,由于使用本软件带来的一切风险需自己承担。

?注意,本软件也不局限于对游戏的修改,其他软件也可能被修改的。

mov ah,10怎么在内存中输入的数是多少进制的

怎么那么巧,我刚刚帮人写个这样的程序,还一模一样的,呵呵,也送给你吧;功能:从键盘输入10个字型整数(输入过程要求显示),求出其中最大的数。

将其以十进制(或16进制)形式显示在屏;可以输入负数,帮你扩展了下,可以输入的不止十个数字,多少个都可以 ASSUME CS:CODE,DS:DATA,SS:STACK DATA SEGMENT MESSAGE DB "You input numbers are: ","$" MESSAGE0 DB "===================================================================",0DH,0AH,"$" MESSAGE1 DB "^_^Please input the numbers ,I am waiting for you ! ^_^",0DH,0AH,"$" MESSAGE2 DB 0DH,0AH,"The maximum number is: ","$" ERROR_STR DB 0DH,0AH,"Input error!",0DH,0AH,"$" DAT_A DB 100 ;存放原始数据 DB ? DB 100 DUP(?) DAT_B DW 100 DUP(?) ;用来存放将输入的ASCII码转换成2进制数以便比较获得最大值 DAT_C DB 30 DUP("$") ;保存最大数 DATA ENDS STACK SEGMENT STA DB 100 DUP(?) STACK ENDS CODE SEGMENT START: MOV AX,DATA MOV DS,AX MOV AX,STACK MOV SS,AX MOV SP,100;输出提示信息,含有修饰部分--------------------------------- LEA DX,MESSAGE0 MOV AH,09H INT 21H LEA DX,MESSAGE1 MOV AH,09H INT 21H LEA DX,MESSAGE0 MOV AH,09H INT 21H LEA DX,MESSAGE MOV AH,09H INT 21H;输入数据------------------------------------------------- LEA DX,DAT_A MOV AH,0AH INT 21H;计算一共有多少个数----------------------------------------- MOV AL,0 L2: LEA SI,DAT_A L4: MOV DL,BYTE PTR DS:[SI+2] CMP DL,0DH JZ L3 CMP DL," " JZ L5 JMP L6 L5: INC AL L6: INC SI JMP L4 L3: INC AL CBW ;AL扩展到AX MOV DAT_B,AX;ASCII转换为十进制数------------------------------------------ LEA DX,DS:[DAT_A+2] ;从DX指向的单元读入 MOV CX,DAT_B LEA BX,DAT_B ADD BX,2 L7: CALL ASCTDEC ;调用ASCII码转换成十进制数 MOV [BX],AX ADD BX,2 ADD DX,SI LOOP L7 ;找出最大的数------------------------------------------------ LEA SI,DAT_B MOV CX,DS:[SI] ;循环的次数 ADD SI,2 MOV AX,DS:[SI] S: CMP AX,DS:[SI] JL OUT1 ADD SI,2 LOOP S JMP OUT2 OUT1: MOV AX,DS:[SI] ADD SI,2 LOOP S;数字转换为ASCII码以便输出------------------------------ OUT2: LEA SI,DAT_C ;转换结果存放到DAT_C段中 MOV DI,0 ;统计字符个数 MOV DX,0 ;最大的数高16位DX,低16位AX,作为除数 PUSH AX TEST AX,8000H ;判断符号位 JZ L8 NEG AX ;取反 L8: PUSH AX PUSH DX ADD AX,DX ;判断商是否为0,为0停止循环 CMP AX,0 POP DX POP AX JZ L9 MOV CX,10 CALL DIVDW ;调用除法,分离各个数字 ADD CL,30H ;转换为ASCII MOV DS:[SI],CL ;把分离的数字存放好 INC SI INC DI JMP L8 L9: DEC SI POP AX TEST AX,8000H ;判断符号位 JZ L10 INC SI INC DI MOV BYTE PTR DS:[SI],"-" ;负数置负号;显示结果------------------------------------------------------ L10: LEA DX,MESSAGE2 MOV AH,09 INT 21H MOV CX,DI ;循环次数 L11: MOV DL,DS:[SI] MOV AH,02 INT 21H DEC SI LOOP L11 OVER: MOV AH,4CH INT 21H;----------------------------------------------------;参数: (AX)=DWORD型低16位数据; (DX)=DWORD型高16位数据; (CX)=除数;返回: (DX)=结果的高16位,(AX)=结果的低16位; (CX)=余数;32位除16位,可以防止溢出!DIVDW: ;子程序定义开始,功能是分离各个数字出来 PUSH AX MOV AX,DX MOV DX,0 DIV CX MOV BX,AX POP AX DIV CX MOV CX,DX MOV DX,BX RET ;子程序定义结束 ;ASCII转十进制数子程序----------------------------------------- ASCTDEC: PUSH BX PUSH CX PUSH DX MOV AX,0 ;存放转换结果 MOV SI,DX PUSH SI MOV DL,DS:[SI] CMP DL,"-" ;负数则CL置1,标志后面处理 JNE ASCTDEC_L0 MOV CL,1 INC SI MOV DL,DS:[SI] JMP ASCTDEC_L4 ASCTDEC_L0: CMP DL,"+" JNE ASCTDEC_L1 INC SI MOV DL,DS:[SI] ASCTDEC_L1: MOV CL,0 ;正数CL置0 ASCTDEC_L4: AND DL,0FH ;利用数字ASCII码与十进制的关系:ASCII低四位就是十进制数 MOV DH,0 ADD AX,DX INC SI MOV DL,DS:[SI] CMP DL,"0" JL ASCTDEC_L2 CMP DL,"9" JG ASCTDEC_L2 CALL MUL10 ;调用乘10的子程序 JMP ASCTDEC_L4 ASCTDEC_L2: CMP CL,1 JNE ASCTDEC_L3 NEG AX ASCTDEC_L3: POP DI SUB SI,DI ;计算移动位移量,方便返回时加上这个数便能指向下个要处理数 据 INC SI POP DX POP CX POP BX RET;乘10的子程序---------------------------------------------- MUL10: MOV BX,AX SHL AX,1 ;乘2 SHL AX,1 ;再乘2 ADD AX,BX ;加上原来的数,相当于乘以5 SHL AX,1 ;再来乘2,总共乘了10 RET CODE ENDS END START

怎么将4字节16进制转化成浮点数

四字节16进制数可转换为四个二进制字节(Bytes),从而使用Api函数来处理成单精度浮点数。

以下用VB代码处理。

VB有专门的API函数CopyMemory能处理2-10进制浮点数转换和10-2进制浮点数转换。

下列代码演示了10进制Single(单精度浮点型转为16进制字符显示的浮点数和其相反运算: Option Explicit Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long) Private Sub BinToSin_Click() Dim sinStr As String Dim sinSj As Single Dim Buffer(3) As Byte Dim i As Integer sinStr = Text2 For i = 1 To Len(Text2) Step 2 Buffer((7 - i) / 2) = Val("&H" & Mid(sinStr, i, 2)) Next CopyMemory ByVal VarPtr(sinSj), ByVal VarPtr(Buffer(0)), 4 Text3 = sinSj End Sub Private Sub SinToBin_Click() Dim i As Integer Dim hexData As String Dim a As Single Dim Buffer(3) As Byte a = Val(Text1) CopyMemory Buffer(0), a, 4 For i = 0 To 3 If Len(Hex(Buffer(i))) = 1 Then hexData = "0" & Hex(Buffer(i)) + hexData Else hexData = Hex(Buffer(i)) + hexData End If Next Text2 = hexData End Sub 需要注意的事项是这四字节的高低字节排序,不能搞错。

VB的Single 数据类型: Single(单精度浮点型)变量存储为 IEEE 32 位(4 个字节)浮点数值的形式,它的范围在负数的时候是从 -3.402823E38 到 -1.401298E-45,而在正数的时候是从 1.401298E-45 到 3.402823E38。

Single 的类型声明字符为感叹号 (!)。

在内存以32位二进制形式存在: XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX 第1位为符号位; 第2-9位为阶码位; 第10-32位为2进制小数尾值; 即F2 ^ n * 1. XXXXXXX XXXXXXXX XXXXXXXX; 其中,F为正号或负号(首为为0正数,首位为1负数; n为2-9位组成的BYTE数据值; XXXXXXX XXXXXXXX XXXXXXXX为尾数。

参考:http://blog.csdn.net/zdingyun/article/details/2528026

大家还关注
阅读排行
推荐阅读