日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

初学 Delphi 嵌入汇编[29] - 寄存器所能接受的数值范围

發(fā)布時(shí)間:2025/3/8 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 初学 Delphi 嵌入汇编[29] - 寄存器所能接受的数值范围 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
譬如 EAX AX AH AL 四個(gè)儲(chǔ)存器, 真實(shí)存在的其實(shí)只有一個(gè) EAX, AX AH AL 不過(guò)是不同的訪問(wèn)方式.
11111111 11111111 11111111 11111111 : EAX
11111111 11111111 11111111 11111111 : AX
11111111 11111111 11111111 11111111 : AH
11111111 11111111 11111111 11111111 : AL

//譬如 AX 是一個(gè)16位2字節(jié)儲(chǔ)存器, 它能接受的最大整數(shù)是 65535 {下面函數(shù)會(huì)返回 65535} function Fun: Integer; asmmov ax, 65535 {給 AX 賦值就是給 EAX 賦值} end;{下面函數(shù)會(huì)出錯(cuò)} function Fun: Integer; asmmov ax, 65536 {超出了 AX 的容量} end;//同樣給 AL AH 賦值不能超過(guò) 255 {下面函數(shù)會(huì)返回 255} function Fun: Integer; asmmov al, 255 end;{下面函數(shù)會(huì)返回 65280} function Fun: Integer; asmmov ah, 255 end;{為什么不是 255? 因?yàn)榻o AH 賦值 255 后, EAX 中的值是 00000000 00000000 11111111 000000002}//上面演示的是通過(guò)立即數(shù)(常量)賦值, 通過(guò)變量也是如此; 但在其他運(yùn)算中會(huì)不會(huì)溢出是 CPU 之前不會(huì)知道的, 譬如: {下面的函數(shù)不會(huì)出錯(cuò), 但返回的是 0 } function Fun: Integer; asmmov eax, 4294967295 {這是 eax 所能接受的最大整數(shù)}add eax, 1 {再 +1 就放不下了} end;{因?yàn)榻Y(jié)果會(huì)是: 1 00000000 00000000 00000000 000000002; EAX 只能放下32位, 前面的一位就被忽略了.}//如果 AX 溢出, EAX 會(huì)不會(huì)接著? {下面的函數(shù)也會(huì)返回 0 , 看來(lái)不會(huì)進(jìn)位到 EAX; AX 雖然是 EAX 的一部分, 但使用時(shí)也是相對(duì)獨(dú)立的} function Fun: Integer; asmmov ax, 65535add ax, 1 end;//AH AL 也是如此 {返回 0} function Fun: Integer; asmmov al, 255add al, 1 end;//對(duì)于負(fù)數(shù)呢?{下面函數(shù)不會(huì)有問(wèn)題, 返回 -1 } function Fun: Integer; asmmov eax, -1 end;{它們能接受的最小負(fù)整數(shù)分別是: } function Fun: Integer; asmmov al, -256mov ah, -256mov ax, -63356mov eax, -4294967296 end; {再小于這個(gè)數(shù)字就會(huì)報(bào)錯(cuò)! }//但它們的返回值缺不能所愿, 譬如: {下面函數(shù)會(huì)返回 0 } function Fun: Integer; asmmov eax, -4294967296 end;{這個(gè)好理解, 函數(shù)的返回值是 Integer; Integer 的最小值是 -2147483648; 怎么可能放得下 -4294967296? 又被忽略了.}//其他情況也大概如此, 現(xiàn)在給 AX 一個(gè)絕對(duì)放得下的一個(gè)值: -1 {竟然返回一個(gè)正數(shù): 65535, 為什么?} function Fun: Integer; asmmov ax, -1 end;{因?yàn)?-1 在 AX 中被存為: 11111111 111111112;這樣 EAX 的值是: 00000000 00000000 11111111 111111112;EAX 的最高位只有是 1 才有可能是個(gè)負(fù)數(shù), 現(xiàn)在 EAX 中的值就是: 65535 }//下面兩個(gè)函數(shù)也是同樣的道理:{返回 255} function Fun: Integer; asmmov al, -1 end;{返回 65280} function Fun: Integer; asmmov ah, -1 end;//其他允許單獨(dú)訪問(wèn)低16位和低8位的32位寄存器, 情況肯定也是如此.

總結(jié)

以上是生活随笔為你收集整理的初学 Delphi 嵌入汇编[29] - 寄存器所能接受的数值范围的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。