32位汇编语言学习笔记(36)--repne scasb指令
repne scasb指令,用于扫描字符串,计算字符串的长度,如下两条指令:
cld
repne scasb
对应的等价指令是:
scans:inc edi
dec ecx
je loopdone
cmp byte [edi-1],al
jne scans
loopdone:
下面看一个示例程序:
section .dataEditBuff: db 'abcdefghijklm#',10BUFFERLEN equ $-EditBuffFILLCHR equ 35 ;'#'section .textWriteStr:push eax ; Save pertinent registerspush ebxmov eax,4 ; Specify sys_write callmov ebx,1 ; Specify File Descriptor 1: Stdoutint 80H ; Make the kernel callpop ebx ; Restore pertinent registerspop eaxret ; Go homeglobal _start
_start:nopmov ecx,EditBuff mov edx,BUFFERLEN call WriteStrcldmov al, FILLCHRmov edi,EditBuff mov ecx,0000ffffh repne scasbmov byte [edi-1], '$'mov ecx,EditBuff mov edx,BUFFERLEN call WriteStrExit: mov eax,1 ; Code for Exit Syscallmov ebx,0 ; Return a code of zero int 80H ; Make kernel call
程序分析:
cld //控制edi指向的字符串地址变化方向是从低到高
mov al, FILLCHR //al=’#’
mov edi,EditBuff //edi= EditBuff
mov ecx,0000ffffh //ecx=65535
repne scasb //扫描edi指向的字符串,扫描方向从低位地址向高位地址,如果遇到字节等于al或者ecx计数为0,则结束扫描。
mov byte [edi-1], '$' //因为每次循环都会把edi加1,因此edi-1才是等于al那个字节(对于本例ecx肯定不会为0)。所以本条指令会把’#’替换成’$’。
makefile文件内容:
scasbdemo: scasbdemo.old -o scasbdemo scasbdemo.o
scasbdemo.o: scasbdemo.asmnasm -f elf -g -F stabs scasbdemo.asm -l scasbdemo.lst
测试:
[root@bogon scasbdemo]# make
nasm -f elf -g -F stabs scasbdemo.asm -l scasbdemo.lst
ld -o scasbdemo scasbdemo.o
[root@bogon scasbdemo]# ./scasbdemo
abcdefghijklm#
abcdefghijklm$
32位汇编语言学习笔记(36)--repne scasb指令相关推荐
- windows下32位汇编语言学习笔记
windows下32位汇编语言学习笔记 第一章 第一章 背景知识 80x86处理器的存储器 4个数据寄存器 EAX,EBX,ECX,EDX EAX寄存器 所有API函数的返回值都保存在EAX里,注意 ...
- 32位汇编语言学习笔记(45)--测试简单文件操作接口(完)
这是<Assembly Language step by step programming with linux>书中的最后一个程序,也是全书中的最复杂的一个程序. 首先看一下这个程 ...
- 32位汇编语言学习笔记(43)-- 生成随机数
此程序出自<Assembly Language step by step programming with linux>第12章,用于演示随机数函数的使用,共涉及两个随机数函数: v ...
- 32位汇编语言学习笔记(33)--aaa指令
aaa(ASCII adjust after addition)指令,是BCD指令集中的一个指令,用于在两个未打包的BCD值相加后,调整al和ah寄存器的内容. BCD(Binary-coded ...
- 16位汇编语言学习笔记(2)—— 汇编程序设计
文章目录 4. 顺序程序设计 4.1 十进制的算数运算 4.2 输入输出功能调用 4.3 综合案例 5. 分支程序设计 5.1 转移指令 5.1.1 条件转移指令 单标志条件转移指令 无符号数专用条件 ...
- 汇编语言学习笔记(十二)-浮点指令
浮点数如何存储 浮点寄存器 浮点数指令 浮点计算例子 浮点高级运算 CMOV移动指令 浮点数如何存储 浮点数的运算完全不同于整数,从寄存器到指令,都有一套独特的处理流程,浮点单元也称作x87 FPU. ...
- 16位汇编语言学习笔记(1)——基础知识
文章目录 1.配置汇编学习环境 1.1 工具下载 1.2 配置环境 2. 汇编命令基础 2.1 简单使用 2.2 常用命令 3. 汇编语言基础 3.1 汇编语言程序与汇编程序 3.2 汇编语言程序的格 ...
- 琢石成器――windows环境下32位汇编语言程序设计(第三版)笔记
琢石成器――windows环境下32位汇编语言程序设计(第三版)笔记 2011年12月20日 基础篇 第1章 背景知识 1 1.1 Win32的软硬件平台 1.1.1 80x86系列处理器简史 1.1 ...
- Windows环境下32位汇编语言程序设计(典藏版)(含CD光盘1张)
Windows环境下32位汇编语言程序设计(典藏版)(含CD光盘1张)(畅销10年,经典再现!) 罗云彬 著 ISBN 978-7-121-20759-4 2013年7月出版 定价:99.00元 75 ...
最新文章
- linux系统-软链接与硬链接区别
- CSS之深入理解 flex 布局以及计算
- 为什么程序员总是打扮成这样一幅鬼样子
- 《深入浅出DPDK》读书笔记(九):流分类与多队列、流过滤、虚拟化流分类方式、流分类技术的使用
- tl r402路由器设置_tp-link TL-WR700N 迷你型路由器设置记录
- java中阻止类的继承
- Tomcat 启动报does not exist or is not a readable directory错误,修改配置文件
- 京东h5移动端适配(REM)
- Nginx(九):Nginx网页压缩技术
- Qt实现双击可编辑的QLabel,输入文本后回车确定
- 批处理修改计算机名为ip,批处理修改计算机名和IP地址
- outlook邮箱邮件大小限制_outlook邮箱附件大小限制怎么办_outlook超出邮箱附件大小限制如何处理-win7之家...
- SMB服务搭建与访问
- 江苏金丰机电有限公司参观考察
- java.util.list源码_关于fest-util源码包Collections集合工具类过滤、判空、格式化及复制克隆处理...
- 马云布局大阿里蓝图:美好但需跋涉
- id 查找apple_厉害!竟能利用苹果ID锁找回丢失手机?
- Oss endpoint can‘t be empty.
- 手把手教你如何远程连接云服务器(图文教程)?
- EO-88遥测信号接收教程
热门文章
- 悼念乔布斯---他的产品改变了世界,思想影响了一代人,三个故事,勉励大家
- IDEA报错 module java.base does not “opens java.lang.invoke“
- 第四周 Java语法总结_内部类_常用类_getclass_toStrong_equals_clone_Scanner_String_StringBuffer_Integer_集合_插入排序
- 【LeetCode刷题日记】常用算法基础和理解及运用
- 用Easyui写一个银行个人存款计算器(纯前端页面)
- 为什么选择紫外光固化修复管道?
- esp32之wifi状态机
- 10.设计模式之桥接模式
- NginxKeepalived 实现高可用
- 体会Linux与生俱来的美 初级篇 走进Linux 操作系统