91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

匯編語言中assume的作用是什么

發布時間:2021-11-10 22:48:49 來源:億速云 閱讀:220 作者:柒染 欄目:開發技術

本篇文章給大家分享的是有關匯編語言中assume的作用是什么,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

assume 的作用是關聯段名與段寄存器。

如果你在數據段中定義了變量名,比如:

x   db  0

而你在代碼中,需要直接使用這個變量名,比如:

mov   al,  x

那么,匯編程序在匯編時,就會報告錯誤。

因為,mov指令中遇到 x 這個變量名時,匯編程序不知道它要用哪個段寄存器作為段地址。

所以:

若要用變量名直接訪問,或使用語句標號(比如你例子中的標號 start)就必須要在assume偽指令中將這些變量或標號所在段的段名,與段寄存器名關聯,否則會出錯。

如果你不使用段中的變量名,可以不關聯這個段的段名與寄存器。

如果你訪問變量時,都指定了段跨越前綴,關聯也不是必須的。比如你可以用 mov al, ds:x訪問變量 x 。

這幾天在看王爽大大的 匯編語言。對于assume偽指令卻很是不懂。

比如已經定義了assume cs:code,ds:data

但用debug觀察的時候,發現ds段寄存器卻沒有相關聯的數據。

必須在cs中寫明: mov ax,data

mov ds,ax
然后才能發現ds中有正確的數據。

于是疑惑,assume不是已經關聯了ds嘛?

上網求助 = =、 然后找到答案。

編寫程序,是寫給編譯軟件的。由編譯軟件,編譯成機器碼,再去控制CPU。但是,編譯軟件,對assume語句,并不生成機器碼。

所以,必須有mov ax,data,mov ds,ax,CPU才能受控。

---assume語句,是偽指令,僅僅是寫給編譯軟件的。編譯軟件,并不把它生成機器碼。

assume對除了CS以外的其它段寄存器,僅僅只是關聯了段名,以便在訪問段內變量時程序可以知道用哪個段寄存器,并沒有在程序加載時將段地址裝入段寄存器。

所以,將段地址裝入段寄存器的工作,必須由用戶在程序中自己編寫代碼,并在程序開始運行時執行代碼完成裝入工作。
僅僅對CS段寄存器,會在關聯段名的同時,在程序加載時自動將段地址裝入段寄存器。
----補充:前天知道了答案后,我以為assume ds:data 之類的指沒有什么用,只是給程序員看的。

但今天發現不是這樣的。 如果你在data中用了標號的話,則assume ds:data不能省略。

比如:

data segment
a db 1,2,3,4 ,5,6,7,8
b dw 0
data ends

a,b的后面沒有“ :”。

如果你想在cs段中用數據標號訪問數據,則必須在開頭加上assume ds:data,否則會報錯

Arror A2068:Can not address with segment register

不過就算在開頭加上了assume ds:data,代碼段中也不能少了mov ax,data,mov ds,ax。

作用:用于標識默認段前綴

解釋:assume 并不能改變ds等段寄存器的值,但他能改變編譯器產生的匯編代碼。比如:

assume ss:stack

stack segment

x :db 0

stack ends

如果程序需要mov ax,[x],那么程序如何定位[x]呢?我們知道x只是一個偏移地址0,所以此時assume就相當于告訴編譯器stack段的所有標號都與ss相關聯,所以此時[x]就相當于ss:[0].如果我們直接將這句改為mov ax,ss:[0],那么前面不加assume也是可以的.這也是為什么[0]被編譯器強制理解為立即數,而[標號]卻被理解為標號里的內容的原因,因為標號必須與段assume,否則會報錯cannot address with segment register.而[0]無默認段,就只能被認為為立即數了.

所以,我們仍需在程序中將ss的值,用指令修改為stack,原因就是assume并不會修改段寄存器,這個由dos系統決定,如果dos系統決定將段值編譯進.exe文件頭,并在加載進內存時根據文件頭,修改段值,那么此時assume就相當于可以改變段值了.但是我調試的現實是ds、es指向psp頭(psp詳見16位exe程序加載過程),ss指向ds+0:00f0,cs指向ds+0:0100。

以上就是匯編語言中assume的作用是什么,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

公安县| 西华县| 鹤壁市| 安福县| 区。| 杭州市| 西畴县| 牟定县| 楚雄市| 中西区| 秀山| 来宾市| 江西省| 奉贤区| 华亭县| 和林格尔县| 庆安县| 彰化县| 盐津县| 东辽县| 腾冲县| 克什克腾旗| 织金县| 彩票| 水富县| 五家渠市| 北安市| 获嘉县| 桦川县| 扬中市| 海林市| 鞍山市| 阿拉善左旗| 都匀市| 汨罗市| 肥东县| 阿荣旗| 镇原县| 陆川县| 齐齐哈尔市| 九寨沟县|