STOSW 是 x86 汇编语言中的字符串存储指令,其主要功能是将 AX 寄存器中的字(16 位)数据写入附加段(ES)中由 DI 寄存器指定的内存地址,并根据方向标志(DF)自动更新 DI 的值。
核心功能说明
操作对象:AX 寄存器(16 位)与 ES:DI 指向的内存位置。
写入内容:将 AX 的值存储到 ES:[DI]。
地址更新:若 DF = 0(清零方向标志,通常用 CLD 指令设置),则 DI 自动 +2(因操作的是字)。
若 DF = 1(用 STD 指令设置),则 DI 自动 -2。
典型用途:用于在内存中批量填充相同字值,常配合 REP 前缀实现重复存储。
使用示例
asm
MOV AX, 0xFFFF ; 要填充的字值
MOV DI, 0x1000 ; 目的地址偏移
MOV ES, AX ; 设置 ES 段(注意:实际中需正确设置段寄存器)
MOV CX, 10 ; 重复 10 次
CLD ; 确保 DF=0,从低地址向高地址填充
REP STOSW ; 重复执行:ES:[DI] ← AX,DI += 2,CX 减 1,直到 CX=
此代码将在 ES:0x1000 开始的连续 10 个字(20 字节)内存中填入 0xFFFF。
相关指令对比
STOSB:用 AL 存储字节(8 位),DI ±
STOSW:用 AX 存储字(16 位),DI ±
STOSD:用 EAX 存储双字(32 位),DI ±4(在 32 位模式下)
注意事项必须确保 ES 段寄存器已正确设置,否则会写入错误内存区域。
DI 初始值需指向有效目标地址。
实际开发中,现代系统通常使用保护模式,段寄存器由操作系统管理,直接操作 ES 可能引发异常。
如需进一步了解汇编字符串操作,可参考:腾讯云汇编语言字符串操作指令详解。
武汉格发信息技术有限公司 | 许可分析,许可优化,许可管理,许可授权,软件授权