日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

8086 DS 和 ES 寄存器

發(fā)布時(shí)間:2025/1/21 编程问答 13 豆豆
生活随笔 收集整理的這篇文章主要介紹了 8086 DS 和 ES 寄存器 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

DS 寄存器和 ES 寄存器:

DS? 寄存器和? ES? 寄存器都屬于段寄存器,其實(shí)它們和? CS? 寄存器以及? SS? 寄存器用起來(lái)區(qū)別不大,

既然是段寄存器的話,自然它們存放的就是某個(gè)段地址了 。

通過(guò)上面對(duì)基礎(chǔ)知識(shí)的介紹呢,我們已經(jīng)知道,如果? CPU? 要訪問(wèn)一個(gè)內(nèi)存單元時(shí),

我們必須要提供一個(gè)指向這個(gè)內(nèi)存單元的物理地址給? CPU ,

而我們也知道在? 8086? CPU? 中,物理地址是由段地址左移 4? 位,然后加上偏移地址形成的,

所以,我們也就只需要提供段地址和偏移地址即 OK 。

8086? CPU? 呢,提供了一個(gè)? DS? 寄存器,并且通常都是通過(guò)這個(gè)? DS? 段寄存器來(lái)存放要訪問(wèn)的數(shù)據(jù)的段地址 。

DS(Data? Segment):很顯然,DS 中存放的是數(shù)據(jù)段的段地址 。

但是這里不得不再點(diǎn)一下,那就是我們對(duì)段的支持是在? CPU? 上體現(xiàn)的,而不是在內(nèi)存中實(shí)現(xiàn)了段,

所以事實(shí)上我們使用的段其實(shí)是一個(gè)邏輯概念,即是我們自己定義的,

再說(shuō)白了,我定義一個(gè)段,我說(shuō)它是數(shù)據(jù)段那它就是數(shù)據(jù)段,我說(shuō)它是代碼段那么它就是代碼段,

它們其實(shí)都是一塊連續(xù)的內(nèi)存而已,至于為什么要區(qū)分為數(shù)據(jù)段和代碼段,

很明顯,是用來(lái)給我們編程提供方便的,即我們?cè)谧约旱乃枷肷匣蛘哒f(shuō)是編碼習(xí)慣上規(guī)定,

數(shù)據(jù)放數(shù)據(jù)段中,代碼放代碼段中 。而我們?cè)谑褂脭?shù)據(jù)段的時(shí)候,為了方便或者說(shuō)是代碼的編寫(xiě)方便起見(jiàn),

我們一般把數(shù)據(jù)段的段地址放在? DS? 寄存器中,當(dāng)然,如果你硬要覺(jué)得? DS? 不順眼,那你可以換個(gè)? ES? 也是一樣的,

至于? ES(Extra? Segment)? 段寄存器的話,自然,是一個(gè)附加段寄存器,如果再說(shuō)得過(guò)分點(diǎn),

就當(dāng)它是個(gè)擴(kuò)展吧,當(dāng)你發(fā)現(xiàn),你幾個(gè)段寄存器不夠用的時(shí)候,你可以考慮使用?? ES? 段寄存器,

在使用方式上,則和其他的段寄存器沒(méi)什么區(qū)別? 。

下面看一個(gè)介紹使用? DS? 寄存器的? Demo:

ASSUME CS:CODESCODES SEGMENTSTART:MOV AX,1000HMOV DS,AXMOV AL,1MOV BX,0MOV CX,5 ;設(shè)計(jì)一個(gè)循環(huán),讓其循環(huán) 5 次s: MOV [BX],AL ;這里 [BX] 并沒(méi)有指定段地址哦INC ALINC BXLOOP s MOV AH,4CHINT 21H CODES ENDSEND START

上面的代碼所做的事情,就是循環(huán)將? 1,2,3,4,5 寫(xiě)入到地址? 1000H:0000H ,1000H:0001H,

1000H:0002H,1000H:0003H,1000H:0004H? 中,

語(yǔ)句的執(zhí)行過(guò)程如下:

首先我們來(lái)看尚未執(zhí)行上述任何指令時(shí)棧中的數(shù)據(jù)情況:

而當(dāng)循環(huán)執(zhí)行完成以后,我們?cè)賮?lái)看內(nèi)存? 1000H:0000H 處的值:

在這里,我們可以看到確實(shí)達(dá)到了我們預(yù)期的效果,但是大家注意看代碼:

s: MOV [BX],AL ;這里 [BX] 并沒(méi)有指定段地址哦INC ALINC BXLOOP s

這里可以看到,我們?cè)??[BX]??中并沒(méi)有給其指定段地址,而只有一個(gè)偏移地址,

但是根據(jù)我們一開(kāi)始的介紹,必須要有段地址和偏移地址才能夠定位內(nèi)存單元,

莫非這里出問(wèn)題了?

其實(shí)不是的,因?yàn)槲覀冊(cè)谧钋懊娑x了段地址?? DS? 為? 1000H,

當(dāng)我們定義好段地址后,每一次? CPU? 執(zhí)行到??[BX]? 時(shí),便會(huì)自動(dòng)或者說(shuō)是默認(rèn)的從? DS? 中取值,

并且將取得的值作為段地址,因此,當(dāng)??[BX]? 為? 0001H? 時(shí),CPU? 會(huì)從?? DS? 中取得一個(gè)? 1000H ,

由這兩個(gè)一合成即可以得到正確的物理地址?? 1000H:0000H 。

最后還提醒一點(diǎn),那就是?? 8086? CPU? 不支持直接將一個(gè)數(shù)據(jù)送入段寄存器中,

也就是下面的做法是錯(cuò)誤的:

MOV DS,1000H

總結(jié)

以上是生活随笔為你收集整理的8086 DS 和 ES 寄存器的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。