一段汇编码学习 CLD LODSB stosw

CLD与STD是用来操作方向标志位DF(Direction Flag)。CLD使DF复位,即DF=0,STD使DF置位,即DF=1.用于串操作指令中。

汇编语言中,串操作指令LODSB/LODSW是块装入指令,其具体操作是把SI指向的存储单元读入累加器,其中LODSB是读入AL,LODSW是读入AX中,然后SI自动增加或减小1或2位.当方向标志位D=0时,则SI自动增加;D=1时,SI自动减小。

STOS
STOSB
STOSW
STOSD

存储字符串数据(Store String Data)

将累加器内容存储到由ES:E(DI)寻址的内存地址.如果使用STOS,必须指定目的操作数.

STOSB拷贝AL到内存中,STOSW拷贝AX到内存中,STOSD拷贝EAX到内存中.

INTEL指令集中有5组处理字节,字和双字数组的指令,称为基本字符串指令,但它们的用法并不

限于字符数组,LZ所问STOSW,LODSB都是属于这5组(另外3组是:MOVSB,CMPSB,SCASB)

以下代码转载于 罗云彬的《win32汇编》

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

; 在缓冲区中找出一行数据,处理换行并保存  Unix Text file -> PC Text file
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_FormatText    proc    uses esi _lpData,_dwSize,_hFile
        local    @szBuffer[128]:byte,@dwBytesWrite

        mov    esi,_lpData
        mov    ecx,_dwSize
        lea    edi,@szBuffer
        xor    edx,edx
        cld
_LoopBegin:
        or    ecx,ecx
        jz    _WriteLine
        lodsb
        dec    ecx
        cmp    al,0dh        ;遇到0dh则丢弃
        jz    _LoopBegin
        cmp    al,0ah        ;遇到0ah则扩展为0dh,0ah
        jz    _LineEnd
        stosb
        inc    edx
        cmp    edx,sizeof @szBuffer-2
        jae    _WriteLine    ;行缓冲区满则保存
        jmp    _LoopBegin
_LineEnd:
        mov    ax,0a0dh                ;这个地方存入以后 al为0dh ah为0ah 这个地方要注意
        stosw
        inc    edx
        inc    edx
_WriteLine:
        push    ecx
        .if    edx
            invoke    WriteFile,_hFile,addr @szBuffer,edx,addr @dwBytesWrite,NULL
        .endif
        lea    edi,@szBuffer
        xor    edx,edx
        pop    ecx
        or    ecx,ecx
        jnz    _LoopBegin
        ret

_FormatText    endp


这个子程序 先把要筛选的字符串放到esi中 把要存储的放到edi中 然后用CLD把 esi edi以后的增长方向都设为加1正方向 

然后在用 lodsb 取出esi中的到al中 处理以后把需要的执行  stosw esi加1 然后把AX拷贝到到edi中 从而实现了字符串的处理


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值