資源描述:
《第三章 運算方法和運算部件》由會員上傳分享,免費在線閱讀,更多相關內(nèi)容在教育資源-天天文庫。
1、第一講不同層次程序員看到的運算及ALU第二講定點數(shù)運算及其運算部件第三講浮點數(shù)運算及其運算部件Ch3:ArithmeticandLogicOperateandALU運算方法和運算部件第一講:不同層次程序員看到的運算及ALU主要內(nèi)容C語言程序中涉及的運算整數(shù)算術運、浮點數(shù)算術運算按位、邏輯、移位、位擴展和位截斷指令集中與運算相關的指令(以MIPS為參考)涉及到的定點數(shù)運算算術運算帶符號整數(shù)運算:取負/符號擴展/加/減/乘/除/算術移位無符號整數(shù)運算:0擴展/加/減/乘/除邏輯運算邏輯操作:與/或/非/…移位操作:
2、邏輯左移/邏輯右移涉及到的浮點數(shù)運算:加、減、乘、除基本運算部件ALU的設計C語言程序中涉及的運算算術運算(最基本的運算)無符號數(shù)、帶符號整數(shù)、浮點數(shù)的運算按位運算用途對位串實現(xiàn)“掩碼”(mask)操作或相應的其他處理(主要用于對多媒體數(shù)據(jù)或控制信息進行處理)操作按位或:“
3、”按位與:“&”按位取反:“~”按位異或:“^”問題:如何從一個16位采樣數(shù)據(jù)y中提取高位字節(jié),并使低字節(jié)為0?可用“&”實現(xiàn)“掩碼”操作:y&0xFF00例如,當y=0x2C0B時,通過掩碼操作得到結(jié)果為:0x2C00C語言程序中涉及的運算
4、邏輯運算用途用于關系表達式的運算例如,if(x>yandi<100)then……中的“and”運算操作“‖”表示“OR”運算“&&”表示“AND”運算例如,if((x>y)&&(i<100))then……“!”表示“NOT”運算與按位運算的差別符號表示不同:&~&&;
5、~‖;……運算過程不同:按位~整體結(jié)果類型不同:位串~邏輯值C語言程序中涉及的運算移位運算用途提取部分信息擴大或縮小數(shù)值的2、4、8…倍操作左移::x<>k不區(qū)分是邏輯移位還是算術移位,由x的類型確定無符號數(shù):邏輯左移、邏輯右移高(
6、低)位移出,低(高)位補0,可能溢出!問題:何時可能發(fā)生溢出?如何判斷溢出?若高位移出的是1,則左移時發(fā)生溢出帶符號整數(shù):算術左移、算術右移左移:高位移出,低位補0??赡芤绯觯∫绯雠袛啵喝粢瞥龅奈徊坏扔谛碌姆栁?,則溢出。右移:低位移出,高位補符,可能發(fā)生數(shù)據(jù)丟失。C語言程序中涉及的運算位擴展和位截斷運算用途類型轉(zhuǎn)換時可能需要數(shù)據(jù)擴展或截斷操作沒有專門操作運算符,根據(jù)類型轉(zhuǎn)換前后數(shù)據(jù)長短確定是擴展還是截斷擴展:短轉(zhuǎn)長無符號數(shù):0擴展,前面補0帶符號整數(shù):符號擴展,前面補符截斷:長轉(zhuǎn)短強行將高位丟棄,故可能發(fā)生“溢
7、出”例1:在大端機上輸出si,usi,i,ui的十進制和十六進制值是什么?shortsi=-12345;unsignedshortusi=si;inti=si;unsingnedui=usi;si=-12345CFC7usi=53191CFC7i=-12345FFFFCFC7ui=531910000CFC7例2:i和j是否相等?inti=53191;shortsi=(short)i;intj=si;不相等!i=531910000CFC7si=-12345CFC7j=-12345FFFFCFC7原因:對i截斷時發(fā)生
8、了“溢出”,即:53191截斷為16位數(shù)時,有效數(shù)據(jù)丟失,無法被正確表示!MIPS定點算術運算指令InstructionExampleMeaningCommentsaddadd$1,$2,$3$1=$2+$33operands;exceptionpossiblesubtractsub$1,$2,$3$1=$2–$33operands;exceptionpossibleaddimmediateaddi$1,$2,100$1=$2+100+constant;exceptionpossibleaddunsignedad
9、du$1,$2,$3$1=$2+$33operands;noexceptionssubtractunsignedsubu$1,$2,$3$1=$2–$33operands;noexceptionsaddimm.unsign.addiu$1,$2,100$1=$2+100+constant;noexceptionsmultiplymult$2,$3Hi,Lo=$2x$364-bitsignedproductmultiplyunsignedmultu$2,$3Hi,Lo=$2x$364-bitunsignedprod
10、uctdividediv$2,$3Lo=$2÷$3,Lo=quotient,Hi=remainderHi=$2mod$3divideunsigneddivu$2,$3Lo=$2÷$3,Unsignedquotient&remainderHi=$2mod$3涉及到的操作數(shù):32/16位無符號數(shù),32/16位帶符號數(shù)涉及到的操作:加/減/乘/除(有符號/無符號)MIPS邏輯運