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给出了这样的指令,在某些情况下,可能会用到你提到的这两条指令。
希望能帮到你。