匯編語(yǔ)言課件第6章帶符號(hào)數(shù)字符串和表_第1頁(yè)
匯編語(yǔ)言課件第6章帶符號(hào)數(shù)字符串和表_第2頁(yè)
匯編語(yǔ)言課件第6章帶符號(hào)數(shù)字符串和表_第3頁(yè)
匯編語(yǔ)言課件第6章帶符號(hào)數(shù)字符串和表_第4頁(yè)
匯編語(yǔ)言課件第6章帶符號(hào)數(shù)字符串和表_第5頁(yè)
已閱讀5頁(yè),還剩55頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

2022年12月13日12022年12月13日1

2022年12月13日1第6章帶符號(hào)數(shù)、字符串和表*1DECHEXBIN

6600000110

匯編語(yǔ)言與接口技術(shù)2022年12月12日12022年12月12日12022年第6章帶符號(hào)數(shù)、字符串和表學(xué)習(xí)本章后:1、會(huì)進(jìn)行帶符號(hào)數(shù)的運(yùn)算程序設(shè)計(jì)

正數(shù)、負(fù)數(shù)、正負(fù)數(shù)2、會(huì)進(jìn)行字符串的運(yùn)算程序設(shè)計(jì)

數(shù)據(jù)串、字符串、字串、字節(jié)串3、會(huì)進(jìn)行查表運(yùn)算程序設(shè)計(jì)

例如:函數(shù)表Y=f(x),Y=x22022年12月13日2第6章帶符號(hào)數(shù)、字符串和表學(xué)習(xí)本章后:2022年12月第6章帶符號(hào)數(shù)、字符串和表本章的主要內(nèi)容:6.1帶符號(hào)數(shù)的運(yùn)算

6.1.1帶符號(hào)數(shù)的概念 6.1.2帶符號(hào)數(shù)的補(bǔ)碼表示

6.1.3帶符號(hào)數(shù)的運(yùn)算 6.1.4帶符號(hào)數(shù)的加減運(yùn)算的溢出問(wèn)題6.1.5帶符號(hào)數(shù)的乘除、移位、比較運(yùn)算6.2字符串和表操作 6.2.1字符串操作 6.2.2XLAT指令和查表2022年12月13日3第6章帶符號(hào)數(shù)、字符串和表本章的主要內(nèi)容:2022年16.1帶符號(hào)數(shù)的算術(shù)運(yùn)算6.1.1帶符號(hào)數(shù)的概念

日常生活中使用的數(shù)字有正、有負(fù)(例如溫度等),計(jì)算機(jī)就必須能夠處理這樣的數(shù)值。計(jì)算機(jī)處理數(shù)據(jù)主要包括:數(shù)據(jù)表示和數(shù)據(jù)運(yùn)算。計(jì)算機(jī)只能存儲(chǔ)0,1兩種符號(hào)。

數(shù)據(jù)表示的目的是存儲(chǔ)和顯示數(shù)據(jù),存儲(chǔ)要解決將帶符號(hào)數(shù)中的“符號(hào)”數(shù)字化后才能存儲(chǔ)在計(jì)算機(jī)中。

數(shù)據(jù)運(yùn)算是使用計(jì)算機(jī)語(yǔ)言提供的指令,取得運(yùn)算的源操作數(shù),將運(yùn)算結(jié)果存儲(chǔ)在計(jì)算機(jī)中,且須判斷計(jì)算機(jī)運(yùn)算結(jié)果的正確性。2022年12月13日46.1帶符號(hào)數(shù)的算術(shù)運(yùn)算6.1.1帶符號(hào)數(shù)的概念20226.1帶符號(hào)數(shù)的算術(shù)運(yùn)算6.1.2帶符號(hào)數(shù)的補(bǔ)碼表示正數(shù)的補(bǔ)碼表示:

將數(shù)的真值形式中的正號(hào),用代碼0來(lái)表示,數(shù)值部分用二進(jìn)制數(shù)來(lái)表示。

負(fù)數(shù)的補(bǔ)碼表示:將數(shù)的真值形式中的負(fù)號(hào),用代碼1來(lái)表示,將用二進(jìn)制數(shù)表示的數(shù)值部分按位取反且在最低位加1形成。2022年12月13日56.1帶符號(hào)數(shù)的算術(shù)運(yùn)算6.1.2帶符號(hào)數(shù)的補(bǔ)碼表示206.1帶符號(hào)數(shù)的算術(shù)運(yùn)算字長(zhǎng):n位補(bǔ)碼表示一個(gè)數(shù)時(shí),最高位為符號(hào)位。符號(hào)數(shù)字化:

0---正數(shù)

1---負(fù)數(shù)數(shù)的補(bǔ)碼表示:(1)符號(hào)位為0時(shí),表示的數(shù)為正數(shù),其后面的n-1位為數(shù)值部分。(2)符號(hào)位為1時(shí),表示的數(shù)為負(fù)數(shù),其后面的n-1位按位取反且最低位加1為數(shù)值部分。n位二進(jìn)制補(bǔ)碼表示范圍:

-2n-1-

-

-

(2n-1-1)參看p154-p1556.1帶符號(hào)數(shù)的算術(shù)運(yùn)算字長(zhǎng):n位6.1帶符號(hào)數(shù)的算術(shù)運(yùn)算6.1.3帶符號(hào)數(shù)的運(yùn)算

運(yùn)算:算術(shù)運(yùn)算、邏輯運(yùn)算

算術(shù)運(yùn)算:加、減、乘、除、比較

邏輯運(yùn)算:移位運(yùn)算

本節(jié)中約定參加運(yùn)算的數(shù)字長(zhǎng):8位,16位;對(duì)應(yīng)數(shù)的表示范圍。若字長(zhǎng)確定則數(shù)的表示范圍隨之確定;若運(yùn)算結(jié)果超出數(shù)的表示范圍,則應(yīng)進(jìn)行溢出處理。2022年12月13日76.1帶符號(hào)數(shù)的算術(shù)運(yùn)算6.1.3帶符號(hào)數(shù)的運(yùn)算20226.1帶符號(hào)數(shù)的算術(shù)運(yùn)算6.1.3帶符號(hào)數(shù)的運(yùn)算(續(xù))數(shù)的運(yùn)算分類:

加法: 加法指令 ADD

減法: 減法指令 SUB

乘法: 乘法指令 IMUL

除法: 除法指令 IDIV

移位: 移位指令 SAR、SAL、SHL

比較: 比較指令 CMP簡(jiǎn)單舉例說(shuō)明運(yùn)算結(jié)果可表示,結(jié)果溢出的情況(DEBUG下演示)6.1帶符號(hào)數(shù)的算術(shù)運(yùn)算6.1.3帶符號(hào)數(shù)的運(yùn)算(續(xù))6.1帶符號(hào)數(shù)的算術(shù)運(yùn)算6.1.4帶符號(hào)數(shù)的加減運(yùn)算的溢出問(wèn)題嚴(yán)重問(wèn)題:帶符號(hào)數(shù)的溢出問(wèn)題。CPU報(bào)告溢出:產(chǎn)生溢出時(shí),CPU將標(biāo)志位OF置為1。程序員處理:程序檢測(cè),若OF=1則溢出,轉(zhuǎn)向溢出處理。例如:如下例子產(chǎn)生溢出的情況(DEBUG下演示,注意加減運(yùn)算對(duì)符號(hào)位的影響,特別是對(duì)OF標(biāo)志的影響)P155例子6.496+70p156例子6.5(-128)+(-2)P157例子6.86.1帶符號(hào)數(shù)的算術(shù)運(yùn)算6.1.4帶符號(hào)數(shù)的加減運(yùn)算的溢6.1帶符號(hào)數(shù)的算術(shù)運(yùn)算6.1.4帶符號(hào)數(shù)的加減運(yùn)算的溢出問(wèn)題(續(xù))避免結(jié)果溢出的產(chǎn)生:擴(kuò)大數(shù)據(jù)位數(shù)方法:CBW---把字節(jié)轉(zhuǎn)換為字,把AL的D7復(fù)制到AH的所有位。CWD---把字轉(zhuǎn)換為雙字,把AX的D15復(fù)制到DX的所有位。參看P158程序6.16.1帶符號(hào)數(shù)的算術(shù)運(yùn)算6.1.4帶符號(hào)數(shù)的加減運(yùn)算的溢6.1帶符號(hào)數(shù)的算術(shù)運(yùn)算6.1.5帶符號(hào)數(shù)的乘除、移位、比較運(yùn)算

(1)乘法

指令格式:IMUL寄存器/內(nèi)存 隱含操作數(shù)1:字節(jié)---AL,字---AX

(2)除法

指令格式:

IDIV 寄存器/內(nèi)存

隱含操作數(shù)1:字節(jié)---AX,字---DX:AX2022年12月13日116.1帶符號(hào)數(shù)的算術(shù)運(yùn)算6.1.5帶符號(hào)數(shù)的乘除、移位、6.1帶符號(hào)數(shù)的算術(shù)運(yùn)算(3)算術(shù)右移

指令格式:SAR目的,移位的次數(shù)

算術(shù)移位方法:目的操作數(shù)的各位右移1位,最低位進(jìn)入進(jìn)位位,空出的位用符號(hào)位填充。

(適用于帶符號(hào)數(shù),其余同第三章介紹的移位指令)

簡(jiǎn)單舉例6.1帶符號(hào)數(shù)的算術(shù)運(yùn)算(3)算術(shù)右移6.1帶符號(hào)數(shù)的算術(shù)運(yùn)算(4)帶符號(hào)數(shù)的比較

指令格式:

CMP目的操作數(shù),源操作數(shù)帶符號(hào)數(shù)比較后檢查標(biāo)志:OF、ZF、SF

用來(lái)檢查上述條件的助記符如下:

JE JGJGEJLJLE參看P161例子6.122022年12月13日136.1帶符號(hào)數(shù)的算術(shù)運(yùn)算(4)帶符號(hào)數(shù)的比較2022年122022年12月13日14第6章帶符號(hào)數(shù)、字符串和表6.1帶符號(hào)數(shù)的運(yùn)算

6.1.1帶符號(hào)數(shù)的概念 6.1.2帶符號(hào)數(shù)的補(bǔ)碼表示

6.1.3帶符號(hào)數(shù)的運(yùn)算 6.1.4帶符號(hào)數(shù)的加減運(yùn)算的溢出問(wèn)題6.1.5帶符號(hào)數(shù)的乘除、移位、比較運(yùn)算6.2字符串和表操作 6.2.1字符串操作 6.2.2XLAT指令和查表2022年12月13日142022年12月12日14第6章帶符號(hào)數(shù)、字符串和表66.2字符串和表操作6.2.1字符串操作串處理指令處理存放在存儲(chǔ)器里的數(shù)據(jù)串,串指令可以處理字節(jié)或字,386及后繼機(jī)型還可以處理雙字。

串處理指令包括:

MOVS串傳送 CMPS串比較

SCAS串掃描 LODS從串取

STOS存入串

INS串輸入(從I/O端口輸入)

OUTS串輸出(向I/O端口輸出)2022年12月13日156.2字符串和表操作6.2.1字符串操作2022年12月6.2字符串和表操作6.2.1字符串操作

使用的寄存器: DS、SI、ES、DI、CX DS:SI---指向源操作數(shù) ES:DI---指向目的操作數(shù) CX:重復(fù)執(zhí)行的次數(shù)

方向標(biāo)志的使用: DF:指字符串指令自動(dòng)使指針SI、DI遞增或者遞減 DF=0自動(dòng)增量,DF=1自動(dòng)減量 指令CLD;DF=0 指令STD;DF=16.2字符串和表操作6.2.1字符串操作6.2字符串和表操作6.2.1字符串操作串指令只能處理一個(gè)字符/字、雙字。而串指令加上重復(fù)前綴即可方便的處理一個(gè)字符串。

串處理指令使用的重復(fù)前綴如下:

REP 重復(fù) REPE/REPZ 相等/為零則重復(fù) REPNE/REPNZ 不相等/不為零則重復(fù)6.2字符串和表操作6.2.1字符串操作6.2字符串和表操作1)與REP相配合工作

MOVS,STOS,LODS,INS和OUTS指令(1)格式:REP串指令

執(zhí)行的操作①若(countreg)=0,則退出REP,否則繼續(xù)執(zhí)行。②(countreg)=(countreg)-1③執(zhí)行其后的串指令④重復(fù)①-③其中計(jì)數(shù)長(zhǎng)度為16位時(shí),用CX作為countreg,計(jì)數(shù)長(zhǎng)度為32位時(shí),用ECX作為countreg。2022年12月13日186.2字符串和表操作1)與REP相配合工作2022年16.2字符串和表操作(2) MOVS串傳送指令

MOVS DST,SRC MOVSB(字節(jié)) MOVSW(字)

MOVSD(雙字)(386及后繼機(jī)型可用)

功能:把源變址指向的寄存器數(shù)據(jù)段中的內(nèi)容傳送到目的變址寄存器指向的附加段中去。

執(zhí)行該指令前的準(zhǔn)備工作:①數(shù)據(jù)段中源串首地址②附加段中目的串首地址③數(shù)據(jù)串長(zhǎng)度④方向標(biāo)志:建立方向標(biāo)志的指令CLDSTD

參看x86-P164-el.asm2022年12月13日196.2字符串和表操作(2) MOVS串傳送指令2022年16.2字符串和表操作(3)STOS指令

STOSDSTSTOSB(字節(jié))STOSW(字)

STOSD(雙字)功能:把累加器中的內(nèi)容存入由目的變址寄存器指向的附加段的單元中。

STOS指令在初始化某一緩沖區(qū)時(shí)很有用。參看x86-P165-el.asm2022年12月13日206.2字符串和表操作(3)STOS指令2022年12月16.2字符串和表操作(4)LODS指令

LODSSRCLODSB(字節(jié))LODSW(字)

LODSD(雙字)功能:把由源變址寄存器指向的數(shù)據(jù)段的單元中內(nèi)容存入累加器中。

LODS指令用于將緩沖區(qū)中的一串字符逐次取出來(lái)測(cè)試。2022年12月13日216.2字符串和表操作(4)LODS指令2022年12月126.2字符串和表操作2)與REPE/REPZ和REPNE/REPNZ聯(lián)合工作的CMPS和SCAS指令

(1)REPE/REPZ重復(fù)串操作格式:REPE/REPZ串指令執(zhí)行的操作:①若(countreg)=0或ZF=0時(shí)則退出,否則往下繼續(xù)執(zhí)行。②(countreg)=(countreg)-1③執(zhí)行其后的串指令④重復(fù)①-③2022年12月13日226.2字符串和表操作2)與REPE/REPZ和REPNE6.2字符串和表操作(2)REPNE/REPNZ執(zhí)行的操作格式:REPNE/REPNZ串指令執(zhí)行的操作:①若(countreg)=0或ZF=1時(shí)則退出,否則往下繼續(xù)執(zhí)行。②(countreg)=(countreg)-1③執(zhí)行其后的串指令④重復(fù)①-③6.2字符串和表操作(2)REPNE/REPNZ執(zhí)行的操6.2字符串和表操作(3)CMPS指令

CMPSDST,SRC CMPSB(字節(jié)) CMPSW(字)

CMPSD(雙字)(386及后繼機(jī)型可用)

功能:把源變址指向的寄存器數(shù)據(jù)段中的內(nèi)容與目的變址寄存器指向的附加段的內(nèi)容相減,但不存結(jié)果,只根據(jù)條件置條件碼。

用來(lái)比較兩個(gè)數(shù)據(jù)串。6.2字符串和表操作(3)CMPS指令6.2字符串和表操作(4)SCAS指令

SCASDST SCASB(字節(jié)) SCASW(字)

SCASD(雙字)(386及后繼機(jī)型可用)

功能:把累加器中的內(nèi)容與目的變址寄存器指向的附加段的內(nèi)容進(jìn)行比較,并不存結(jié)果,只根據(jù)條件置條件碼。 從一個(gè)串中查找一個(gè)指定的字符。參看x86-P165-el.asm6.2字符串和表操作(4)SCAS指令6.2字符串和表操作6.2.2查表和XLAT指令1.查表在計(jì)算機(jī)中往往需要用表保存一些重要信息。例如:平方表、函數(shù)表等?如何用查表(1)已知表首址tab(2)已知待查數(shù)據(jù)x(表中的偏移地址)(3)

結(jié)果地址=tab+x(4)Y=(tab+x)0149…81tab+0表1.

Y=f(x)是一平方表tab+96.2字符串和表操作6.2.2查表和XLAT指令0149…6.2字符串和表操作2.XLAT(translate) 換碼

指令格式:XLATOPR指令的功能:

16位指令:(AL)←((BX)+(AL))

32位指令:(AL)←((EBX)+(AL))

換碼指令常用于把一種代碼轉(zhuǎn)換為另一種代碼。6.2字符串和表操作2.XLAT(transla6.2字符串和表操作3.平方表查表實(shí)戰(zhàn)舉例(1)數(shù)據(jù)段定義平方表(2)編程序查表提示查表的主要指令段:

MOVBX,OFFSETTABMOVAL,XXLAT6.2字符串和表操作3.平方表查表實(shí)戰(zhàn)舉例本章實(shí)戰(zhàn)練習(xí)

假設(shè)數(shù)據(jù)段中NUM開(kāi)始的200字節(jié)單元中的帶符號(hào)數(shù),其他條件自設(shè)。完成如下工作:1.分別統(tǒng)計(jì)這串?dāng)?shù)中的正數(shù)個(gè)數(shù)和負(fù)數(shù)個(gè)數(shù)2.將原數(shù)據(jù)串中的前100個(gè)數(shù)據(jù)傳送到附加段ENUM開(kāi)始的單元中3.求出ENUM單元的100個(gè)數(shù)中的最大數(shù)

2022年12月13日29本章實(shí)戰(zhàn)練習(xí)假設(shè)數(shù)據(jù)段中NUM開(kāi)始的200字節(jié)單元中的2022年12月13日302022年12月13日302022年12月13日302022年12月13日302022年12月13日30復(fù)習(xí)題及作業(yè)題復(fù)習(xí)題1.各節(jié)后復(fù)習(xí)題自己獨(dú)立完成2.對(duì)照章后復(fù)習(xí)答案作業(yè)題

編程題目

P1698、11、12要求:須上機(jī)調(diào)試,作業(yè)本上給出運(yùn)行結(jié)果。

*302022年12月12日302022年12月12日3020222022年12月13日312022年12月13日31

2022年12月13日31第6章帶符號(hào)數(shù)、字符串和表*31DECHEXBIN

6600000110

匯編語(yǔ)言與接口技術(shù)2022年12月12日12022年12月12日12022年第6章帶符號(hào)數(shù)、字符串和表學(xué)習(xí)本章后:1、會(huì)進(jìn)行帶符號(hào)數(shù)的運(yùn)算程序設(shè)計(jì)

正數(shù)、負(fù)數(shù)、正負(fù)數(shù)2、會(huì)進(jìn)行字符串的運(yùn)算程序設(shè)計(jì)

數(shù)據(jù)串、字符串、字串、字節(jié)串3、會(huì)進(jìn)行查表運(yùn)算程序設(shè)計(jì)

例如:函數(shù)表Y=f(x),Y=x22022年12月13日32第6章帶符號(hào)數(shù)、字符串和表學(xué)習(xí)本章后:2022年12月第6章帶符號(hào)數(shù)、字符串和表本章的主要內(nèi)容:6.1帶符號(hào)數(shù)的運(yùn)算

6.1.1帶符號(hào)數(shù)的概念 6.1.2帶符號(hào)數(shù)的補(bǔ)碼表示

6.1.3帶符號(hào)數(shù)的運(yùn)算 6.1.4帶符號(hào)數(shù)的加減運(yùn)算的溢出問(wèn)題6.1.5帶符號(hào)數(shù)的乘除、移位、比較運(yùn)算6.2字符串和表操作 6.2.1字符串操作 6.2.2XLAT指令和查表2022年12月13日33第6章帶符號(hào)數(shù)、字符串和表本章的主要內(nèi)容:2022年16.1帶符號(hào)數(shù)的算術(shù)運(yùn)算6.1.1帶符號(hào)數(shù)的概念

日常生活中使用的數(shù)字有正、有負(fù)(例如溫度等),計(jì)算機(jī)就必須能夠處理這樣的數(shù)值。計(jì)算機(jī)處理數(shù)據(jù)主要包括:數(shù)據(jù)表示和數(shù)據(jù)運(yùn)算。計(jì)算機(jī)只能存儲(chǔ)0,1兩種符號(hào)。

數(shù)據(jù)表示的目的是存儲(chǔ)和顯示數(shù)據(jù),存儲(chǔ)要解決將帶符號(hào)數(shù)中的“符號(hào)”數(shù)字化后才能存儲(chǔ)在計(jì)算機(jī)中。

數(shù)據(jù)運(yùn)算是使用計(jì)算機(jī)語(yǔ)言提供的指令,取得運(yùn)算的源操作數(shù),將運(yùn)算結(jié)果存儲(chǔ)在計(jì)算機(jī)中,且須判斷計(jì)算機(jī)運(yùn)算結(jié)果的正確性。2022年12月13日346.1帶符號(hào)數(shù)的算術(shù)運(yùn)算6.1.1帶符號(hào)數(shù)的概念20226.1帶符號(hào)數(shù)的算術(shù)運(yùn)算6.1.2帶符號(hào)數(shù)的補(bǔ)碼表示正數(shù)的補(bǔ)碼表示:

將數(shù)的真值形式中的正號(hào),用代碼0來(lái)表示,數(shù)值部分用二進(jìn)制數(shù)來(lái)表示。

負(fù)數(shù)的補(bǔ)碼表示:將數(shù)的真值形式中的負(fù)號(hào),用代碼1來(lái)表示,將用二進(jìn)制數(shù)表示的數(shù)值部分按位取反且在最低位加1形成。2022年12月13日356.1帶符號(hào)數(shù)的算術(shù)運(yùn)算6.1.2帶符號(hào)數(shù)的補(bǔ)碼表示206.1帶符號(hào)數(shù)的算術(shù)運(yùn)算字長(zhǎng):n位補(bǔ)碼表示一個(gè)數(shù)時(shí),最高位為符號(hào)位。符號(hào)數(shù)字化:

0---正數(shù)

1---負(fù)數(shù)數(shù)的補(bǔ)碼表示:(1)符號(hào)位為0時(shí),表示的數(shù)為正數(shù),其后面的n-1位為數(shù)值部分。(2)符號(hào)位為1時(shí),表示的數(shù)為負(fù)數(shù),其后面的n-1位按位取反且最低位加1為數(shù)值部分。n位二進(jìn)制補(bǔ)碼表示范圍:

-2n-1-

-

-

(2n-1-1)參看p154-p1556.1帶符號(hào)數(shù)的算術(shù)運(yùn)算字長(zhǎng):n位6.1帶符號(hào)數(shù)的算術(shù)運(yùn)算6.1.3帶符號(hào)數(shù)的運(yùn)算

運(yùn)算:算術(shù)運(yùn)算、邏輯運(yùn)算

算術(shù)運(yùn)算:加、減、乘、除、比較

邏輯運(yùn)算:移位運(yùn)算

本節(jié)中約定參加運(yùn)算的數(shù)字長(zhǎng):8位,16位;對(duì)應(yīng)數(shù)的表示范圍。若字長(zhǎng)確定則數(shù)的表示范圍隨之確定;若運(yùn)算結(jié)果超出數(shù)的表示范圍,則應(yīng)進(jìn)行溢出處理。2022年12月13日376.1帶符號(hào)數(shù)的算術(shù)運(yùn)算6.1.3帶符號(hào)數(shù)的運(yùn)算20226.1帶符號(hào)數(shù)的算術(shù)運(yùn)算6.1.3帶符號(hào)數(shù)的運(yùn)算(續(xù))數(shù)的運(yùn)算分類:

加法: 加法指令 ADD

減法: 減法指令 SUB

乘法: 乘法指令 IMUL

除法: 除法指令 IDIV

移位: 移位指令 SAR、SAL、SHL

比較: 比較指令 CMP簡(jiǎn)單舉例說(shuō)明運(yùn)算結(jié)果可表示,結(jié)果溢出的情況(DEBUG下演示)6.1帶符號(hào)數(shù)的算術(shù)運(yùn)算6.1.3帶符號(hào)數(shù)的運(yùn)算(續(xù))6.1帶符號(hào)數(shù)的算術(shù)運(yùn)算6.1.4帶符號(hào)數(shù)的加減運(yùn)算的溢出問(wèn)題嚴(yán)重問(wèn)題:帶符號(hào)數(shù)的溢出問(wèn)題。CPU報(bào)告溢出:產(chǎn)生溢出時(shí),CPU將標(biāo)志位OF置為1。程序員處理:程序檢測(cè),若OF=1則溢出,轉(zhuǎn)向溢出處理。例如:如下例子產(chǎn)生溢出的情況(DEBUG下演示,注意加減運(yùn)算對(duì)符號(hào)位的影響,特別是對(duì)OF標(biāo)志的影響)P155例子6.496+70p156例子6.5(-128)+(-2)P157例子6.86.1帶符號(hào)數(shù)的算術(shù)運(yùn)算6.1.4帶符號(hào)數(shù)的加減運(yùn)算的溢6.1帶符號(hào)數(shù)的算術(shù)運(yùn)算6.1.4帶符號(hào)數(shù)的加減運(yùn)算的溢出問(wèn)題(續(xù))避免結(jié)果溢出的產(chǎn)生:擴(kuò)大數(shù)據(jù)位數(shù)方法:CBW---把字節(jié)轉(zhuǎn)換為字,把AL的D7復(fù)制到AH的所有位。CWD---把字轉(zhuǎn)換為雙字,把AX的D15復(fù)制到DX的所有位。參看P158程序6.16.1帶符號(hào)數(shù)的算術(shù)運(yùn)算6.1.4帶符號(hào)數(shù)的加減運(yùn)算的溢6.1帶符號(hào)數(shù)的算術(shù)運(yùn)算6.1.5帶符號(hào)數(shù)的乘除、移位、比較運(yùn)算

(1)乘法

指令格式:IMUL寄存器/內(nèi)存 隱含操作數(shù)1:字節(jié)---AL,字---AX

(2)除法

指令格式:

IDIV 寄存器/內(nèi)存

隱含操作數(shù)1:字節(jié)---AX,字---DX:AX2022年12月13日416.1帶符號(hào)數(shù)的算術(shù)運(yùn)算6.1.5帶符號(hào)數(shù)的乘除、移位、6.1帶符號(hào)數(shù)的算術(shù)運(yùn)算(3)算術(shù)右移

指令格式:SAR目的,移位的次數(shù)

算術(shù)移位方法:目的操作數(shù)的各位右移1位,最低位進(jìn)入進(jìn)位位,空出的位用符號(hào)位填充。

(適用于帶符號(hào)數(shù),其余同第三章介紹的移位指令)

簡(jiǎn)單舉例6.1帶符號(hào)數(shù)的算術(shù)運(yùn)算(3)算術(shù)右移6.1帶符號(hào)數(shù)的算術(shù)運(yùn)算(4)帶符號(hào)數(shù)的比較

指令格式:

CMP目的操作數(shù),源操作數(shù)帶符號(hào)數(shù)比較后檢查標(biāo)志:OF、ZF、SF

用來(lái)檢查上述條件的助記符如下:

JE JGJGEJLJLE參看P161例子6.122022年12月13日436.1帶符號(hào)數(shù)的算術(shù)運(yùn)算(4)帶符號(hào)數(shù)的比較2022年122022年12月13日44第6章帶符號(hào)數(shù)、字符串和表6.1帶符號(hào)數(shù)的運(yùn)算

6.1.1帶符號(hào)數(shù)的概念 6.1.2帶符號(hào)數(shù)的補(bǔ)碼表示

6.1.3帶符號(hào)數(shù)的運(yùn)算 6.1.4帶符號(hào)數(shù)的加減運(yùn)算的溢出問(wèn)題6.1.5帶符號(hào)數(shù)的乘除、移位、比較運(yùn)算6.2字符串和表操作 6.2.1字符串操作 6.2.2XLAT指令和查表2022年12月13日442022年12月12日14第6章帶符號(hào)數(shù)、字符串和表66.2字符串和表操作6.2.1字符串操作串處理指令處理存放在存儲(chǔ)器里的數(shù)據(jù)串,串指令可以處理字節(jié)或字,386及后繼機(jī)型還可以處理雙字。

串處理指令包括:

MOVS串傳送 CMPS串比較

SCAS串掃描 LODS從串取

STOS存入串

INS串輸入(從I/O端口輸入)

OUTS串輸出(向I/O端口輸出)2022年12月13日456.2字符串和表操作6.2.1字符串操作2022年12月6.2字符串和表操作6.2.1字符串操作

使用的寄存器: DS、SI、ES、DI、CX DS:SI---指向源操作數(shù) ES:DI---指向目的操作數(shù) CX:重復(fù)執(zhí)行的次數(shù)

方向標(biāo)志的使用: DF:指字符串指令自動(dòng)使指針SI、DI遞增或者遞減 DF=0自動(dòng)增量,DF=1自動(dòng)減量 指令CLD;DF=0 指令STD;DF=16.2字符串和表操作6.2.1字符串操作6.2字符串和表操作6.2.1字符串操作串指令只能處理一個(gè)字符/字、雙字。而串指令加上重復(fù)前綴即可方便的處理一個(gè)字符串。

串處理指令使用的重復(fù)前綴如下:

REP 重復(fù) REPE/REPZ 相等/為零則重復(fù) REPNE/REPNZ 不相等/不為零則重復(fù)6.2字符串和表操作6.2.1字符串操作6.2字符串和表操作1)與REP相配合工作

MOVS,STOS,LODS,INS和OUTS指令(1)格式:REP串指令

執(zhí)行的操作①若(countreg)=0,則退出REP,否則繼續(xù)執(zhí)行。②(countreg)=(countreg)-1③執(zhí)行其后的串指令④重復(fù)①-③其中計(jì)數(shù)長(zhǎng)度為16位時(shí),用CX作為countreg,計(jì)數(shù)長(zhǎng)度為32位時(shí),用ECX作為countreg。2022年12月13日486.2字符串和表操作1)與REP相配合工作2022年16.2字符串和表操作(2) MOVS串傳送指令

MOVS DST,SRC MOVSB(字節(jié)) MOVSW(字)

MOVSD(雙字)(386及后繼機(jī)型可用)

功能:把源變址指向的寄存器數(shù)據(jù)段中的內(nèi)容傳送到目的變址寄存器指向的附加段中去。

執(zhí)行該指令前的準(zhǔn)備工作:①數(shù)據(jù)段中源串首地址②附加段中目的串首地址③數(shù)據(jù)串長(zhǎng)度④方向標(biāo)志:建立方向標(biāo)志的指令CLDSTD

參看x86-P164-el.asm2022年12月13日496.2字符串和表操作(2) MOVS串傳送指令2022年16.2字符串和表操作(3)STOS指令

STOSDSTSTOSB(字節(jié))STOSW(字)

STOSD(雙字)功能:把累加器中的內(nèi)容存入由目的變址寄存器指向的附加段的單元中。

STOS指令在初始化某一緩沖區(qū)時(shí)很有用。參看x86-P165-el.asm2022年12月13日506.2字符串和表操作(3)STOS指令2022年12月16.2字符串和表操作(4)LODS指令

LODSSRCLODSB(字節(jié))LODSW(字)

LODSD(雙字)功能:把由源變址寄存器指向的數(shù)據(jù)段的單元中內(nèi)容存入累加器中。

LODS指令用于將緩沖區(qū)中的一串字符逐次取出來(lái)測(cè)試。2022年12月13日516.2字符串和表操作(4)LODS指令2022年12月126.2字符串和表操作2)與REPE/REPZ和REPNE/REPNZ聯(lián)合工作的CMPS和SCAS指令

(1)REPE/REPZ重復(fù)串操作格式:REPE/REPZ串指令執(zhí)行的操作:①若(countreg)=0或ZF=0時(shí)則退出,否則往下繼續(xù)執(zhí)行。②(countreg)=(countreg)-1③執(zhí)行其后的串指令④重復(fù)①-③2022年12月13日526.2字符串和表操作2)與REPE/REPZ和REPNE6.2字符串和表操作(2)REPNE/REPNZ執(zhí)行的操作格式:REPNE/REPNZ串指令執(zhí)行的操作:①若(countreg)=0或ZF=1時(shí)則退出,否則往下繼續(xù)執(zhí)行。②(countreg)=(countreg)-1③執(zhí)行其后的串指令④重復(fù)①-③6.2字符串和表操作(2)REPNE/REPNZ執(zhí)行的操6.2字符串和表操作(3)CMPS指令

CMPSDST,SR

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論