(譯)win32asm教程-7 (轉)
8.0關於數的一些事情:namespace prefix = o ns = "urn:schemas--com::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用於負值。對於d值,它也一樣: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大。
只要記住這點:
一個數字是有符號還是無符號取決於你怎樣對待這個數。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-1004741/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- (譯)win32asm教程-9 (轉)Win32ASM
- (譯)win32asm教程-8 (轉)Win32ASM
- (譯)win32asm教程-10 (轉)Win32ASM
- (譯)win32asm教程-11 (轉)Win32ASM
- (譯)win32asm教程-5 (轉)Win32ASM
- (譯)win32asm教程-6 (轉)Win32ASM
- (譯)win32asm教程-12-完結 (轉)Win32ASM
- (譯)win32asm例項-1 (轉)Win32ASM
- (譯)win32asm例項-3 (轉)Win32ASM
- Iczelion 的 Win32Asm VxD 彙編教程 (二) (轉)Win32ASM
- Iczelion 的 Win32Asm VxD 彙編教程 (四) (轉)Win32ASM
- Iczelion 的 Win32Asm VxD 彙編教程 (三) (轉)Win32ASM
- Iczelion 的 Win32Asm VxD 彙編教程 (七) (轉)Win32ASM
- Iczelion 的 Win32Asm VxD 彙編教程 (六) (轉)Win32ASM
- Iczelion 的 Win32Asm VxD 彙編教程 (八) (轉)Win32ASM
- Iczelion 的 Win32Asm VxD 彙編教程 (一) (轉)Win32ASM
- Iczelion 的 Win32Asm VxD 彙編教程 (五) (轉)Win32ASM
- win32asm原理 (轉)Win32ASM
- Win32Asm 教程,來自易語言俱樂部論壇,譯者taowen。 (5千字)Win32ASM
- Win32ASM經驗點滴 (轉)Win32ASM
- Centos7編譯安裝Apache教程。CentOS編譯Apache
- Centos7編譯安裝Memcached教程。CentOS編譯
- Centos7編譯安裝Docker教程。CentOS編譯Docker
- Cnetos7編譯安裝PHP教程。編譯PHP
- Cnetos7編譯安裝MySQL教程。編譯MySql
- Cnetos7編譯安裝Nginx教程。編譯Nginx
- Centos7編譯安裝Tomcat教程。CentOS編譯Tomcat
- Java Servlet和JSP教程(7)(轉)JavaServletJS
- Centos7編譯安裝kafka-manager教程CentOS編譯Kafka
- Cnetos7編譯安裝phpMyAdmin教程。編譯PHP
- Centos7編譯安裝Pure-Ftpd教程。CentOS編譯FTP
- Centos7編譯安裝Redis 6.2.3 詳細教程CentOS編譯Redis
- VC++/MFC 教程6&7(英文) (轉)C++
- NeHe的opengl教程delphi版(7)----濾波 (轉)
- rfc1945-http1.0自譯本-(7) (轉)HTTP
- CentOS7編譯安裝php7.1配置教程詳解CentOS編譯PHP
- centos7 編譯安裝mysql 5.7.28圖文詳細教程CentOS編譯MySql
- 遊戲製作相關---HAM教程翻譯本(五)(轉)遊戲