【汇编语言】8086汇编的loop循环与[bx]寻址(王爽第五章5.5节学习笔记)
计算FFFF:0 ~ FFFF:B单元中数据的和,结果存储到dx中
1 分析与解决
- 内存单元:字节型数据
- 目标寄存器:dx,字型寄存器,不匹配
- 数据范围:dx不会超,但是dl会超,因此必须用dx
- 将字节型数据,转换为字型数据,前8位置为0
- 利用循环,和bx的增加,实现寻址和累加
assume cs:codesg
codesg segmentstart:; 数据指向 ffff:0mov ax,0ffffhmov ds,axmov bx,0mov dx,0 ; 累加器置零mov cx,12 ; 设置循环次数mov ah,0 ; 高8位置零,接收字节型数据s:mov al,[bx]add dx,axinc bxloop smov ax,04c00hint 21h
codesg ends
end start
需要注意,mov ah,0
放在循环里面第一条也可以,但是没有必要!(除非指令是乱序执行的)
2 重要知识点
2.1 框架一:定位数据地址
mov ax,段地址
mov ds,ax
mov 目标,偏移地址
2.2 框架二:累加先置零
累加器在进行运算前,要先置零
mov dx,0
2.3 框架三:字节型数据转换为字型数据
mov ah,0
mov al,字节型数据
这样,字节型数据,就成了存储在ax中的字型数据
2.4 框架四:循环结构
mov cx,循环次数
s:<内容>loop s
2.5 框架五:利用自增实现批量处理
利用循环结构实现寄存器的自增,这样就可以批量处理处于连续内存的数据了。
3 结合C语言和x86-32汇编
循环的本质,是指令的跳转,例如上面的loop
,本质是修改IP的值,使得CS:IP
指向对应的指令,8086使用cx的值来控制循环次数。
看一下C语言的循环
int i = 0;
while (i < 10) {i++;
}
对应的x86-32汇编指令
1: int i = 0;
00FE1728 mov dword ptr [ebp-8],0 2: while (i < 10) {00FE172F cmp dword ptr [ebp-8],0Ah
00FE1733 jge 00FE1740 3: i++;
00FE1735 mov eax,dword ptr [ebp-8]
00FE1738 add eax,1
00FE173B mov dword ptr [ebp-8],eax 4: }
00FE173E jmp 00FE172F
依然秉承着原有的思想:循环的本质是跳转,循环次数靠条件控制。
这里简单解释:
cmp是比较指令,compare,比较两个操作数的大小,得到的结果,它不改变操作数,但会影响标志寄存器的值。
jge是转移指令,用于修改EIP的值,用于指令的跳转,它常与cmp一起出现,它根据标志位的情况,判断是否执行跳转。
jmp是无条件跳转指令,遇到就立即跳转。
这里没有阐明技术细节,只是宏观认知,以下是while循环的图示:
【汇编语言】8086汇编的loop循环与[bx]寻址(王爽第五章5.5节学习笔记)相关推荐
- 《汇编语言》王爽—第五章实验三详解
题目描述 (1) 将下面的程序保存为2.asm文件,将其生成可执行文件2.exe. assume cs:codesg codesg segment mov ax,2000H mov ss,ax mov ...
- 开发日记-20190913 关键词 汇编语言王爽版 第一章
Preface 最近手机坏了,感觉心里挺不是滋味的,在各种方面,特别是钱!直到今天,我才知道钱真的是一种很重要的东西,以及苹果公司到底有多恶心. 真的很奇怪,为什么世界上就没有任何一家公司能和苹果公司 ...
- 汇编语言-王爽 第7章 更灵活的定位内存地址的方法-笔记
将datasg中的第一个字符串转化为大写,第二个字符串转化为小写. 第一种方法: assume cs:codesg,ds:datasgdatasg segmentdb 'BaSic'db 'iNfOr ...
- 传感器自学笔记第十一章——三色RGB学习笔记+高感度声音检测模块+KY-010光遮断传感器+TCRT5000循迹传感器+倾斜模块
作者:GWD 时间:2019.06.28 三色RGB学习笔记(开关量类传感器) 一.学习要点:无 二.手册分析(开关量传感器) 1.产品用途:RGB LED 模块由一个贴片全彩 LED 制成,通过 R ...
- 【汇编语言】王爽第六章程序6.3解答,8086汇编语言实现数据的倒序存放
程序很简单,就是利用栈,实现数据的倒序存放. ; 将数据逆序存放 assume ds:data data segment dw 0123h,0456h,0789h,0abch,0defh,0fedh, ...
- 读书笔记:汇编语言 第三版 王爽 清华出版社 章六 章七 章八 章九 章十
第六章 包含多个段的程序6.0 概述合法地通过操作系统取得的空间都是安全的操作系统不会让多个程序之间发生空间冲突程序向操作系统获得空间的方法程序加载时分配在程序中定义各种段程序运行时分配通过指令向操作 ...
- 读书笔记:汇编语言 第三版 王爽 清华出版社 章十六 章十七 章十八
第十六章 直接定址表16.1 描述了单位长度的标号地址标号,表征了位置的偏移地址label:数据标号,表征了一段内存空间的物理地址和长度,增强型地址标号段地址,数据标号所在段的关联段寄存器,assum ...
- 汇编语言 (王爽) 第二章笔记
汇编语言 寄存器 寄存器的分类 几条常用的汇编指令 物理地址 段寄存器 CS和IP 修改CS,IP指令 debug常用命令: 内存中字的存储 寄存器 寄存器的分类 8086CPU有14个寄存器,分别是 ...
- 汇编语言---------王爽第4章
第4章 一个源程序从写出到执行的过程 end assume 标号 程序的运行机制 与结束相关的概念 写汇编程序 编辑源程序 编译源程序 链接 程序执行过程的跟踪 一个源程序从写出到执行的过程 一个源程 ...
最新文章
- IOS中Cell自定义
- Cell:基因表达的改变和群落的更替塑造了全球海洋宏转录组
- python提供了_Python中 为我们提供了一些独特的解决方案的方法特性
- 你写的机器学习代码占多少内存?这件事很重要,但很多人还不懂
- 【Linux】一步一步学Linux——exec命令(208)
- 关于移动应用APP数据安全的一点见解
- 牛客题霸 两数之和C++题解/答案
- nagios监控配置错误汇总
- 自然语言领域中图神经网络模型(GNN)应用现状(论文)
- jquery文档就绪函数
- java 机器学习库_7个最好的Java机器学习开发库
- 通过PHP使用Google Translate API
- NO.003-2018.02.08《江城子·乙卯正月二十日夜记梦》宋代:苏轼
- 网页Windows Media Player播放器参数含义(转)
- 用四阶RungeKutta方程解二阶常微分方程,并计算船舶在规则波中的横摇角(附Matlab代码)
- 江湖笑(2006[神雕侠侣]片尾主题曲)铃声 江湖笑(2006[神雕侠侣...
- Google、苹果、亚马逊向“自动驾驶”发起进攻
- 2023第八届少儿模特明星盛典 小超模黄梓曦 担任全球赛代言人
- 学硕与专硕,全日制与非全日制,定向与非定向......8大考研常识,你清楚吗?
- php智能识别收货地址信息
热门文章
- Gentoo - ssh-agent配置
- hibernate中PO对象的三种状态分析以及session中的一些方法的区别
- C语言简单程序情话,给你一份程序员的“科技情话”,赶在双十一前脱单吧
- logstash 吞吐量优化_1002-谈谈ELK日志分析平台的性能优化理念
- debian dhcp服务启动不了_DHCP服务器配置
- mysql序列号生成_一文看懂mycat的6种全局序列号实现方式
- php数据库创建文件失败怎么回事,安装zblogPHP提示“创建c_option.php失败”解决方法...
- mysql 阿里云 版本_关于阿里云centos版本,mysql5.7的一些注意事项
- 2014编程之美资格赛
- php apache win7,win7安装apache+php