符号扩充
符号扩充(又名符号扩展)是计算机算术中,在保留数字的符号(正负性)及数值的情况下,增加二进制数字位数的操作。此操作根据使用的特定有符號數處理方式,通过在数字的最高有效位端添加位数的方式完成。
举个例子,若计算机使用六位二进制数表示数字“00 1010
”(十进制的正10),且此数字需要将字长符号扩充至十六位,则扩充后的值为“0000 0000 0000 1010
”。此时,数值与符号均保留了下来。
若计算机使用十位数及二補數表示数字“11 1111 0001
”(十进制的负15),且此值需要扩充至十六位,则扩充后的值为“1111 1111 1111 0001
”。 此时,负号及原数字数值通过将左侧填充为1的方式保留了下来。
在英特尔的x86指令集中,符号扩充有两种方式:
- 使用指令cbw、cwd、cwde及cdq:分别将字节转化为字、字转化为双字、字转化为扩充双字、双字转化为四倍长字(x86环境中,一个字节为8位、一个字16位、双字与扩充双字均为32位、四倍长字64位);
- 使用符号扩展移动指令,可通过movsx(“带符号移动”)指令族完成。
零扩展编辑
零扩展是与符号扩展类似的概念。在移动操作或转换操作中,零扩展指的是将目标的高位数设置为零,而不是将高位数设置成原数字的最高有效位。零扩展通常用于将无符号数字移动至较大的字段中,同时保留其数值;而符号扩展通常用于有符号的数字。
在x86及x64指令集中,movzx
指令(“使用零扩展移动”)将执行零扩展移动。举个例子,movzx ebx, al
会复制al
中的一个字节至ebx
的低位字节,随后使用0填充ebx
的剩余字节。
在x64平台上,大多数写入通用寄存器的低32位的指令将使用0填充目标寄存器的上半部分。举个例子,指令mov eax, 1234
将清除rax
寄存器的上32位。
参考文献编辑
- Mano, Morris M.; Kime, Charles R. (2004). Logic and Computer Design Fundamentals (3rd ed.), pp 453. Pearson Prentice Hall. ISBN 0-13-140539-X.
🔥 Top keywords: Baike: 首页Special:搜索毛泽东家族榮耀之繼承者天之驕女鐵拳英雄九龍城寨之圍城黃循財背着善宰跑篠崎泫妮妃雅新生 (网络剧)劉偉健斯洛伐克习近平劉俊謙 (香港)李显龙歌手2024佛誕淚之女王2024年泰國羽球公開賽新加坡總理邊佑錫新加坡Energy (組合)庆余年九龍寨城六四事件家族榮耀金智媛彌助菲律宾胖猫跳江事件劉寶傑DAY6林峯張文傑李光耀神耆小子張鳳妮黃世聰Seventeen (組合)维基百科願榮光歸香港中華民國鬼滅之刃 柱訓練篇2024年英雄联盟季中邀请赛中华人民共和国TripleS金秀賢 (男演員)罗伯特·菲佐井柏然2024年世界女排联赛黃偉哲怪獸8號佘詩曼Foodpanda金惠奫新加坡总统香緹·摩爾于北辰 (1968年)王嘉爾笑看風雲排球少年!!角色列表林飛帆郭葦昀馴鹿寶貝翁靜晶猩球崛起:王國誕生ILLIT尼古拉·約基奇春色寄情人周殷廷鬼滅之刃排球少年!!吳釗燮逆天奇案2不夠善良的我們BABYMONSTER李正皓尚达曼BOYNEXTDOOR胡子彤IVE (組合)陳靜 (香港)香港吴作栋黃道十二宮凡希亚·奥伊亚胡宇威長洲太平清醮張員瑛搜查班長1958伍允龍习明泽黄岩岛賴清德偶然遇見的你虽然不是英雄