1. call 子程序偏移量
注解:子程序偏移量是指,call指令即将跳转至的子程序的地址(子程序的第一个字节)减去 call 指令读取后 CS:IP指向的指令(即,call 指令的下一指令的地址)
2. STOS (STOre into String) 存入串指令
STOS DST
STOSB //存放字节串 ( DI ) = AL
STOSW //存放字串 ( DI ) = AX
执行操作:把AL或AX中的内容存放由DI指定的附加段的字节或字单元中,并根据DF值修改及数据类型修改DI的内容.
a.在执行该指令之前,必须把要存入的数据预先存入AX或AL中,必须预置DI的初值.
b.DI所指向的存储单元只能在附加段中,即必须是ES:[DI]
3. LODS ( LOaD from String ) 从串取指令
LODS SRC
LODSB //从字节串取 AL=(SI)
LODSW //从字串取 AX= (SI±1) (SI)
执行操作:把由SI指定的数据段中字节或字单元的内容送入AL或AX中,并根据DF值及数据类型修改SI的内容.
a.在执行该指令之前,要取的数据必须在存储器中预先定义(用DB或DW),必须预置SI的初值.
b.源串允许使用段超越前缀来改变数据存储的段区.
4 ret , retn, retf
retn表示return near,与之对应的是retf;n没有恢复段的过程,retf有个除了pop ip以外还会pop cs;
不管是retn还是rentf,后面带的数字是在执行完ret指令以后sp增加的字节数,默认ret相当于ret 0
retn 4相当于pop ip,add sp, 4(esp相当于移动了8个字节)也就是在返回的同时释放了参数使用的栈空间,windows api中常见的stdcall就是这种调用形式,所以省去了函数调用外的一条add指令
5 jecxz和jecz
根据 CX、ECX 寄存器的值跳转: JCXZ(CX 为 0 则跳转)、JECXZ(ECX 为 0 则跳转);
6 cld和std