(译)win32asm教程-7

原创 2002年03月15日 09:01:00
 

8.0关于数的一些事情<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

在大多数的编程语言中使用整数还是浮点数只取决于变量的声明。在汇编语言中,完全的不同。浮点数的计算是由特别的伪代码和FPU协处理器(浮点单元)完成的。浮点指令将会在后面讨论。先来看看一些关于整数的事情。在c语言中有signed(有符号)整数和unsigned(无符号)整数。Signed是意为数有符号(+或-)。Unsigned总是正。找出下表中的不同(再一次的,这是一个byte的例子,它在其他大小时也同样工作)。

00

01

02

03

...

7F

80

...

FC

FD

FE

FF

无符号意义

00

01

02

03

...

7F

80

...

FC

FD

FE

FF

有符号意义

00

01

02

03

...

7F

-80

...

-04

-03

-02

-

因此,在有符号数中,一个byte被分为两段:0~7F用于正值。80~FF用于负值。对于dword值,它也一样:0~7FFFFFFFh为正,80000000~FFFFFFFFh为负,正如你可能已经注意到的一样,负值的最高位有一个集合,因为它们比80000000h大。这位被称为符号位。

3.  1有符号或无符号?

你和处理器都不能看出一个值是signed还是unsigned。好消息是对于加法和减法来说,一个数是signed还是unsigned没有关系。

计算:-4+9

FFFFFFFC+00000009=00000005(这是对的)

计算:5-(-9)

00000005-FFFFFFF7=0000000E(这也是对的,5――9=4)

坏消息是对于乘法,除法和比较(compare)并不是这样。因此,对于signed数有特殊的乘除伪代码:imul和idiv

Imul也有一个比mul好的地方在于它可以接受直接数值:

imul src
imul src, immed
imul dest,src, 8-bit immed
imul dest,src

idiv src

它们几乎和mul,div一样,只是它们可以计算signed值。比较(compare)可以和unsigned一样用。但标志作不同的设置。因此,对于符号和无符号数字有不同的jump指令:

cmp ax, bx
ja somewhere

ja是一个无符号跳转指令。如果大于就跳转。考虑这个ax=FFFFh(无符号时为FFFFh,有符号时为-1)和bx=0005h(无符号时为5,有符号时为5)。由于FFFFh在无符号时比0005大,ja指令会跳转,但如果用的是jg(指一个有符号跳转):

cmp ax, bx
jg somewhere

jg指令不会跳转,因为-1不比5大。

只要记住这点:

一个数字是有符号还是无符号取决于你怎样对待这个数。

Xcode7中添加预编译pch文件

为什么xcode6之后没有自动创建pch文件呢? 简单地看:我们在写项目的时候,大部分宏定义,头文件导入都在这里,Xcode6去掉Precompile Prefix Header的主要原因可能在于...
  • zhixinhuacom
  • zhixinhuacom
  • 2015年11月02日 00:00
  • 1798

Win32Asm 教程(一)

前一章 目录 后一章 1.0-介绍汇编语言 汇编语言是创造出来代替原始的只能由处理器理解的二进制代码的。很久以前,尚没 有任何高级语言,程序都是用汇编写的。汇编代码直接描述处理器可以执行的...
  • gemgin
  • gemgin
  • 2013年06月13日 14:32
  • 401

Win32Asm 教程(二)

前一章 目录 后一章 1.0-介绍汇编语言 汇编语言是创造出来代替原始的只能由处理器理解的二进制代码的。很久以前,尚没 有任何高级语言,程序都是用汇编写的。汇编代码直接描述处理器可以执行的...
  • gemgin
  • gemgin
  • 2013年06月13日 14:32
  • 463

Win32Asm教程(基础篇)

来源: http://www.dav1d.org  原作者:taowen  发布者:Sunlion [E.S.T] http://evilsun.126.com  一篇很不错的教程,本来是放在我...
  • s98
  • s98
  • 2013年05月06日 19:02
  • 726

驱动程序-字符驱动

参考http://www.kerneltravel.net/?p=334 一、编写内核文件chardev.c /*chardev.c*/ #include #include ...
  • gjq246
  • gjq246
  • 2016年06月30日 22:42
  • 470

Ubuntu 16.04安装星际译王

Ubuntu 16.04安装星际译王 1、sudo apt install stardict.安装星际译王IDE。 2、打开dash搜索星际译王,打开。但是默认现在你输入英文是无法翻译的,因为没有...
  • miaoqiucheng
  • miaoqiucheng
  • 2016年09月29日 14:48
  • 1458

Ubuntu 14.04 安装配置强大的星际译王(stardict)词典

from:http://blog.csdn.net/tecn14/article/details/25917149        平常总会遇到一些不认识的单词,汉字等等。一直使用Chrome 浏...
  • huyisu
  • huyisu
  • 2016年12月02日 19:11
  • 2220

星际译王StarDict

星际译王具有全文翻译、屏幕取词及单词朗读功能,支持本地和网络词典及模糊查找功能。   一  安装   sudo apt-get install stardict   二 词典         默认是不...
  • wskz876
  • wskz876
  • 2014年02月23日 09:01
  • 871

Ubuntu工具使用之星际译王词典

星际译王(StarDict)是利用GTK(GIMP TOOLKIT)开发的国际化的、跨平台的自由的桌面字典软件! 项目地址:星际译王 Goole 项目管理地址 1、效果 2、安装过程 3、配置 感谢以...
  • johnnycode
  • johnnycode
  • 2014年01月14日 06:02
  • 3419

Ubuntu好用的词典 星际译王 stardict安装 词典添加

Ubuntu系统默认没有安装Ubuntu星际译王,但Ubuntu系统的软件源中包含了该软件,我们可以使用apt-get命令或新立得软件包管理器来安装该软件。如果当前系统连接到互联网,我们用apt-ge...
  • sunflower_cao
  • sunflower_cao
  • 2014年10月09日 11:22
  • 2206
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:(译)win32asm教程-7
举报原因:
原因补充:

(最多只允许输入30个字)