匯編語言程序設(shè)計(jì)簡明教程_第1頁
匯編語言程序設(shè)計(jì)簡明教程_第2頁
匯編語言程序設(shè)計(jì)簡明教程_第3頁
匯編語言程序設(shè)計(jì)簡明教程_第4頁
匯編語言程序設(shè)計(jì)簡明教程_第5頁
已閱讀5頁,還剩97頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1匯編語言程序設(shè)計(jì)

簡明教程2第一章匯編語言基礎(chǔ)1.1計(jì)算機(jī)內(nèi)數(shù)據(jù)的表示1.2計(jì)算機(jī)組織1.3指令、程序和程序設(shè)計(jì)語言1.480x86寄存器1.580x86CPU的工作模式 習(xí)題一3匯編語言的特點(diǎn):1.面向計(jì)算機(jī)“硬件”進(jìn)行程序設(shè)計(jì)2.使用與機(jī)器指令同級(jí)的符號(hào)指令編寫程序3.程序短小、運(yùn)行速度快、發(fā)揮計(jì)算機(jī)的全部性能學(xué)習(xí)匯編語言的目的:1.深刻理解計(jì)算機(jī)硬件、軟件的工作原理2.深刻理解基本控制結(jié)構(gòu)程序的編制、計(jì)算機(jī)實(shí)現(xiàn)3.編寫要求實(shí)時(shí)、高效的應(yīng)用程序4 1.1.1進(jìn)位計(jì)數(shù)制

1.1.2數(shù)據(jù)組織

1.1.3無符號(hào)數(shù)的表示

1.1.4有符號(hào)數(shù)的表示

1.1.5字符編碼

1.1.6BCD碼1.1計(jì)算機(jī)內(nèi)數(shù)據(jù)的表示5進(jìn)位計(jì)數(shù)制三個(gè)基本特征:有限個(gè)數(shù)字符號(hào):0,1,2,……,R-1,“R”稱為“基數(shù)”;“逢R進(jìn)1”;“權(quán)展開式”:小數(shù)點(diǎn)向左各數(shù)字的“權(quán)”分別是R0,R1,R2,R3,……。小數(shù)點(diǎn)向右各數(shù)字的“權(quán)”分別是R-1,R-2,R-3,……。D=dn-1dn-2dn-3……d2d1d0.d-1d-2……d-m=dn-1×Rn-1+……+d1×R1+d0×R0+d-1×R-1+……+d-m×R-m1.1.1進(jìn)位計(jì)數(shù)制610個(gè)數(shù)字符號(hào):0,1,2,……,9;“逢十進(jìn)一”;小數(shù)點(diǎn)向左各數(shù)字的“權(quán)”是100,101,102,103,……小數(shù)點(diǎn)向右各數(shù)字的“權(quán)”是10-1,10-2,10-3,……。[例]:323.31=3×102+2×101+3×100+3×10-1+1×10-2。十進(jìn)制數(shù)用它原來的形式表示,如123,-36等,也可以在數(shù)值后面加上字母“D”或“d”,如123D,-36d等。1.十進(jìn)制計(jì)數(shù)法7計(jì)算機(jī)內(nèi)部采用“二進(jìn)制”表示數(shù)據(jù)。

2個(gè)數(shù)字符號(hào):0,1;

“逢二進(jìn)一”:用“進(jìn)位”的方法表示大于1的數(shù);

“權(quán)展開式”:

小數(shù)點(diǎn)向左各數(shù)字的“權(quán)”是20,21,22,23,……。

小數(shù)點(diǎn)向右各數(shù)字的“權(quán)”是2-1,2-2,2-3,……。

二進(jìn)制數(shù)需要在數(shù)字的后面加上字母B。例:10110111B2.二進(jìn)制計(jì)數(shù)法

8十進(jìn)制數(shù)轉(zhuǎn)換為二進(jìn)制數(shù)9二進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制數(shù)(11011.101)2=1×24+1×23+0×22+1×21+ 1×20+1×2-1+0×2-2+1×2-3=(27.625)10

103.八進(jìn)制和十六進(jìn)制計(jì)數(shù)法八進(jìn)制:八進(jìn)制使用的數(shù)字符號(hào):0,1,2,3,4,5,6,7。一位8進(jìn)制數(shù)可以方便地轉(zhuǎn)換成3位二進(jìn)制數(shù)

(1101100.0101)2 =(1

101

100.010

1)2

=(001

101

100.010

100)2 =(154.24)811十六進(jìn)制十六進(jìn)制使用的數(shù)字符號(hào):0~9,A~F。書寫十六進(jìn)制數(shù)時(shí),在它各位數(shù)字的后面加上“H”。如果十六進(jìn)制數(shù)以字母A~F開始,還要在前面添加0。 例:3AFH,0FF3DH一位十六進(jìn)制數(shù)可以方便地轉(zhuǎn)換成4位二進(jìn)制數(shù)(1101100.0101)2 =(110

1100.0101)2 =(0110

1100.0101)2 =(6C.5)16121.1.2 數(shù)據(jù)組織1.位(bit比特)--最小信息表示單位2.字節(jié)(Byte)--最小信息存儲(chǔ)單位3.字(Word)和雙字(DoubleWord)131.1.3 無符號(hào)數(shù)的表示用字節(jié)、字、雙字或者更多的字節(jié)來存儲(chǔ)和表示。用N位二進(jìn)制表示一個(gè)無符號(hào)數(shù)時(shí),最小的數(shù)是0,最大的數(shù)是2N-1(N位二進(jìn)制111……111)。無符號(hào)數(shù)需要增加它的位數(shù)時(shí),在它的左側(cè)添加若干個(gè)“0”,稱為“零擴(kuò)展”?!斑M(jìn)位標(biāo)志(CarryoutFlag,CF)”表示二個(gè)無符號(hào)數(shù)運(yùn)算結(jié)果的特征。如果CF=1,表示它們的加法有“進(jìn)位”,或者它們的減法有“借位”。CF=0,則沒有產(chǎn)生進(jìn)位或借位。-----正數(shù)和零的集合141.1.4 有符號(hào)數(shù)的表示1.原碼最左邊一位二進(jìn)制表示這個(gè)數(shù)的符號(hào):“0”代表正,“1”代表負(fù)后面是它的“有效數(shù)字”一個(gè)字節(jié)存儲(chǔ)有符號(hào)數(shù)原碼,有127個(gè)正數(shù)(1~127),127個(gè)負(fù)數(shù)(-1~-127)和2個(gè)“0”,“正”0:00000000,“負(fù)”0:10000000。原碼的表示規(guī)則簡單,但是運(yùn)算規(guī)則比較復(fù)雜,不利于計(jì)算機(jī)高速運(yùn)算的實(shí)現(xiàn)。---原碼、反碼、補(bǔ)碼152.反碼用最高位“0”表示符號(hào)為正,“1”表示符號(hào)為負(fù)。符號(hào)位之后的二進(jìn)制位用來存儲(chǔ)這個(gè)數(shù)的有效數(shù)字:

正數(shù)的有效數(shù)字不變,負(fù)數(shù)的有效數(shù)字取反。對(duì)于正數(shù)X=dn-2dn-3……d2d1d0,

[X]反

=X=0dn-2dn-3……d2d1d0。對(duì)于負(fù)數(shù)Y=-dn-2dn-3……d2d1d0,

[Y]反

=1111…111-|Y|=2n-1-|Y|=2n-1+Y。

1字節(jié)存儲(chǔ)有符號(hào)數(shù)反碼,有127個(gè)正數(shù)(1~127),127個(gè)負(fù)數(shù)(-1~-127)和2個(gè)“0”,“正”0:00000000,

“負(fù)”0:11111111。反碼的運(yùn)算規(guī)則仍然比較復(fù)雜,可以用作原碼和常用的補(bǔ)碼之間的一個(gè)過渡。163.補(bǔ)碼

用最高有效位(MSB)表示一個(gè)有符號(hào)數(shù)的符號(hào):

“1”表示負(fù),“0”表示正。其他二進(jìn)制位用來存儲(chǔ)這個(gè)數(shù)的有效數(shù)字:

正數(shù)的有效數(shù)字不變,負(fù)數(shù)的有效數(shù)字取反后最低位加1。用字節(jié)存儲(chǔ)一個(gè)有符號(hào)數(shù)時(shí),對(duì)于正數(shù)X=dn-2dn-3……d2d1d0,

[X]補(bǔ)

=X=0dn-2dn-3……d2d1d0。對(duì)于負(fù)數(shù)Y=-dn-2…d1d0,

[Y]補(bǔ)

=1(dn-2…d1d0)#+1=1111…111-|Y|+1

=2n-|Y|=2n+Y。17一字節(jié)存儲(chǔ)有符號(hào)數(shù)補(bǔ)碼時(shí),有127個(gè)正數(shù)(1~127),

128個(gè)負(fù)數(shù)(-1~-128),1個(gè)“0”(00000000)。

其中,[-1]補(bǔ)=11111111,[-128]補(bǔ)=10000000。把一個(gè)數(shù)補(bǔ)碼的所有位(包括符號(hào)位)“取反加1”,得到這

個(gè)數(shù)相反數(shù)的補(bǔ)碼。稱為“求補(bǔ)”,[[X]補(bǔ)]求補(bǔ)=[-X]補(bǔ)。已知一個(gè)負(fù)數(shù)的補(bǔ)碼,求這個(gè)數(shù)自身(真值)時(shí),可以先求出這個(gè)數(shù)相反數(shù)的補(bǔ)碼。[例]:已知[X]補(bǔ)=10101110,求X的值:

[-X]補(bǔ)=[[X]補(bǔ)]求補(bǔ)=[10101110]求補(bǔ)=01010001+1=01010010

于是,-X=[+1010010]2=+82

于是,X=-82

18真值(十進(jìn)制)二進(jìn)制表示原碼反碼補(bǔ)碼+127+1111111011111110111111101111111+1+0000001000000010000000100000001+0+0000000000000000000000000000000-0-0000000100000001111111100000000-1-0000001100000011111111011111111-2-0000010100000101111110111111110-127-1111111111111111000000010000001-128-10000000無無10000000部分?jǐn)?shù)的8位二進(jìn)制原碼、反碼和補(bǔ)碼19一個(gè)補(bǔ)碼需要增加它的位數(shù)時(shí),對(duì)于正數(shù),需要在它的左側(cè)添加若干個(gè)“0”,對(duì)于負(fù)數(shù),需要在它的左側(cè)添加若干個(gè)“1”,

用它的符號(hào)位來填充增加的“高位”,稱為“符號(hào)擴(kuò)展”。在處理不同長度有符號(hào)數(shù)的時(shí)候,必需使用符號(hào)擴(kuò)展。(在處理無符號(hào)二進(jìn)制數(shù)的時(shí)候,可以使用零擴(kuò)展)4.

補(bǔ)碼的擴(kuò)展[例]:

[-5]補(bǔ)

=11111011(8位)=1111111111111011(16位)

[+5]補(bǔ)

=00000101(8位)=0000000000000101(16位)20

大多數(shù)高級(jí)程序設(shè)計(jì)語言允許程序員包含不同大小的整數(shù)的表達(dá)式。那么當(dāng)一個(gè)表達(dá)式的兩個(gè)操作數(shù)大小不同的時(shí)候,有些語言會(huì)報(bào)錯(cuò),有些語言會(huì)自動(dòng)將操作數(shù)轉(zhuǎn)換成一個(gè)統(tǒng)一的格式,這種轉(zhuǎn)換是有代價(jià)的。因此,如果你不希望編譯器在你不知情的情況下自動(dòng)加入各種轉(zhuǎn)換到你原本非常完美的代碼中,就需要掌握編譯器是如何處理這些表達(dá)式的。要求提供顯式轉(zhuǎn)換的語言的優(yōu)點(diǎn)在于編譯器永遠(yuǎn)不會(huì)在程序員不知情的情況下在任何事情。21

關(guān)于符號(hào)擴(kuò)展和零擴(kuò)展,有一點(diǎn)需要明確的是,它們是需要付出代價(jià)的。將一個(gè)小整數(shù)賦值給一個(gè)大整數(shù)可能會(huì)比在同樣大小的整數(shù)變量間傳輸數(shù)據(jù)需要更多的機(jī)器指令(執(zhí)行時(shí)間更長),因此,在一個(gè)數(shù)學(xué)表達(dá)式或者一條賦值語句中混合使用不同大小的變量要小心。22補(bǔ)碼的運(yùn)算遵循以下規(guī)則:

[X+Y]補(bǔ)=[X]補(bǔ)+[Y]補(bǔ)

[X-Y]補(bǔ)=[X]補(bǔ)-[Y]補(bǔ) ([X-Y]補(bǔ)=[X]補(bǔ)+[-Y]補(bǔ)=[X]補(bǔ)+[[Y]補(bǔ)]求補(bǔ))“溢出標(biāo)志(OverflowFlag,OF)”表示有符號(hào)數(shù)運(yùn)算特征。

OF=1,表示運(yùn)算結(jié)果超過了表示范圍,稱為“溢出”,

OF=0,沒有產(chǎn)生溢出。計(jì)算機(jī)自身用“雙進(jìn)位法”判斷是否產(chǎn)生“溢出”:

補(bǔ)碼最左邊2個(gè)位上的進(jìn)位相等,沒有溢出,反之有溢出。5.

補(bǔ)碼的運(yùn)算23同號(hào)數(shù)和異號(hào)數(shù)相加使用相同的規(guī)則;有符號(hào)數(shù)和無符號(hào)數(shù)加法使用相同的規(guī)則減法可以用加法實(shí)現(xiàn)(對(duì)于電子計(jì)算機(jī)內(nèi)的開關(guān)電路,

求補(bǔ)是十分容易實(shí)現(xiàn)的)補(bǔ)碼運(yùn)算規(guī)則的優(yōu)點(diǎn):上述特性可以用來簡化運(yùn)算器電路,簡化指令系統(tǒng)計(jì)算機(jī)內(nèi)的有符號(hào)數(shù)一般都用補(bǔ)碼表示,除非特別說明。24“ASCII(AmericanStandardCodeforInformationInterchange,美國信息交換標(biāo)準(zhǔn)編碼)”。7位二進(jìn)制表示一個(gè)字母、數(shù)字或符號(hào),包含128個(gè)不同的編碼。一個(gè)字符的ASCII碼占用一個(gè)字節(jié),低7位是它的ASCII碼,最高位置“0”,或者用作“校驗(yàn)位”。1.1.5 字符編碼25ASCII編碼的前32個(gè)(編碼00H~1FH)用來表示“控制字符”,例如CR(“回車”,編碼0DH),LF(“換行”,編碼0AH)。ASCII編碼30H~39H用來表示數(shù)字字符“0”~“9”。它們的高3位為011,低4位就是這個(gè)數(shù)字字符對(duì)應(yīng)的二進(jìn)制表示。ASCII編碼41H~5AH用來表示大寫字母“A”~“Z”,它們的高2位為01。ASCII編碼61H~7AH用來表示小寫字母“a”~“z”,它們的高2位為10。小寫字母的編碼比對(duì)應(yīng)的大寫字母編碼大20H。26用一組四位二進(jìn)制來表述一位十進(jìn)制數(shù),組間仍然按照“逢十進(jìn)一”的規(guī)則進(jìn)行,稱為“BCD碼(BinaryCodedDecimal)”。壓縮的BCD碼用一個(gè)字節(jié)存儲(chǔ)2位十進(jìn)制數(shù),高4位二進(jìn)制表示高位十進(jìn)制數(shù),低4位二進(jìn)制表示低位十進(jìn)制數(shù)??梢杂孟嗤瑪?shù)字的十六進(jìn)制數(shù)表述。非壓縮的BCD碼用一個(gè)字節(jié)存儲(chǔ)1位十進(jìn)制數(shù),低4位二進(jìn)制表示該位十進(jìn)制數(shù),對(duì)高4位的內(nèi)容不作規(guī)定。1.1.6 BCD碼十進(jìn)制數(shù)25的壓縮BCD碼用25H表示。數(shù)字字符‘7’的ASCII碼37H就是數(shù)7的非壓縮BCD碼2741H: 有符號(hào)數(shù)+65的補(bǔ)碼 無符號(hào)數(shù)65

大寫字母‘A’的ASCII碼 十進(jìn)制數(shù)41D的壓縮BCD碼計(jì)算機(jī)內(nèi)的一組二進(jìn)制編碼和它們的“原型”之間存在著

“一對(duì)多”的關(guān)系:知情者:定義、使用該數(shù)據(jù)的程序員281.2計(jì)算機(jī)組織

1.2.1計(jì)算機(jī)組成1.2.2中央處理器1.2.3存儲(chǔ)器1.2.4總線1.2.5外部設(shè)備和接口

29“存儲(chǔ)程序原理”:把程序事先存儲(chǔ)在計(jì)算機(jī)內(nèi)部,計(jì)算機(jī)通過

執(zhí)行程序?qū)崿F(xiàn)高速數(shù)據(jù)處理“五大功能模塊”:電子數(shù)字計(jì)算機(jī)由運(yùn)算器、控制器、存儲(chǔ)器

、輸入設(shè)備、輸出設(shè)備“馮·諾依曼體系結(jié)構(gòu)”:30中央處理器(CentralProcessUnit,CPU)”或“微處理器(MicroProcessUnit,MPU)”:把控制器、運(yùn)算器、寄存器和高速緩沖存儲(chǔ)器集成在一塊集成電路上。Intel8086與它兼容的若干微處理器,統(tǒng)稱為80X86微處理器。寄存器:由電子線路構(gòu)成的一個(gè)電子器件,可以用來儲(chǔ)存若干位二進(jìn)制。寄存器可以存儲(chǔ)運(yùn)算過程的中間結(jié)果,節(jié)省反復(fù)訪問內(nèi)存儲(chǔ)器的時(shí)間開銷高速緩沖存儲(chǔ)器(Cache):容量較小,速度較快的存儲(chǔ)器。把將要執(zhí)行的程序指令和將要使用的數(shù)據(jù)“提前”取到CPU的內(nèi)部,加速程序的執(zhí)行。1.2.2 中央處理器31存儲(chǔ)器用于存儲(chǔ)程序和數(shù)據(jù),是計(jì)算機(jī)的重要部件。存儲(chǔ)器屬于計(jì)算機(jī)“主機(jī)”的一部份,為了和磁盤存儲(chǔ)器等“外部存儲(chǔ)器”加以區(qū)分,也稱為“內(nèi)存儲(chǔ)器”或者“主存儲(chǔ)器”。1.2.3 存儲(chǔ)器內(nèi)存層次結(jié)構(gòu)3280X86微機(jī)內(nèi)存儲(chǔ)器以“字節(jié)”為基本單位,

稱為“存儲(chǔ)單元”。每個(gè)字節(jié)用一組二進(jìn)制數(shù)進(jìn)行編號(hào),稱為“地址”地址的位數(shù)決定了可以編號(hào)的字節(jié)的個(gè)數(shù),也就是

內(nèi)存儲(chǔ)器的大小,稱作容量。1.

存儲(chǔ)器物理組織假設(shè)“地址”20300H的單元存放了數(shù)據(jù)34H,

寫作(20300H)=34H331KB(千字節(jié))=210B=1024B≈103B1MB(兆字節(jié))=210KB=220B≈106B1GB(吉字節(jié))=210MB=230B≈109B1TB(太字節(jié))=210GB=240B≈1012B用16位二進(jìn)制表示存儲(chǔ)器地址:

最小地址為0000H,最大地址為0FFFFH,

共有65536(64K=216)個(gè)不同的地址,

最多可以連接64KB的存儲(chǔ)器。8086CPU有20位地址線,可以連接最多1MB=220B的內(nèi)存儲(chǔ)器34讀操作:從某個(gè)存儲(chǔ)單元取出事先存儲(chǔ)的程序指令或數(shù)據(jù)

讀操作不改變?cè)鎯?chǔ)單元的內(nèi)容。寫操作:把一個(gè)數(shù)據(jù)存入指定的存儲(chǔ)單元。寫操作之后,

該存儲(chǔ)單元原來的內(nèi)容被新的內(nèi)容所“覆蓋”,不復(fù)存在一次存儲(chǔ)器的讀操作或?qū)懖僮鹘y(tǒng)稱為對(duì)存儲(chǔ)器的一次

“訪問(Access)”。2.

存儲(chǔ)器操作

從20300H單元讀出它的內(nèi)容“34H”之后,該單元的內(nèi)容仍然是“34H”。向20300H單元寫入“11H”之后,該單元內(nèi)容變成“11H”,原來的數(shù)據(jù)“34H”被覆蓋。35

一項(xiàng)數(shù)據(jù)可能占用連續(xù)的多個(gè)存儲(chǔ)單元:

高位的數(shù)據(jù)存入地址較大的存儲(chǔ)單元用多個(gè)存儲(chǔ)單元中的最小地址來表示該數(shù)據(jù)的地址。3.

存儲(chǔ)器內(nèi)的數(shù)據(jù)組織例如,數(shù)據(jù)12345678H存儲(chǔ)在地址為23000H~23003H的4個(gè)連續(xù)的內(nèi)存單元,每個(gè)存儲(chǔ)單元存儲(chǔ)這個(gè)數(shù)據(jù)的一部分(8b),順序?yàn)椋?8H,56H,34H,12H。用23000H作為這個(gè)“雙字”數(shù)據(jù)的存儲(chǔ)地址。36對(duì)連續(xù)的多個(gè)存儲(chǔ)單元進(jìn)行讀寫時(shí),發(fā)送給存儲(chǔ)器的是這個(gè)數(shù)據(jù)的最小地址。向存儲(chǔ)器發(fā)出一個(gè)地址信號(hào)之后,可以進(jìn)行1B/2B/4B數(shù)據(jù)的讀寫,對(duì)應(yīng)的地址稱為“字節(jié)地址”、“字地址”和“雙字地址”。地址的這個(gè)“屬性”在指令中指明。向存儲(chǔ)器發(fā)出地址23000H和“讀命令”后,如果這個(gè)地址是“字節(jié)地址”,那么讀出的內(nèi)容是78H,如果這個(gè)地址是“字地址”,那么讀出的內(nèi)容是5678H,如果這個(gè)地址是“雙字地址”,那么讀出的內(nèi)容是12345678H。371.2.4 總線總線的概念所謂總線,就是多個(gè)信息源分時(shí)傳送數(shù)據(jù)流到多個(gè)目的地的傳送通路。即一組公用的傳遞信號(hào)的連線。假如一組導(dǎo)線只連接一個(gè)信息源和一個(gè)負(fù)載,就不能稱為總線。

38微型計(jì)算機(jī)的系統(tǒng)構(gòu)成體現(xiàn)出以“總線”為信息“樞紐”的特點(diǎn)。39“總線(Bus)”:多個(gè)部件/設(shè)備公用的一組信號(hào)傳輸線。按照傳輸方向,有“輸出”、“輸入”以及“雙向”總線。按照傳輸?shù)膬?nèi)容,總線可以分為三組:

地址總線(AddressBus,AB),傳輸?shù)刂沸盘?hào),輸出; 數(shù)據(jù)總線(DataBus,DB),傳輸數(shù)據(jù)信號(hào),雙向;

控制總線(ControlBus,CB),傳輸控制信號(hào),大多數(shù)控

制信號(hào)為單向,輸入或輸出。地址總線的位數(shù)決定了可以連接存儲(chǔ)器的數(shù)量。數(shù)據(jù)總線的位數(shù)決定了一次可以存取數(shù)據(jù)的位數(shù)。40CPU處理器位數(shù)數(shù)據(jù)總線位數(shù)地址總線位數(shù)最大尋址空間8088/80188168201MB8086/801861616201MB8028616162416MB80386/804863232324GBPentium3264324GBPentiumII/P3/P432643664GB411.3.1指令和程序1.3.2 機(jī)器語言和匯編語言1.3.3 高級(jí)語言1.3指令、程序和程序設(shè)計(jì)語言42機(jī)器指令由若干位二進(jìn)制組成

操作碼:操作種類

操作數(shù):操作對(duì)象。機(jī)器指令可以由CPU直接執(zhí)行。指令:對(duì)計(jì)算機(jī)硬件發(fā)出的操作命令。指令系統(tǒng):某臺(tái)計(jì)算機(jī)所有指令的集合。符號(hào)指令:用“助記符”、“寄存器名”、“變量名”等記錄/書寫

的指令,不能由CPU直接執(zhí)行。助記符:用字母、文字表示的符號(hào)(操作碼,操作數(shù))4310001000→MOVR2,R0[R2←(R0)]10010111→ADDR1,R3[R1←(R1)+(R3)]10100001→SUBR0,R1[R0←(R0)-(R1)]指令系統(tǒng)示例44指令序號(hào)機(jī)器指令符號(hào)指令指令執(zhí)行后寄存器的值R0R1R2R3?XY?110000001MOVR0,R1XXY?210010001ADDR0,R12XXY?310100010SUBR0,R22X-YXY?實(shí)現(xiàn)計(jì)算R0←2X-Y的程序

45模型機(jī)

ALUA

256BYTERAMPCARH

程序控制器ID(指令譯碼器)IR(指令寄存器)DR數(shù)據(jù)總線地址總線程序計(jì)數(shù)器地址寄存器存儲(chǔ)器數(shù)據(jù)寄存器累加器算術(shù)邏輯單元控制信號(hào)輸入輸入輸出虛線以上是CPU46算術(shù)邏輯單元ALU

是執(zhí)行算術(shù)和邏輯運(yùn)算的裝置,它以累加器A的內(nèi)容作為一個(gè)操作數(shù),另一個(gè)操作數(shù)由內(nèi)部數(shù)據(jù)總線提供,可以是寄存器H中的內(nèi)容,也可以是由數(shù)據(jù)寄存器DR供給的由內(nèi)存讀出的內(nèi)容等。操作的結(jié)果通常放在累加器A中。程序計(jì)數(shù)器PC

要執(zhí)行的指令的地址由PC提供,并傳給AR地址寄存器,由它把要尋址的單元的地址通過地址總線,送至存儲(chǔ)器。47

從存儲(chǔ)器中取出的指令,由數(shù)據(jù)寄存器送至指令寄存器IR,經(jīng)指令譯碼器ID譯碼,通過控制電路,發(fā)送執(zhí)行一條指令所需的各種控制信息。若程序已存放在內(nèi)存中,則機(jī)器的執(zhí)行過程就是取指(取出指令)和執(zhí)行指令這兩個(gè)階段的循環(huán)。機(jī)器從停機(jī)狀態(tài)進(jìn)入運(yùn)行狀態(tài),要把第一條指令所在的地址賦給PC,然后就進(jìn)入取指階段。在取指階段從內(nèi)存中讀出的內(nèi)容必為指令,所以DR把它送至IR,然后由指令譯碼器譯碼,就知道此指令要執(zhí)行什么操作,在取指階段結(jié)束后就進(jìn)入執(zhí)行階段。當(dāng)一條指令執(zhí)行完以后,就進(jìn)入了下一條指令的取指階段。這樣的循環(huán)一直進(jìn)行到程序結(jié)束(遇到停機(jī)指令)48微機(jī)工作過程舉例

下面以一個(gè)極簡單的例子來說明程序的執(zhí)行過程。若要求機(jī)器把兩個(gè)數(shù)7和10相加。要使機(jī)器執(zhí)行這樣的操作當(dāng)然要給它編程序。在編程序時(shí)首先要檢查一下機(jī)器的指令系統(tǒng),這里用到三條指令。

助記符

機(jī)器碼二進(jìn)制十六進(jìn)制立即數(shù)送累加器(2字節(jié)指令)MOVA,N001111103EnnA中內(nèi)容加立即數(shù)(2字節(jié)指令)ADDA,N11000110C6nn暫停(1字節(jié)指令)HALT011101107649編寫程序MOVA,7HADDA,0AHHALT人工查指令表完成翻譯工作源程序機(jī)器碼(二進(jìn)制表示)機(jī)器碼(十六進(jìn)制)MOVA,7H00111110000001113E07HADDA,0AH1100011000001010C60AHHALT0111011076H50

假定本例程序在內(nèi)存中的存放如圖示地址

00MOVA017

02ADDA

031004HALT001111100000011111000110000010100111011051

對(duì)于第一條指令MOVA,7由于它是一個(gè)兩字節(jié)指令,存放時(shí)用了兩個(gè)存儲(chǔ)單元,這條指令的讀出需要兩次讀操作,第一次讀出的是操作碼,第二次讀出操作數(shù)。執(zhí)行過程:微機(jī)接通電源,復(fù)位電路使程序計(jì)數(shù)器PC的內(nèi)容自動(dòng)置0(不同微機(jī)PC的初值不同,即程序的起始地址不同),它是第一條指令的地址,在時(shí)鐘脈沖作用下,CPU開始一個(gè)節(jié)拍一個(gè)節(jié)拍地工作。首先進(jìn)入第一條指令的取指階段,具體地說:52PC的內(nèi)容(00H)送至地址寄存器(AR)當(dāng)PC的內(nèi)容可靠地送入地址寄存器后,PC的內(nèi)容自動(dòng)加1變?yōu)?1H地址寄存器把地址00H通過地址總線送至存儲(chǔ)器,經(jīng)地址譯碼器譯碼,選中00號(hào)單元CPU給出讀命令所選中的00號(hào)單元的內(nèi)容3EH讀至數(shù)據(jù)總線上讀出的內(nèi)容經(jīng)過數(shù)據(jù)總線送至數(shù)據(jù)寄存器DR因是取指階段的第一個(gè)字節(jié),取出的為操作碼,故DR把它送至指令寄存器IR,然后經(jīng)過譯碼發(fā)出執(zhí)行這條指令的各種控制命令。53

然后就轉(zhuǎn)入執(zhí)行第一條指令的階段。經(jīng)過對(duì)操作碼譯碼后知道,這是一條把操作數(shù)送累加器A的指令,而操作數(shù)在指令的第二個(gè)字節(jié),所以執(zhí)行第一條指令就必須把第二字節(jié)中的操作數(shù)取出來。取第二個(gè)字節(jié)的過程為:把PC的內(nèi)容01H送至地址寄存器PC的內(nèi)容可靠送AR后,PC自動(dòng)加1變?yōu)?2HAR通過地址總線AB把地址信號(hào)送存儲(chǔ)器,經(jīng)譯碼選中相應(yīng)單元CPU發(fā)出讀命令選中的存儲(chǔ)單元的內(nèi)容07H讀至數(shù)據(jù)總線DB通過DB把讀出的內(nèi)容送至DR因已知讀出的是操作數(shù),且指令要求把它送累加器A,故由DR通過數(shù)據(jù)總線送至A54到此,第一條指令執(zhí)行完畢進(jìn)入第二條指令的取指階段。取第二條指令的過程為:把PC的內(nèi)容02H送至ARPC自動(dòng)加1變?yōu)?3AR通過AB把02送至存儲(chǔ)器,經(jīng)譯碼后選中相應(yīng)單元CPU發(fā)出讀命令選中存儲(chǔ)單元的內(nèi)容C6H,讀出到數(shù)據(jù)總線上讀出的內(nèi)容通過數(shù)據(jù)總線送至DR因是取指階段,所以讀出的是操作碼,DR把它送至IR,經(jīng)過譯碼發(fā)出各種控制信息

經(jīng)過對(duì)指令譯碼后知道,此為加法指令,以A中的內(nèi)容為一操作數(shù),另一操作數(shù)在指令的第二個(gè)字節(jié)中,必須取出第二個(gè)字節(jié)。55

取第二個(gè)字節(jié)及執(zhí)行指令的過程為:把PC的內(nèi)容03送ARPC自動(dòng)加1變?yōu)?4AR通過AB將03送存儲(chǔ)器,經(jīng)譯碼選中相應(yīng)單元CPU發(fā)出讀命令選中的存儲(chǔ)單元的內(nèi)容0AH讀到DB上通過DB將數(shù)據(jù)送至DR因由指令譯碼已知讀出的為操作數(shù),且要與A中的內(nèi)容相加,故數(shù)據(jù)由DR通過內(nèi)部數(shù)據(jù)總線送至ALU的另一個(gè)輸入端A中的內(nèi)容送ALU,且執(zhí)行加法操作相加的結(jié)果由ALU輸出至累加器A中56

到此,第二條指令的執(zhí)行階段結(jié)束了,就轉(zhuǎn)入第三條指令的取指階段。按上述類似的過程取出第三條指令,經(jīng)譯碼后就停機(jī)。578086微處理器的結(jié)構(gòu)8086微處理器8086的編程結(jié)構(gòu)5859總線接口部件總線接口部件的功能是負(fù)責(zé)與存儲(chǔ)器、I/O端口傳送數(shù)據(jù)。CPU執(zhí)行指令時(shí),總線接口部件要配合執(zhí)行部件從指定的內(nèi)存單元或外設(shè)端口中取數(shù)據(jù),將數(shù)據(jù)傳送給執(zhí)行部件,或者把執(zhí)行的操作結(jié)果傳送到指定的內(nèi)存單元或外設(shè)端口中。執(zhí)行部件執(zhí)行部件的功能是負(fù)責(zé)指令的執(zhí)行。60通用寄存器

AXAHALBXBHBLCXCHCLDXDHDLSPBPSIDI61數(shù)據(jù)寄存器 累加器AX(Accumulator)基址寄存器BX(Base)計(jì)數(shù)寄存器CX(Count)數(shù)據(jù)寄存器DX(Data)這四個(gè)16位寄存器可分為高8位(AH、BH、CH和DH)與低8位(AL、BL、CL和DL)可分別尋址、獨(dú)立操作。

62

指針寄存器和變址寄存器 堆棧指針寄存器SP(StackPointer)基址指針寄存器BP(BasePointer)源變址寄存器SI(SourceIndex)目的變址寄存器DI(DestinationIndex)

SP用來確定欲讀寫堆棧的地址,BP用來存放在現(xiàn)行堆棧段的一個(gè)數(shù)據(jù)區(qū)的“基地址”。SI、DI用于變址操作,存放變址地址。63

指令指針I(yè)P和標(biāo)志寄存器F

指令指針I(yè)P(InstructionPointer) 指向當(dāng)前需要取出的指令字節(jié)

IP指向的是指令地址的段內(nèi)地址偏移量,又稱偏移地址(OffsetAddress)或有效地址(EA,EffectiveAddress)。 程序員不能對(duì)IP進(jìn)行存取操作,程序中的轉(zhuǎn)移指令、返回指令以及中斷處理能對(duì)IP進(jìn)行操作。IPFR64標(biāo)志寄存器FR(FlagRegister)

定義了9位6位狀態(tài)位(條件碼) C、A、Z、S、O、P3位控制位I、D、TOFDFIFTFSFZFAFPFCFInterruptenableDirectionTrapCarryAuxiliaryCarryZeroSignOverflowParity65進(jìn)位標(biāo)志CF,加減運(yùn)算后有進(jìn)位(借位)CF=1, 輔助進(jìn)位標(biāo)志AF零標(biāo)志ZF,結(jié)果為0,ZF=1

結(jié)果非0,ZF=0符號(hào)標(biāo)志SF,結(jié)果為正,SF=0

結(jié)果為負(fù),SF=1奇偶校驗(yàn)標(biāo)志PF,低8位中,“1”的個(gè)數(shù)為偶數(shù),PF=1, “1”的個(gè)數(shù)為奇數(shù),PF=0溢出標(biāo)志OF66中斷允許標(biāo)志IF:用于控制可屏蔽中斷。

IF=1,開中,IF=0關(guān)中。方向標(biāo)志DF:用于串操作

DF=0,增量操作,DF=1,減量操作。陷阱標(biāo)志TF:

TF=1,單步操作,TF=0,連續(xù)操作。67指令預(yù)取隊(duì)列由于跳轉(zhuǎn)與條件跳轉(zhuǎn)指令會(huì)使得預(yù)取隊(duì)列失效,因此在跳轉(zhuǎn)指令確實(shí)將控制轉(zhuǎn)交到目的位置的時(shí)候,它們執(zhí)行得比其他指令慢,CPU是無法重疊執(zhí)行下一條指令的取指與解碼和會(huì)轉(zhuǎn)移控制的跳轉(zhuǎn)指令的。因此,在執(zhí)行某條跳轉(zhuǎn)指令之后可能需要幾個(gè)時(shí)鐘周期才能恢復(fù)預(yù)取隊(duì)列的內(nèi)容。因此如果想要編寫快速的代碼,要盡量避免在程序中跳來跳去。如果在編寫程序的時(shí)候能夠判斷出哪一個(gè)跳轉(zhuǎn)條件出現(xiàn)的最頻繁,應(yīng)該小心安排程序,讓最常見的情況下程序會(huì)繼續(xù)執(zhí)行下一條指令而不是跳轉(zhuǎn)到別的地址去。68三、段寄存器(SegmentRegister)內(nèi)存中通常存放著三類信息:(1)代碼(指令)—指示微處理器執(zhí)行何種操作;(2)數(shù)據(jù)(字符、數(shù)值)—程序處理的對(duì)象;(3)堆棧信息—被保存的返回地址和中間結(jié)果等。CSDSSSES69

段的起始地址由稱為“段寄存器”的4個(gè)16位寄存器決定,這4個(gè)段寄存器為:(1)代碼段寄存器CS(CodeSegment)指向當(dāng)前的代碼段,指令由此段中取出;(2)堆棧段寄存器SS(StackSegment)指向當(dāng)前的堆棧段,堆棧操作的對(duì)象就是該段中存儲(chǔ)單元的內(nèi)容;70(3)數(shù)據(jù)段寄存器DS(DataSegment)指向當(dāng)前的數(shù)據(jù)段,通常用來存放程序變量(存儲(chǔ)器操作數(shù));(4)附加段寄存器ES(ExtraSegment)指向當(dāng)前的附加段,通常也用來存放數(shù)據(jù),以及一些專用指令的操作數(shù)。711.480x86寄存器1.4.1 數(shù)據(jù)寄存器1.4.2 地址寄存器1.4.3 段寄存器1.4.4 專用寄存器1.4.5 其它寄存器7216位80X86處理器有4個(gè)16位的通用數(shù)據(jù)寄存器。AX(累加器):最常用的數(shù)據(jù)寄存器BX(基址寄存器):存放一片內(nèi)存的首地址—“基址”CX(計(jì)數(shù)寄存器):存放重復(fù)操作的次數(shù)—“計(jì)數(shù)器”DX(數(shù)據(jù)寄存器):存放32位數(shù)據(jù)的高16位/存放端口地址通用數(shù)據(jù)寄存器可以拆分為2個(gè)8位寄存器使用,命名為:

AH,AL,BH,BL,CH,CL,DH,DL。32位80X86處理器的4個(gè)數(shù)據(jù)寄存器擴(kuò)展為32位,更名為EAX、EBX、ECX和EDX。1.4.1數(shù)據(jù)寄存器731.4.2 地址寄存器SP(堆棧指針):存放堆?!皸m敗钡钠频刂贰P(基址指針):存放堆棧中數(shù)據(jù)的偏移地址;SI(源變址寄存器):存放“源”數(shù)據(jù)區(qū)的偏移地址;DI(目的變址寄存器):存放“目的”數(shù)據(jù)區(qū)的偏移地址。變址寄存器:存放的地址可以按照要求自動(dòng)地增加/減少,地址寄存器不能再拆分使用(地址信息至少16位)。32位80X86處理器的地址寄存器擴(kuò)展為32位,命名為:ESP,EBP,ESI,EDI。741.4.4 專用寄存器IP寄存器稱為指令指針,存放即將執(zhí)行指令的偏移地址。4A00H:1020H……4A00H:1022HMOVAX,1020H4A00H:1025HADDAX,Y執(zhí)行“MOVAX,1020H”時(shí),IP=1025HFLAGS稱為“標(biāo)志寄存器”,存放CPU的兩類標(biāo)志:

狀態(tài)標(biāo)志:反映處理器當(dāng)前狀態(tài),如有無“溢出”、“進(jìn)位”

控制標(biāo)志:控制處理器的工作方式

75OF(OverflowFlag):溢出標(biāo)志

OF=1:兩個(gè)有符號(hào)數(shù)的運(yùn)算結(jié)果超出范圍,結(jié)果錯(cuò)誤。

OF=0:沒有溢出,結(jié)果正確。進(jìn)行無符號(hào)數(shù)運(yùn)算時(shí)也會(huì)產(chǎn)生新的OF標(biāo)志,此時(shí)無意義。狀態(tài)標(biāo)志1(OF和CF)CF(CarryOutFlag):進(jìn)位/借位標(biāo)志

CF=1:兩個(gè)無符號(hào)數(shù)的加法運(yùn)算有“進(jìn)位”,或者是減法運(yùn)算

有“借位”,需要對(duì)它們的“高位”進(jìn)行補(bǔ)充處理。

CF=0:沒有產(chǎn)生進(jìn)位或借位。進(jìn)行有符號(hào)數(shù)運(yùn)算時(shí)也會(huì)產(chǎn)生新的CF標(biāo)志,此時(shí)無意義。狀態(tài)標(biāo)志在每次運(yùn)算后產(chǎn)生76

SF(SignFlag):符號(hào)標(biāo)志,

SF=1,表示運(yùn)算結(jié)果的最高位為“1”。狀態(tài)標(biāo)志2(SF)

對(duì)于有符號(hào)數(shù)運(yùn)算

OF=0時(shí),結(jié)果正確:

SF=1表示運(yùn)算結(jié)果為負(fù)

SF=0表示運(yùn)算結(jié)果非負(fù)(正或零)

OF=1時(shí),結(jié)果是錯(cuò)誤的,符號(hào)位和正確值相反例如,兩個(gè)負(fù)數(shù)相加產(chǎn)生溢出,此時(shí)SF=0。對(duì)于無符號(hào)數(shù)運(yùn)算,SF無意義(但是可以看出結(jié)果的大小規(guī)模)狀態(tài)標(biāo)志在每次運(yùn)算后產(chǎn)生77PF(ParityFlag):奇偶標(biāo)志,可以用來進(jìn)行“奇偶校驗(yàn)”

PF=1運(yùn)算結(jié)果的低8位中有偶數(shù)個(gè)“1”(Even)

PF=0運(yùn)算結(jié)果的低8位中有奇數(shù)個(gè)“1”(Odd)ZF(ZeroFlag):零標(biāo)志ZF=1運(yùn)算結(jié)果為零,減法運(yùn)算后結(jié)果為零意味著兩個(gè)參加

運(yùn)算的數(shù)大小相等。ZF=0運(yùn)算結(jié)果非零。

狀態(tài)標(biāo)志3(ZF,AF,PF)AF:輔助進(jìn)位標(biāo)志,兩個(gè)BCD數(shù)運(yùn)算時(shí)b3位上的進(jìn)位,供運(yùn)算

后“調(diào)整”結(jié)果用,對(duì)其他數(shù)的運(yùn)算沒有意義。狀態(tài)標(biāo)志在每次運(yùn)算后產(chǎn)生78控制標(biāo)志(IF,TF,DF)控制標(biāo)志的值由指令設(shè)置

DF(DirectionFlag):方向標(biāo)志

DF=0執(zhí)行字符串指令后,用加法修改源或目的地址指針

DF=1用減法來修改地址指針I(yè)F(InterruptEnableFlag):中斷允許標(biāo)志,

IF=1允許處理器響應(yīng)“可屏蔽中斷請(qǐng)求”信號(hào),稱為“開中斷”

IF=0不允許處理器響應(yīng)“可屏蔽中斷請(qǐng)求”信號(hào),稱為“關(guān)中斷”。TF(TraceFlag):單步(跟蹤)標(biāo)志

TF=1時(shí),每執(zhí)行完一條指令都會(huì)產(chǎn)生一次“1號(hào)”中斷,該程序被暫停執(zhí)行。它用于程序的調(diào)試791.4.5 其它寄存器5個(gè)32位的控制寄存器,命名為CR0~CR4。

CR0寄存器的PE=1表示目前系統(tǒng)運(yùn)行在“保護(hù)模式”

PG=1表示允許進(jìn)行分頁操作。

CR3寄存器存放“頁目錄表”的基地址。32位80X86微處理器新增加的寄存器:8個(gè)用于調(diào)試的寄存器DR0~DR72個(gè)用于測(cè)試的寄存器TR6~TR780“段(Segment)”:內(nèi)存中的一片區(qū)域,用來存放某一種類型的信息。例如,用一片存儲(chǔ)區(qū)存放某程序所使用的數(shù)據(jù),該存儲(chǔ)區(qū)稱為“數(shù)據(jù)段”。類似的,還有存放程序代碼的“代碼段”,存放程序運(yùn)行時(shí)臨時(shí)信息的“堆棧段”等。采用分段結(jié)構(gòu)之后,內(nèi)存單元的地址由兩部分組成:所在段的起始地址,該單元在這個(gè)段內(nèi)的相對(duì)地址。段內(nèi)相對(duì)地址也稱為“偏移地址”,一般從0開始編碼。段的起始地址是這個(gè)段的所有單元公用的,相對(duì)固定。81

8086系統(tǒng)中內(nèi)存分段 解決20位內(nèi)存地址和16位地址計(jì)算能力的矛盾。

8086程序把1M字節(jié)的存儲(chǔ)空間看成為一組存儲(chǔ)段,各段的功能由具體用途而定,分別為代碼段、堆棧段、數(shù)據(jù)段和附加段。82

一個(gè)存儲(chǔ)段是存儲(chǔ)器的一個(gè)邏輯單位,其長度可達(dá)64K字節(jié),每段第一個(gè)字節(jié)的位置稱為“段起始地址”。對(duì)段起始地址的要求是:最好能被16整除(起始地址為××××0H)。段寄存器中存放了與段起始地址有關(guān)的16位“段基值”(SegmentBasevalue),幾個(gè)段可以相互重疊,也可指向同一個(gè)64K字節(jié)空間。83

在具有地址變換機(jī)構(gòu)的計(jì)算機(jī)中,有兩種存儲(chǔ)器地址:一種是邏輯地址(LogicalAddress)

—允許在程序中編排的地址一種是物理地址(PhysicalAddress)

—信息在存儲(chǔ)器中實(shí)際存放的地址848086系統(tǒng)中,對(duì)給定的任一存儲(chǔ)單元而言有兩部分邏輯地址;“段基值”—決定所在段第一個(gè)字節(jié)的位置;“段內(nèi)偏移量”(Offset)—該存儲(chǔ)單元相對(duì)于該段起始單元的距離。 “段基值”存放在段寄存器(CS、SS、DS、ES)中,“段內(nèi)偏移量”由SP、BP、SI、DI、IP、BX和直接地址以及上述寄存器和直接地址的組合而形成。85段基址:每個(gè)段20位起始地址的高16位,存放在專門的

“段寄存器”內(nèi)。每個(gè)段的偏移地址用16位二進(jìn)制表示。這樣,每個(gè)段最

多可以有216B=64KB。8086CPU的分段方法:例如,把“數(shù)據(jù)段”的段基址存放在“數(shù)據(jù)段寄存器”DS中,訪問數(shù)據(jù)時(shí),自動(dòng)從DS中取出段基址。86“邏輯地址”:用“段基址:偏移地址”表示的地址,是程序員在

匯編語言程序中使用的地址?!拔锢淼刂贰保涸L問存儲(chǔ)器的20位地址。計(jì)算機(jī)硬件把邏輯地址轉(zhuǎn)換為物理地址:

把“段基址”尾部添加4個(gè)0(相當(dāng)于乘上16),得到“段起始地址”,再加上偏移地址,就得到了它對(duì)應(yīng)的物理地址。物理地址=段基址×16+偏移地址87

每個(gè)邏輯地址對(duì)應(yīng)一個(gè)唯一的物理地址,但是一個(gè)物理地址可以對(duì)應(yīng)多個(gè)“邏輯地址”。使用一個(gè)段之前應(yīng)該把這個(gè)段的“段基址”裝入對(duì)應(yīng)的“段寄存器”。

8086CPU有4個(gè)段寄存器,因此允許同時(shí)使用4個(gè)“段”:數(shù)據(jù)段、代碼段、堆棧段、附加段(另一個(gè)數(shù)據(jù)段)邏輯地址2340H:1234H對(duì)應(yīng)于物理地址

23400H+1234H=24634H。物理地址24634H可以同時(shí)和

2463H:0004H、2460H:0034H、2400H:0634H……

等“邏輯地址”相對(duì)應(yīng)。88錯(cuò)誤認(rèn)識(shí):內(nèi)存被劃分成了一個(gè)一個(gè)的段,每一個(gè)段有一個(gè)段地址。其實(shí):內(nèi)存并沒有分段,段的劃分來自于CPU,由于8086CPU用“(段地址×16)+偏移地址=物理地址”的方式給出內(nèi)存單元的物理地址,使得我們可以用分段的方式來管理內(nèi)存。89

我們可以認(rèn)為:地址10000H~100FFH的內(nèi)存單元組成一個(gè)段,該段的起始地址(基礎(chǔ)地址)為10000H,段地址為1000H,大小為100H。90

我們也可以認(rèn)為地址10000H~1007FH、10080H~100FFH的內(nèi)存單元組成兩個(gè)段,它們的起始地址(基礎(chǔ)地址)為10000H和10080H,段地址為:1000H和1008H,大小都為80H。91

以后,在編程時(shí)可以根據(jù)需要,將若干地址連續(xù)的內(nèi)存單元看作一個(gè)段,用段地址×16定位段的起始地址(基礎(chǔ)地址),用偏移地址定位段中的內(nèi)存單元92內(nèi)存單元地址小結(jié):CPU訪問內(nèi)存單元時(shí),必須向內(nèi)存提供內(nèi)存單元的物理地址。8086CPU在內(nèi)部用段地址和偏移地址移位相加的方法形成最終的物理地址。思考下面的兩個(gè)問題。(1)觀察下面的地址,你有什么發(fā)現(xiàn)?物理地址段地址偏移地址

21F60H2000H1F60H2100H0F60H21F0H0060H21F6H0000H1F0

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(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)論