




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第6章運(yùn)算方法和運(yùn)算部件作業(yè):習(xí)題3、4、5、6、7補(bǔ)充題目(復(fù)習(xí)第一章的內(nèi)容):考慮下列C語言程序代碼:inti=65535;shortsi=(short)i;intj=si;假定上述程序段在某32位機(jī)器上執(zhí)行,sizeof(int)=4,則變量i、si和j的值分別是多少?為什么?【分析解答】在一臺(tái)32位機(jī)器上執(zhí)行上述代碼段時(shí),i為32位補(bǔ)碼表示的定點(diǎn)整數(shù),第2行要求強(qiáng)行將一個(gè)32位帶符號數(shù)截?cái)酁?6位帶符號整數(shù),65535的32位補(bǔ)碼表示為0000FFFFH,截?cái)酁?6位后變成FFFFH,它是–1的16位補(bǔ)碼表示,因此si的值是–1。再將該16位帶符號整數(shù)擴(kuò)展為32位時(shí),就變成了FFFFFFFFH,它是–1的32位補(bǔ)碼表示,因此j的值也為–1。也就是說,i的值原來為65535,經(jīng)過截?cái)?、再擴(kuò)展后,其值變成了–1??紤]以下C語言程序代碼:intfunc1(unsignedword){ return(int)((word<<24)>>24);}intfunc2(unsignedword){ return((int)word<<24)>>24;}假設(shè)在一個(gè)32位機(jī)器上執(zhí)行這些函數(shù),sizeof(int)=4。說明函數(shù)func1和func2的功能,并填寫表6.2,給出對表中“異?!睌?shù)據(jù)的說明。表6.2題3用表Wfunc1(w)func2(w)機(jī)器數(shù)值機(jī)器數(shù)值機(jī)器數(shù)值127128255256【分析解答】函數(shù)func1的功能是把無符號數(shù)高24位清零(左移24位再邏輯右移24位),結(jié)果一定是正的帶符號整數(shù);而函數(shù)func2的功能是把無符號數(shù)的高24位都變成和第25位一樣,因?yàn)樽笠?4位后左邊第一位變?yōu)樵瓉淼牡?5位,然后進(jìn)行算術(shù)右移,高位補(bǔ)符號,即高24位都變成和原來第25位相同。根據(jù)程序執(zhí)行的結(jié)果填表如下表,表中機(jī)器數(shù)用十六進(jìn)制表示。題3中填入結(jié)果后的表Wfunc1(w)func2(w)機(jī)器數(shù)值機(jī)器數(shù)值機(jī)器數(shù)值0000007FH1270000007FH+1270000007FH+12700000080H12800000080H+128FFFFFF80H–128000000FFH255000000FFH+255FFFFFFFFH–100000100H25600000000H000000000H0因?yàn)檫壿嬜笠坪退阈g(shù)左移的結(jié)果完全相同,所以,函數(shù)func1和func2中第一步左移24位得到的結(jié)果完全相同,所不同的是右移24位后的結(jié)果不同。上述表中,加粗?jǐn)?shù)據(jù)是一些“異?!苯Y(jié)果。當(dāng)w=128和255時(shí),第25位正好是1,因此函數(shù)func2執(zhí)行的結(jié)果為一個(gè)負(fù)數(shù),出現(xiàn)了“異?!?。當(dāng)w=256時(shí),低8位為00,高24位為非0值,左移24位后使得有效數(shù)字被移出,因而發(fā)生了“溢出”,使得出現(xiàn)了“異?!苯Y(jié)果0?;径寄茏鰧Γ瑯O個(gè)別同學(xué)出錯(cuò)。填寫表6.3,注意對比無符號數(shù)和帶符號整數(shù)的乘法結(jié)果,以及截?cái)嗖僮髑啊⒑蟮慕Y(jié)果。表6.3題4用表模式xyx×y(截?cái)嗲埃﹛×y(截?cái)嗪螅C(jī)器數(shù)值機(jī)器數(shù)值機(jī)器數(shù)值機(jī)器數(shù)值無符號數(shù)110010二進(jìn)制補(bǔ)碼110010無符號數(shù)001111二進(jìn)制補(bǔ)碼001111無符號數(shù)111111二進(jìn)制補(bǔ)碼111111【分析解答】根據(jù)無符號數(shù)乘法運(yùn)算和補(bǔ)碼乘法運(yùn)算算法,填寫表6.3后得到下表。題4中填入結(jié)果后的表模式xyx×y(截?cái)嗲埃﹛×y(截?cái)嗪螅C(jī)器數(shù)值機(jī)器數(shù)值機(jī)器數(shù)值機(jī)器數(shù)值無符號數(shù)11060102001100121004二進(jìn)制補(bǔ)碼110–2010+2111100–4100–4無符號數(shù)0011111700011171117二進(jìn)制補(bǔ)碼001+1111–1111111–1111–1無符號數(shù)11171117110001490011二進(jìn)制補(bǔ)碼111–1111–1000001+1001+1對上表中結(jié)果分析如下:=1\*GB3①對于兩個(gè)相同的機(jī)器數(shù),作為無符號數(shù)進(jìn)行乘法運(yùn)算和作為帶符號整數(shù)進(jìn)行乘法運(yùn)算,因?yàn)槠渌玫某朔ㄋ惴ú煌?,所以,乘積的機(jī)器數(shù)可能不同。但是,從表中看出,截?cái)嗪蟮某朔e是一樣的,也即不同的僅是乘積中的高n位,而低n位完全一樣。=2\*GB3②對于n位乘法運(yùn)算,無論是無符號數(shù)乘法還是帶符號整數(shù)乘法,若截取2n位乘積的低n位作為最終的乘積,則都有可能結(jié)果溢出,即n位數(shù)字無法表示正確的乘積。雖然表中給出的帶符號整數(shù)乘積截?cái)嗪蠖紱]有發(fā)生溢出,但實(shí)際上還是存在溢出的情況,例如,011×011=001001,截?cái)嗪?11×011=001,顯然截?cái)嗪蟮慕Y(jié)果發(fā)生了溢出。=3\*GB3③表中加粗的地方是截?cái)嗪蟀l(fā)生溢出的情況??梢钥闯觯瑢τ跓o符號整數(shù)乘法,若乘積中高n位為全0,則截?cái)嗪蟮牡蚽位乘積不發(fā)生溢出,否則溢出;對于帶符號整數(shù)乘法,若高n位中的每一位都等于低n位中的第一位,則截?cái)嗪蟮牡蚽位乘積不發(fā)生溢出,否則溢出?;径寄茏鰧Γ鲥e(cuò)頻率相對較高的是x×y(截?cái)嗪螅┒M(jìn)制補(bǔ)碼。以下是兩段C語言代碼,函數(shù)arith()是直接用C語言寫的,而optarith()是對arith()函數(shù)以某個(gè)確定的M和N編譯生成的機(jī)器代碼反編譯生成的。根據(jù)optarith(),可以推斷函數(shù)arith()中M和N的值各是多少?#define M #define N int arith (intx,inty){ intresult=0; result=x*M+y/N; returnresult;}intoptarith(intx,inty){ intt=x; x<<=4; x–=t; if(y<0)y+=3;y>>=2; returnx+y; }【分析解答】對反編譯結(jié)果進(jìn)行分析,可知:對于x,指令機(jī)器代碼中有一條“x左移4位”指令,即:x=16x,然后有一條“減法”指令,即x=16x–x=15x,根據(jù)源程序知M=15;對于y,有一條“y右移2位”指令,即y=y/4,根據(jù)源程序知N=4。但是,當(dāng)y<0時(shí),對于有些y,執(zhí)行y>>2后的值并不等于y/4。例如,當(dāng)y=–1時(shí),在反編譯函數(shù)optarith中執(zhí)行y>>2時(shí),因?yàn)楱C1的機(jī)器數(shù)為全1,左移兩位后還是全1,也即–1>>2=–1,結(jié)果為–1;而原函數(shù)arith中執(zhí)行y/4時(shí),因?yàn)楱C1/4=0,得到結(jié)果為0。對于帶符號整數(shù)來說,采用算術(shù)右移時(shí),高位補(bǔ)符號,低位移出。因此,當(dāng)符號位為0時(shí),與無符號整數(shù)相同,采用移位方式和直接相除得到的商完全一樣。當(dāng)符號位為1時(shí),若低位移出的是非全0,則說明不能整除。例如,對于-3/2,假定補(bǔ)碼位數(shù)為4,則進(jìn)行算術(shù)右移操作1101>>1=1110.1B(小數(shù)點(diǎn)后面部分移出)后得到的商為-2,而精確商是-1.5,即整數(shù)商應(yīng)為-1。顯然,算術(shù)右移后得到的商比精確商少了0.5,相當(dāng)于朝-∞方向進(jìn)行了舍入,而不是朝零方向舍入。因此,這種情況下,移位得到的商與直接相除得到的商不一樣,需要進(jìn)行校正。校正的方法是,對于帶符號整數(shù)x,若x<0,則在右移前,先將x加上偏移量(2k-1),然后再右移k位。例如,上述函數(shù)optarith中,在執(zhí)行y>>2之前加了一條語句“if(y<0)y+=3;”,以對y進(jìn)行校正?;径寄茏鰧?,極個(gè)別同學(xué)出錯(cuò)。設(shè)A4A1和B4B1分別是4位加法器的兩組輸入,C0為低位來的進(jìn)位。當(dāng)加法器分別采用串行進(jìn)位和先行進(jìn)位時(shí),寫出4個(gè)進(jìn)位C4【分析解答】 串行進(jìn)位:C1=A1C0+B1C0+A1C2=A2C1+B2C1+A2C3=A3C2+B3C2+A3C4=A4C3+B4C3+A4并行進(jìn)位:C1=A1B1+(A1+B1)C0C2=A2B2+(A2+B2)A1B1+(A2+B2)(A1+B1)C0C3=A3B3+(A3+B3)A2B2+(A3+B3)(A2+B2)A1B1+(A3+B3)(A2+B2)(A1+B1)C0C4=A4B4+(A4+B4)A3B3+(A4+B4)(A3+B3)A2B2+(A4+B4)(A3+B3)(A2+B2)A1B1+(A4+B4)(A3+B3)(A2+B2)(A1+B1)C0都能做對。7.請按如下要求計(jì)算,并把結(jié)果還原成真值。設(shè)[x]補(bǔ)=0101、[y]補(bǔ)=1101,求[x+y]補(bǔ),[x–y]補(bǔ)。設(shè)[x]原=0101、[y]原=1101,用原碼一位乘法計(jì)算[x×y]原。設(shè)[x]補(bǔ)=0101、[y]補(bǔ)=1101,用MBA(基4布斯)乘法計(jì)算[x×y]補(bǔ)。設(shè)[x]原=0101、[y]原=1101,用不恢復(fù)余數(shù)法計(jì)算[x/y]原的商和余數(shù)。設(shè)[x]補(bǔ)=0101、[y]補(bǔ)=1101,用不恢復(fù)余數(shù)法計(jì)算[x/y]補(bǔ)的商和余數(shù)?!痉治鼋獯稹浚?)[x]補(bǔ)=0101B,[y]補(bǔ)=1101B,[–y]補(bǔ)=0011B。[x+y]補(bǔ)=[x]補(bǔ)+[y]補(bǔ)=0101B+1101B=(1)0010B,因此,x+y=2。兩個(gè)不同符號數(shù)相加,結(jié)果一定不會(huì)溢出。驗(yàn)證:x=+101B=5,y=–011B=–3,x+y=2。[x–y]補(bǔ)=[x]補(bǔ)+[–y]補(bǔ)=0101B+0011B=(0)1000B,因此,x–y=–8。兩個(gè)正數(shù)相加結(jié)果為負(fù),發(fā)生了溢出。驗(yàn)證:5–(–3)=8>最大可表示數(shù)7,故溢出。(2)[x]原=0101B,[y]原=1101B。將符號和數(shù)值部分分開處理。乘積的符號為0⊕1=1,數(shù)值部分采用無符號數(shù)乘法算法計(jì)算101×101的乘積。原碼一位乘法過程描述如下:初始部分積為0,在乘積寄存器前增加一個(gè)進(jìn)位位。每次循環(huán)首先根據(jù)乘數(shù)寄存器中最低位決定+X還是+0,然后將得到的新進(jìn)位、新部分積和乘數(shù)寄存器中的部分乘數(shù)一起邏輯右移一位。共循環(huán)3次,最終得到一個(gè)8位無符號數(shù)表示的乘積10011001B。CPY說明0000101P0=0+101y0=1,+X0101C,P和Y同時(shí)右移一位0010110得P1+000y1=0,+00010C,P和Y同時(shí)右移一位0001011得P2+101y2=1,+X0110011C,P和Y同時(shí)右移一位0011001得P3符號位為1,因此,[x×y]原=10011001,因此,x×y=–25。若結(jié)果取4位原碼1001,則因?yàn)槌朔e數(shù)值部分高3位為0011,是一個(gè)非0數(shù),所以,結(jié)果溢出。驗(yàn)證:4位原碼的表示范圍為-7~+7,顯然乘積–25不在其范圍內(nèi),結(jié)果應(yīng)該溢出。(3)[x]補(bǔ)=0101B,[–x]補(bǔ)=1011B,[y]補(bǔ)=1101B。采用MBA算法時(shí),符號和數(shù)值部分一起參加運(yùn)算,在乘數(shù)后面添0,初始部分積為0,并在部分積前加一位符號位0。每次循環(huán)先根據(jù)乘積寄存器中最低3位決定執(zhí)行+X、+2X、–X、–2X、還是+0操作,然后將得到的新的部分積和乘數(shù)寄存器中的部分乘數(shù)一起算術(shù)右移兩位。–X和–2X分別采用+[–x]補(bǔ)和+2[–x]補(bǔ)的方式進(jìn)行。共循環(huán)兩次。最終得到一個(gè)8位補(bǔ)碼表示的乘積11110001B。CPYY-1說明0000011010P0=0+00101y1y0y-1=010,+X00101C,P和Y同時(shí)右移兩位0000101110得P1+11011y3y2y1=110,–X11100C,P和Y同時(shí)右移兩位111110001得P2[x×y]補(bǔ)=11110001,因此,x×y=–15。(4)[x]原=0101B,[y]原=1101B。將符號和數(shù)值部分分開處理。將符號和數(shù)值部分分開處理。商的符號為0⊕1=1,數(shù)值部分采用無符號數(shù)除法算法計(jì)算101B和101B的商和余數(shù)。無符號數(shù)不恢復(fù)余數(shù)除法過程描述如下:初始中間余數(shù)為00001010,其中,最高位為添加的符號位,用于判斷余數(shù)是否大于等于0;最后一位0為第一次上的商,該位商只是用于判斷結(jié)果是否溢出,不包含在最終的商中。因?yàn)榻Y(jié)果肯定不溢出,所以該位商可以直接上0,并先做一次–Y操作得到第一次中間余數(shù),然后進(jìn)入循環(huán)。每次循環(huán)首先將中間余數(shù)和商一起左移一位,然后根據(jù)上一次上的商(或余數(shù)的符號)決定執(zhí)行+Y還是–Y操作,以得到新的中間余數(shù),最后根據(jù)中間余數(shù)的符號確定上商為0還是1。–Y采用+[–y]補(bǔ)的方式進(jìn)行。整個(gè)循環(huán)內(nèi)執(zhí)行的要點(diǎn)是“正、1、減;負(fù)、0、加”。共循環(huán)3次。最終得到一個(gè)3位無符號數(shù)表示的商0001和余數(shù)0000,其中第一位商0必須去掉,添上符號位后得到最終的商的原碼表示為1001,余數(shù)的原碼表示為0000。因此,x/y的商為–1,余數(shù)為0。
余數(shù)寄存器R余數(shù)/商寄存器Q說明0000101 開始R0=X+1011 R1=X–Y10111010 R1<0,故q3=0,沒有溢出0111010 2R1(R和Q同時(shí)左移,空出一位商)+0101 R2=2R1+Y11000100 R2<0,則q2=01000100 2R2(R和Q同時(shí)左移,空出一位商)+0101R3=2R2+Y11011000 R3<0,則q1=01011000 2R3(R和Q同時(shí)左移,空出一位商)+0101R4=2R3–Y00000001 R4>0,則q0=1商的最高位為0,說明沒有溢出,商的數(shù)值部分為001。所以,[x/y]原=1001(最高位為符號位),余數(shù)為0。(5)[x]補(bǔ)=0101B,[y]補(bǔ)=1101B。補(bǔ)碼不恢復(fù)余數(shù)除法過程描述如下:初始中間余數(shù)為00000101,整個(gè)循環(huán)內(nèi)執(zhí)行的要點(diǎn)是“同、1、減;異、0、加”。共循環(huán)4次,得到商1110和余數(shù)0010。最終根據(jù)情況需要對商和余數(shù)進(jìn)行修正。余數(shù)寄存器R余數(shù)/商寄存器Q說明00000101 開始R0=X+1101 被除數(shù)和除數(shù)異號,做加法11010101 同、1、減10101011 2R1(R和Q同時(shí)左移,空出一位商)+0011 R2=2R1-Y11011011 同、1、減101101
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- T-ZZB 3730-2024 3D打印指甲貼片
- 2025年度租賃期滿后房屋產(chǎn)權(quán)無償轉(zhuǎn)讓協(xié)議
- 二零二五年度美容院合伙經(jīng)營店鋪轉(zhuǎn)讓協(xié)議
- 二零二五年度輔導(dǎo)班學(xué)生安全協(xié)議及教師教學(xué)責(zé)任書
- 2025年度洗浴中心員工薪酬福利及雇傭合同
- 二零二五年度股權(quán)激勵(lì)與員工股權(quán)激勵(lì)計(jì)劃執(zhí)行合同模板
- 二零二五年度貸款合同爭議解決協(xié)議書
- 網(wǎng)絡(luò)游戲合作開發(fā)與運(yùn)營協(xié)議
- 關(guān)于辦公時(shí)間調(diào)整的通知
- 房屋及土地使用權(quán)轉(zhuǎn)讓合同書
- 預(yù)防校園欺凌主題班會(huì)課件(共36張課件)
- 一寸光陰一寸金課件
- 金屬非金屬地下礦山安全生產(chǎn)技術(shù)課件
- 高中課程表模板1
- 兒童抑郁量表CDI
- 財(cái)務(wù)會(huì)計(jì)ppt課件(完整版)
- 水是生命之源幻燈
- 采場頂板(幫壁)分級管理制度
- 瀝青路面車轍病害及抗車轍劑解決方案
- 金屬風(fēng)管支架重量計(jì)算表
- 從業(yè)務(wù)骨干到管理者(課堂PPT)
評論
0/150
提交評論