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中 从而实现了字符串的处理

一段汇编码学习 CLD LODSB stosw相关推荐

  1. 硬编码学习笔记(二)—— 经典变长指令

    硬编码学习笔记(二)-- 经典变长指令 前言 指令结构 符号说明 寻址符号 操作数符号 上标符号 One-Byte Opcode Map 变长指令 ModR/M 例:0x88 例:0x89 例:0x8 ...

  2. 硬编码学习笔记(一)—— 经典定长指令

    硬编码学习笔记(一)-- 经典定长指令 前言 指令结构 符号说明 寻址符号 操作数符号 上标符号 One-Byte Opcode Map 经典定长指令:修改寄存器 0x40~0x47 0x48~0x4 ...

  3. Linux C :C的汇编码生成

    想知道一段C语言写的代码对应生成的汇编语言代码是什么?那么需要了解: 1)一些基本的编译过程原理 2)常用的寄存器有哪些,专门来做哪些事 3)分析C语言代码对应的堆栈情况 1)一些基本的编译过程原理 ...

  4. jpeg编码学习笔记

    jpeg编码学习笔记 各种图片格式目的是在网络传输和存储的时候使用更少的字节,即起到压缩的作用.在图片格式解码后,无论图片的格式,图片数据都是像素数组. 本文将尝试通过JPEG这种图片编码格式的学习, ...

  5. 虚函数继承与虚函数表-汇编码分析

    (Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu) 参考:https://www.equestionanswers.com/cpp/vptr-and-vta ...

  6. 如何优雅的查看 Java 代码的汇编码

    转载请注明原创出处,谢谢! HappyFeet的博客 汇编码这种东西还是在上编译原理这门课的时候接触的比较多,工作之后几乎就没接触过了. 最近一次接触汇编码是阅读<深入理解 Java 虚拟机&g ...

  7. 【转】 LSD(Line Segment Detector) 直线段检测算法学习~

    论文回顾之一 一种新的直线段检测算法---LSD:a Line Segment Detector 原文地址:http://blog.csdn.net/polly_yang/article/detail ...

  8. 鸟哥linux私房菜 之 老段带你学习linux

    恒 一直只看linux书籍,从第一页看到580多页,刚开始觉得还行,后面看着看着发现越来越迷糊,一小节,看了几分钟后居然睡着了...汗...,看来光看书,不理解它真正的含义,自己没有动手敲,是学不下了 ...

  9. 右值引用调用-汇编码分析

    (Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu) 对于C++语言来说,右值引用是在C++11时引入的一个重要的功能,并在stl库中提供了右值引用的函数,便 ...

最新文章

  1. 批量注册、模拟登陆很难吗?一个Python爬虫案例告诉你答案!
  2. ZigZag Conversion
  3. easyui combobox设置只读属性
  4. hdu2089 不要62 数位dp
  5. 关于ssh的一些问题
  6. 数据可视化(二)Matplotlib pandas简易入门
  7. ABAP,Java, nodejs和go语言的web server编程
  8. html语言入门测试题,Web前端:20道非常基础的JavaScript测试题
  9. 模拟退火求解TSP问题
  10. IntelliJ IDEA竟然出了可以在云端编码的功能?
  11. 玩转springboot2.x之异步调用@Async
  12. 基于JAVA+SpringBoot+Mybatis+MYSQL的飞机订票系统
  13. 电子政务方向:We7.Cloud政府云门户
  14. 【BZOJ-2768】冠军调查 最小割
  15. 深度学习2.0-23.Keras高层接口之CIFAR10自定义网络实战
  16. UML 简单易懂 教程
  17. 计算机网络课程设计报告
  18. 基于51单片机利用ADC0808芯片实现A/D转换。
  19. 实时消息传输协议 RTMP Real Time Messaging Protocol
  20. 血淋淋的经验!2021做亚马逊测评是搭上末班车?还是成为新韭菜?

热门文章

  1. 历史转折中的英伟达:百亿豪赌出奇迹 实习生项目救主
  2. 同步 异步 阻塞 非阻塞概念区分
  3. 人工智能时代下的视觉合成
  4. linux学习笔记十(Raid基本知识)
  5. Android 数据库基本操作-2
  6. 为什么白帽SEO更好?
  7. GridView强制换行与自动换行
  8. 逆向思维--魔兽世界封包分析(1)
  9. [转]verilog语法学习心得
  10. 读写EXCEL的例子