資源描述:
《匯編言語(yǔ)-移位指令》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。
1、7.1移位指令7.1.1邏輯左移【指令格式】SHLd1,d2【功能】把操作數(shù)d1的各個(gè)二進(jìn)制位依次向左移動(dòng)d2位,移動(dòng)造成右邊的空位填0,結(jié)果放回操作d1中?!菊f(shuō)明】(1)操作數(shù)d1必須是通用寄存器或內(nèi)存型尋址方式,必須有確定的類(lèi)型,可以是字節(jié)型,也可以是字型,并且對(duì)內(nèi)存型尋址方式可以使用段跨越。(2)操作數(shù)d2表示移動(dòng)的位數(shù),只能是立即數(shù)1或者寄存器CL,當(dāng)移動(dòng)位數(shù)超過(guò)1位時(shí),必須把移動(dòng)位數(shù)放在CL中,以CL作為d2操作數(shù)。(3)操作數(shù)d1各位移動(dòng)的情況如圖7.1所示,從最高位起,將有d2位移到操作數(shù)d1之外,除
2、了最后移出的一位放到標(biāo)志位CF中之外,其余各位均被丟棄,移動(dòng)造成右邊的空位用0填充?!惶?hào):15/714/6100CF操作數(shù)d1(4)移動(dòng)后d1中的數(shù)據(jù)是在其原值的后面加了d2個(gè)0,即把原數(shù)值擴(kuò)大了倍,當(dāng)擴(kuò)大后的值超過(guò)表示范圍時(shí),超過(guò)d1類(lèi)型(字節(jié)或字)規(guī)定位數(shù)的高位部分會(huì)自動(dòng)丟失。(5)該指令對(duì)其余標(biāo)志位的影響情況是:移動(dòng)后的結(jié)果為0則ZF置1,否則ZF清0;移動(dòng)后d1最高位的值會(huì)復(fù)制到SF上;如果移動(dòng)前后d1的最高位不同則OF置1,否則OF清0。移位指令涉及數(shù)值計(jì)算問(wèn)題,但并不復(fù)雜。比如AX的值是8D56H,
3、CL的值是3,則下面幾條指令是SHL指令的正確用法,后面也給出了移位后的結(jié)果:SHLAL,1移位后,AL=0ACH,CF=0,AH不變SHLAX,1移位后,AX=1AACH,CF=1SHLAH,CL移位后,AH=68H,CF=0,AL不變SHLAX,CL移位后,AX=6AD0H,CF=07.1.2算術(shù)左移【指令格式】SALd1,d2【說(shuō)明】這是一條與SHL完全相同的指令,該指令與SHL指令是同一條機(jī)器指令的兩種不同寫(xiě)法。7.1.3邏輯右移【指令格式】SHRd1,d2【功能】把操作數(shù)d1的各個(gè)二進(jìn)制位依次向右移動(dòng)d2
4、位,移動(dòng)造成左邊的空位填0,結(jié)果放回操作數(shù)d1中。【說(shuō)明】(1)對(duì)兩個(gè)操作數(shù)的語(yǔ)法限制以及對(duì)標(biāo)志位的設(shè)置情況都與SHL指令相同,見(jiàn)SHL指令說(shuō)明的(1)、(2)和(5)。(2)SHR指令在位的移動(dòng)方向上與SHL指令剛好相反,其它方面則很類(lèi)似,向右移出的最后一位放到CF中,右移造成左邊的空位以0填充,如圖7.2所示。(3)移動(dòng)后的值是把d1中的原值作為無(wú)符號(hào)數(shù),除以的商。位號(hào):15/714/610操作數(shù)d1CF圖7.2邏輯右移指令SHR的功能……7.1.4算術(shù)右移【指令格式】SARd1,d2【功能】把操作數(shù)d1的各個(gè)
5、二進(jìn)制位依次向右移動(dòng)d2位,移動(dòng)造成左邊的空位填d1原值的最高位,結(jié)果放回操作d1中?!菊f(shuō)明】SAR指令的功能基本上與SHR的一樣,僅僅是移動(dòng)造成的空位填充方式不同,如果操作數(shù)d1移動(dòng)前最高位是1,則移動(dòng)造成的空位以1填充,否則以0填充,如圖7.3所示。SAR指令執(zhí)行的結(jié)果是把d1中的原值作為帶符號(hào)數(shù),除以并把除法的商放回d1中。位號(hào):15/714/610…………操作數(shù)d1CF圖7.3算術(shù)右移指令SAR的功能7.1.5循環(huán)左移【指令格式】ROLd1,d2【功能】把操作數(shù)d1的各個(gè)二進(jìn)制位向左移動(dòng)d2位,從d1左端移
6、出的每一位再依次移到右端空出的位上,最后移出的一位還要送到CF中??梢园裠1的各位看作是首尾相接的一個(gè)環(huán)狀,如圖7.4所示,把各位的值按逆時(shí)針?lè)较蛐D(zhuǎn)d2格,再?gòu)沫h(huán)原先的連接部斷開(kāi),可以得到ROL指令執(zhí)行后的結(jié)果。14/615/7CF01圖7.4循環(huán)左移指令ROL的功能……7.1.6循環(huán)右移【指令格式】RORd1,d2【功能】把操作數(shù)d1的各個(gè)二進(jìn)制位向右移動(dòng)d2位,從右端移出的各位再依次移到d1右端空出的位上,最后移出的一位還要送到CF中。ROR是循環(huán)右移指令,與ROL指令相比,只是移位的方向不同,把圖7.4中的
7、移動(dòng)方向改為順時(shí)針?lè)较颍瑥牡?位上最后一次移出的位送到CF中,就是ROR指令的功能。7.1.7帶進(jìn)位的循環(huán)左移【指令格式】RCLd1,d2【功能】把操作數(shù)d1的各位與CF聯(lián)合在一起,構(gòu)成9個(gè)或者17個(gè)二進(jìn)制位,向左移動(dòng)d2位,從左端移出的各位再依次移到右端空出的位上。從功能上說(shuō),可以把d1的各位與CF一起,看作首尾相接的一個(gè)環(huán)狀,如圖7.5所示,把各位按逆時(shí)針?lè)较蛐D(zhuǎn)d2格,再?gòu)沫h(huán)原先的連接部斷開(kāi),可以得到ROL指令執(zhí)行后的結(jié)果,包括CF的設(shè)置情況。14/615/7CF01圖7.5帶有CF的循環(huán)左移指令RCL的功能
8、……7.1.8帶進(jìn)位的循環(huán)右移【指令格式】RCRd1,d2【功能】把操作數(shù)d1的各位與CF聯(lián)合在一起,構(gòu)成9個(gè)或者17個(gè)二進(jìn)制位,向右移動(dòng)d2位,從右端移出的各位再依次移到左端空出的位上。帶進(jìn)位CF的循環(huán)右移指令的功能可以參照?qǐng)D7.5,把移動(dòng)方向改為順時(shí)針即可。邏輯移位與算術(shù)移位指令除了功能本身描述的二進(jìn)制位的移動(dòng)之外,還用于把一個(gè)字節(jié)型或字型數(shù)據(jù)乘以/除以