CS段中記憶體被神奇修改,有木有??!!

2021-05-25 00:52:07 字數 1099 閱讀 1360

且看王爽老師《組合語言》第二版程式6.3,先完整抄錄如下:

;實現0123h, 0456h, 0789h, 0abch, 0defh, 0fedh, 0cbah, 0987h的逆序儲存

assume cs:codesg

codesg segment

dw 0123h, 0456h, 0789h, 0abch, 0defh, 0fedh, 0cbah, 0987h

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

start:

mov ax, cs

mov ss, ax

mov sp, 30h

mov bx,0

mov cx,8

s:     push cs:[bx]

add bx,2

loop s

mov bx,0

mov cx,8

s0:   pop cs:[bx]

add bx,2

loop s0

mov ax,4c00h

int 21h

codesg ends

end start

注意程式申請了記憶體空間,共32個位元組(值全為0),用來作為臨時空間。程式本身沒有什麼問題,記憶體的動作也合情合理。

但是,如果臨時記憶體空間改為16個位元組,問題就來了!用debug.exe單步執行的話,會發現在執行 mov ss, ax後,儲存資料的記憶體空間被神奇修改,甚是詭異。照理說,ss的賦值和記憶體沒有聯絡。原因沒想清楚,先占個坑,後頭再來想吧。莫非是資料保護,或是位元組對齊???望達人賜教!

記憶體變為16位元組後:

dw 0123h, 0456h, 0789h, 0abch, 0defh, 0fedh, 0cbah, 0987h

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

mov ax, cs

mov ss, ax

mov sp, 20h

執**況

mov ax, cs

mov ss, ax

的記憶體情況見圖1,2。

圖1 執行mov ss,ax前

圖2 執行mov ss,ax後

eclipse 中修改tomcat記憶體

在eclipse中修改 tomcat記憶體 新增內容 xms256m xmx512m xx permsize 256m xx maxpermsize 512m 引數的意思 vmargs 說明後面是vm的引數 xms40m 虛擬機器占用系統的最小記憶體 xmx256m 虛擬機器占用系統的最大記憶體 x...

x86中記憶體段和段描述符

一 段 保護模式中80x86 提供了4gb的實體地址空間。這是處理器在其位址匯流排上可以定址的位址空間。這個位址空間是平坦的,位址範圍從0到0xffffffff。這個實體地址空間可以對映到讀寫記憶體 唯讀記憶體以及記憶體對映i o中。分段機制就是把虛擬位址空間中的虛擬記憶體組織成一些長度可變的稱為段...

Oracle中檢視最近被修改過的表的方法

修改專案時,涉及到了oracle中許多表的修改 包括 增加 刪除字段,修改注釋等 由於開始沒有進行記錄,造成在上 測試機時,忘記了具體修改過哪些表了。後來在網上查詢了一些資料,例如 www.2cto.com 1 select uat.table name from user all tables u...