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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

seg指令

發布時間:2025/6/15 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 seg指令 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

bootsect.S分析一文中有這樣一段代碼:

seg fs
lds si,(bx)? ! ds:si是源地址;

!! 將fs:bx地址所指的指針值放入ds:si中;


先講一下寄存器的默認組合問題,比如指令mov [si], ax表示將ax中的內容存入ds:si指向的內存單元,也就是說在寄存器間接尋址的情況下,以si間接尋址時總是默認以ds為相應的段地址寄存器。同樣di是以es為默認的段地址寄存器

第二個要了解的是“段超越”的問題,就是在某些時候你不想使用默認的段地址寄存器,那
么你可以強制指定一個段地址寄存器(當然這種強制是在允許的情況下,建議看一下匯編
教材上的說明),同上例mov [si],ax表示存入ds:si中,但如果你想存入cs指向的段中可
以這樣mov cs:[si],ax, 這樣就強制指定將ax中的內容存入cs:si的內存單元。
第三個要明白的是seg cs這樣的語句只影響到它下一條指令,比如在linux啟動代碼中的一段:
seg cs
mov sectors,ax
mov ax,#INITSEG
要說明兩點:
第一,seg cs 只影響到mov sectors,ax而不影響mov ax,#INITSEG
第二,如果以Masm語法寫,seg cs和mov sectors,ax兩句合起來等
?? ?? 價于mov cs:[sectors],ax,這里使用了間接尋址方式。
?? ?? 重復一下前面的解釋,mov [sectors],ax表示將ax中的內容
?? ?? 存入ds:sectors內存單元,而mov cs:[sectors],ax強制以
?? ?? cs作為段地址寄存器,因此是將ax的內容存入cs:sectors內存
?? ?? 單元,一般來說cs與ds的值是不同的,如果cs和ds的值一樣,
?? ?? 那兩條指令的運行結果會是一樣的。(編譯后的指令后者比前
?? ?? 者一般長一個字節,多了一個前綴。)

結論,seg cs只是表明緊跟它的下一條語句將使用段超越,因為在編譯后的代碼中可以清楚的看出段超越本質上就是加了一個字節的指令前綴,因此as86把它單獨作為一條指令來寫也是合理的。

note:seg指令只會影響數據寄存器(目前知道的有bx)的段地址信息,不會影響索引寄存器(si和di)的段地址信息,索引寄存器在計算地址時仍使用數據段(ds)為段寄存器



總結

以上是生活随笔為你收集整理的seg指令的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。