首页 家电百科 实时讯息 常识
首页 >  常识 > 

rep是什么意思(汇编指令)

100次浏览     发布时间:2024-12-07 08:38:50    

cli 和 sti

cli 全称 Clear Interupt

sti 全称 Set Interupt

这两个指令分别是用来屏蔽中断恢复中断用的,如: 设置栈基址SS和偏移地址SP时,需要cli,因为如果设置这两个地址的指令被分开了,那么很有可能SS被修改了,但由于中断,而代码跳去其它地方执行了,SP还没来得及修改,就有可能出错。

movsb

movsb(MOVe String Byte):即字符串传送指令,这条指令按字节传送数据。

通过SI和DI这两个寄存器控制字符串的源地址和目标地址,比如DS:SI这段地址的N个字节复制到ES:DI指向的地址,复制后DS:SI的内容保持不变。

rep

rep (repeat)指令就是"重复"的意思,术语叫做"重复前缀指令"。

因为既然是传递字符串,则不可能一个字(节)一个字(节)地传送,所以需要有一个寄存器来控制串长度。这个寄存器就是CX,指令每次执行前都会判断CX的值是否为0(为0结束重复,不为0,CX的值减1),以此来设定重复执行的次数。因此设置好CX的值之后就可以用rep movsb了。

cld和std

cld 全称 Clear Director

std 全称 Set Director

cld(CLear Direction flag)是清方向标志位,把标志(flags)寄存器的DF=0,地址指针si、di增加;如是std则把DF=1,地址指针减小也使DF的值为0,在执行串操作时,使地址按递增的方式变化,这样便于调整相关段的当前指针。cld指令与std(Set Direction flag)的执行结果相反,即置DF的值为1。

jmp和jmpi

jmp 无条件跳转指令,即直接跳转,也称为 段内跳转指令

jmpi段间跳转指令,即间接跳转,用于x86实模式下。

在Linux早期版本的boot.s中,为了改变CS的值,操作的方法如下所示:

entry start 
start: 
    jmpi go, #BOOTSEG 
go: mov ax, cs 

那么可以通过mov指令直接修改CS的内容吗,即如下:

mov ax, #0x7c0 
mov cs, ax 

当然是不可以的,CS和IP是8086 CPU中2个最关键的寄存器。它们指示了要读取指令的地址。大部分8086 CPU寄存器的值,都可以使用mov指令来改变,但CS、IP中的值不能用mov指令来修改。

能够改变CS、IP寄存器内容的指令称为转移指令。一个最简单的可以修改它们的指令,就是上面用的 jmpi指令。 jmpi 0, 0x9000h 表示间接跳转(相当于跳到另一个段去开始执行), 即程序跳到9000:0 去继续执行了。

汇编指令集合比较多,这里只是简单列举了几个。

如下图的分类

汇编常用指令分类