一段汇编码学习 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中 从而实现了字符串的处理
一段汇编码学习 CLD LODSB stosw相关推荐
- 硬编码学习笔记(二)—— 经典变长指令
硬编码学习笔记(二)-- 经典变长指令 前言 指令结构 符号说明 寻址符号 操作数符号 上标符号 One-Byte Opcode Map 变长指令 ModR/M 例:0x88 例:0x89 例:0x8 ...
- 硬编码学习笔记(一)—— 经典定长指令
硬编码学习笔记(一)-- 经典定长指令 前言 指令结构 符号说明 寻址符号 操作数符号 上标符号 One-Byte Opcode Map 经典定长指令:修改寄存器 0x40~0x47 0x48~0x4 ...
- Linux C :C的汇编码生成
想知道一段C语言写的代码对应生成的汇编语言代码是什么?那么需要了解: 1)一些基本的编译过程原理 2)常用的寄存器有哪些,专门来做哪些事 3)分析C语言代码对应的堆栈情况 1)一些基本的编译过程原理 ...
- jpeg编码学习笔记
jpeg编码学习笔记 各种图片格式目的是在网络传输和存储的时候使用更少的字节,即起到压缩的作用.在图片格式解码后,无论图片的格式,图片数据都是像素数组. 本文将尝试通过JPEG这种图片编码格式的学习, ...
- 虚函数继承与虚函数表-汇编码分析
(Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu) 参考:https://www.equestionanswers.com/cpp/vptr-and-vta ...
- 如何优雅的查看 Java 代码的汇编码
转载请注明原创出处,谢谢! HappyFeet的博客 汇编码这种东西还是在上编译原理这门课的时候接触的比较多,工作之后几乎就没接触过了. 最近一次接触汇编码是阅读<深入理解 Java 虚拟机&g ...
- 【转】 LSD(Line Segment Detector) 直线段检测算法学习~
论文回顾之一 一种新的直线段检测算法---LSD:a Line Segment Detector 原文地址:http://blog.csdn.net/polly_yang/article/detail ...
- 鸟哥linux私房菜 之 老段带你学习linux
恒 一直只看linux书籍,从第一页看到580多页,刚开始觉得还行,后面看着看着发现越来越迷糊,一小节,看了几分钟后居然睡着了...汗...,看来光看书,不理解它真正的含义,自己没有动手敲,是学不下了 ...
- 右值引用调用-汇编码分析
(Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu) 对于C++语言来说,右值引用是在C++11时引入的一个重要的功能,并在stl库中提供了右值引用的函数,便 ...
最新文章
- 批量注册、模拟登陆很难吗?一个Python爬虫案例告诉你答案!
- ZigZag Conversion
- easyui combobox设置只读属性
- hdu2089 不要62 数位dp
- 关于ssh的一些问题
- 数据可视化(二)Matplotlib pandas简易入门
- ABAP,Java, nodejs和go语言的web server编程
- html语言入门测试题,Web前端:20道非常基础的JavaScript测试题
- 模拟退火求解TSP问题
- IntelliJ IDEA竟然出了可以在云端编码的功能?
- 玩转springboot2.x之异步调用@Async
- 基于JAVA+SpringBoot+Mybatis+MYSQL的飞机订票系统
- 电子政务方向:We7.Cloud政府云门户
- 【BZOJ-2768】冠军调查 最小割
- 深度学习2.0-23.Keras高层接口之CIFAR10自定义网络实战
- UML 简单易懂 教程
- 计算机网络课程设计报告
- 基于51单片机利用ADC0808芯片实现A/D转换。
- 实时消息传输协议 RTMP Real Time Messaging Protocol
- 血淋淋的经验!2021做亚马逊测评是搭上末班车?还是成为新韭菜?