在彙編中為什麼要暫存器進行段裝入,而不能直接將標號送入段暫存器

2021-04-18 09:15:49 字數 1072 閱讀 5981

1樓:做而論道

說的是 intel 公司設計的 cpu 吧?

任何事物都不是完美的,也可能當年忙中出錯,漏掉了這個功能。

2樓:匿名使用者

段暫存器存放的是段地址,但是標號卻存放的是實體地址 = 段地址*16 + 偏移地址。

回有些人或許喜歡直答接讓計算機代替人來計算。但是計算機計算了就使得程式設計的靈活性減少了,就比如資料段的地址為什麼要讓人自己設定?它想將更大的自由交給程式設計的人,讓你的程式更加靈活。

更加簡單。

c更簡單,為什麼還有人使用組合語言?

3樓:科技大記事

可以啊,call指令就有push 標號,ret後再pop出來

彙編debug載入程式後還沒執行,段暫存器為什麼會有值?而且棧段的入口也不對,程式如下:

4樓:匿名使用者

從你程式結構來看彙編、連線後生成的是msdos的exe檔案,但是由於你的源**中堆疊段顯式說明為stack型別的,因此彙編程式和連線程式都只是把它當作了一個普通的段,因此link沒有在exe頭中記錄預設的入口處堆疊地址,作業系統或者debug程式載入此檔案時也就不會按你期待的那樣將ss:sp用這個地址來初始化。這個問題本該在link階段產生一個警告 warning:

no stack segment,估計你沒有注意到。

stack段正確的寫法應該是(第一行後面寫清楚本段是stack型別的):

stack segment stack

dw 0,0,0,0,0,0,0,0

stack ends

你照此修改後重新彙編、連線,再進debug,ss應該是你這個stack segment的地址。

debug載入exe檔案後,是模仿作業系統載入exe後對段暫存器的初始化方式來初始化段暫存器的值的。這包括:

1、cs:ip初始化為程式**的入口,即end後標號的實際地址。

2、ds、es指向為該程式建立的psp的段址(psp指程式段字首,具體資料請自己找)。

3、ss:sp指向程式指定的堆疊尾部,如果程式包含多個堆疊段則是最後一個尾部。

暫存器間接定址方式中,運算元在中a通用暫存器 b

c.儲存單元 暫存器間接定址方式中,暫存器記憶體放的是 運算元的地址,而不是運算元 本回身,即運算元是答通過暫存器間接得到的,因此稱為暫存器間接定址。運算元放在ram某個儲存單元中,該單元的地址又放在暫存器r0或r1中。如要進行算術運算,要計算每班學員各科成績的平均值,可以編一個求平均成績的通用程式...

斷路器經常自動跳開,這是為什麼,要進行什麼處理嗎

原因會很多,一般有時間性,比如用電高峰期會經常跳大概就是樓上各位說的過載引起的,但不能麻木的更換大規格的產品.還有就是產品本身溫升過高引起的.建議使用液壓 油杯式 斷路器.應該是斷路器的額定電路不夠,負載電流大導致的自動跳開,換一個稍微大一些的就好了。所帶負載的功率略大於斷路器功率,或者使用環境溫度...

在植物組織培養過程中為什麼要進行一系列

首先注意兩個詞 滅菌 和 消毒 很明顯,前者要求比後者嚴格的多。作為植物組織培養,要求非常嚴格的無菌環境,只要沾上極少量菌體或者芽孢就有可能造成培養失敗。而且,不僅是細菌可以汙染,真菌同樣會造成汙染。所以植物組織培養過程中大部分用的是 滅菌 而非 消毒 如果滅菌不徹底,培養過程中存在汙染,會造成培養...