1. 匯編語言中 cs,ds,ss,es分別是那些英文單詞的縮寫
cs: 代碼段寄存器,是 code segment 的縮寫;
ds:數據段寄存器,是 data segment 的縮寫;
ss:堆棧段寄存器, 是 stack segment 的縮寫;
es:附加段寄存器,是 extra segment 的縮寫;
2. 匯編中的「附加段寄存器ES」有什麼用的
附加段寄存器ES:存放當前執行程序中一個輔助數據段的段地址。
段寄存器
CS IP
SS SP或BP
DS BX、DI、SI
ES DI(用於串指令)
3. 匯編中的 附加段寄存器ES 有什麼用的
附加段寄存器ES:存放當前執行程序中一個輔助數據段的段地址。
段寄存器
偏移地址寄存器
CS
IP
SS
SP或BP
DS
BX、DI、SI
ES
DI(用於串指令)
例子:
;
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
data_seg1
segment
;
定義數據段
.
.
data_seg1
ends
;
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
data_seg2
segment
;
定義附加段
.
.
data_seg2
ends
;
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
code_seg
segment
;
定義代碼段
assume
cs:code_seg,
ds:data_seg1,
es:data_seg2
start:
;
程序執行的起始地址
;
set
DS
register
to
current
data
segment
mov
ax,
data_seg1
;
數據段地址
mov
ds,
ax
;
存入DS寄存器
;
set
ES
register
to
current
extra
segment
mov
ax,
data_seg2
;
附加段地址
mov
es,
ax
;
存入ES寄存器
.
.
code_seg
ends
;
代碼段結束
;
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
end
start
希望能對你有所幫助。
4. 匯編中的ES是什麼意思
ES寄存器 附加段寄存器:定義附加段的起始地址。
程序中其他段得起始地址。 用於某些串操作中和DI寄存器相關聯 (ES)+(DI)=串地址的結尾
例子:
; * * * * * * * * * * * * * * * * * * * * * * *
data_seg1 segment ; 定義數據段
. .
data_seg1 ends
; * * * * * * * * * * * * * * * * * * * * * * *
data_seg2 segment ; 定義附加段
. .
data_seg2 ends
; * * * * * * * * * * * * * * * * * * * * * * *
code_seg segment ; 定義代碼段
assume cs:code_seg, ds:data_seg1, es:data_seg2
start: ; 程序執行的起始地址
; set DS register to current data segment
mov ax, data_seg1 ; 數據段地址
mov ds, ax ; 存入DS寄存器
; set ES register to current extra segment
mov ax, data_seg2 ; 附加段地址
mov es, ax ; 存入ES寄存器
. .
code_seg ends ; 代碼段結束
; * * * * * * * * * * * * * * * * * * * * * * * * * *
end start
5. 32位匯編 段寄存器 cs ds ss es的用處是什麼
實模式的段是為了讀取更多的內存,保護模式的段是主要為了保護數據,防止惡意篡改,這幾個寄存器都指向GDT或者LDT,32位用這幾個寄存器是為了保護程序、系統還有數據,特權級什麼的需要基於他們,他們把各個程序嚴格的分開,不允許低權級訪問高權級,有效保護了系統內核,一定程度上防止了數據溢出(有不對的地方希望大佬指出)
6. 在匯編語言的串操作中, MOV DI, DS MOV ES, DI 這兩條指令到底有什麼作用
(1)這兩條指令沒有上下文的情況下,無法為您判斷它們的實際意義。看不出與串操作有什麼直接關系。在串操作中,一般是將兩個串分別放在DS:SI和ES:DI定址的內存單元中,以方便於串的比較、移動等操作。
(2)mov
si,ds指令的意義是:將數據段寄存器的段地址值賦給SI,執行完成後:SI=DS
(3)MOV
DI,ES
的意義是將擴展數據段寄存器的段地址值賦給DI.即執行完成後,DI=ES
一般情況下,程序中很少用到這樣的指令,如果要保護DS和ES的值,通常用PUSH
DS和PUSH
ES指令。如果要計算物理地址,也是將段地址放到AX寄存器中。當然,即8086CPU給出了這樣的指令,在某些情況下,可能會用到你提到的這兩條指令。
希望能幫到你。