汇编程序-更灵活的定位内存地址方法
汇编程序-更灵活的定位内存地址方法
如何灵活运用定位内存的方法呢?在之后,我们将列出几个实际例子。通过例子,展示定位内存的一些方法,熟悉和提升我们对汇编程序的理解。
大小写转化(1)
通过上面的汇编程序,我们完成了将data段中存放的『basIc』转化为了『BASIC』,将『MinIX』转化为了『minix』
assume cs:codedata segmentdb 'basIc'db 'MinIX'
data endscode segment start: mov ax,datamov ds,axmov bx,0mov si,0 ;表示起始位置,这里起始位置为0;观察ASCII码表,对比大小写字母的二进制形式,;发现除了第5位外,大写小字母的其他各个位数都是一样的。;大写字母的第5位为0,小写字母的第5位为1。;因此,转化大小写,只要对第5位数进行逻辑运算即可mov cx,5
s: mov al,[si+bx]and al,11011111Bmov [bx],almov al,[si+5+bx]or al,00100000Bmov [5+bx],alinc bx
loop smov ax,4c00Hint 21Hcode endsend start
如图:
知识点
and表示逻辑与运算。
mov al,10101100B and al,11011111B//结果 al = 10001100B
or表示逻辑或运算。
mov al,10001100B or al,00100000B//结果 al = 10101100B
db ‘……’为以字符的形式给出数据。编辑器讲他们转化为相对应的ASCII码,一个单词为一个字节大小。
[idata+bx]
在前面,我们用[bx]的方式来指明一个内存单元,还可以用一种更为灵活的方式来指明内存单元:[idea+bx]表示一个内存单元,他的偏移地址为(bx)+idata(bx中的数值加上idata)。
常用格式:
mov ax,[200+bx] mov ax,200[bx]//模拟高级语言写法(类似于c语言中的a[10]) mov ax,[200].bx//模拟高级语言写法
si,di寄存器
si,di是和bx功能相近的寄存器。下面展示了几种使用方法:mov ax,[si]
/mov ax,[bi]
mov ax,[bx][si]
/mov ax,[bx][bi]
mov ax,[bx+si+10]
/mov ax,200[bx][si]
/mov ax,[bx].200[si]
/mov ax,bx[si].200
大小写转化(2)
通过下面的汇编程序,我们完成了将data段中存放的4条字符串中的小写字母转化为了大写字母
assume cs:code, ds:data, ss:stackdata segmentdb 'ibm ' db 'dec 'db 'vox 'db 'vax '
data endsstack segmentdw 0,0
stack endscode segmentstart:mov ax,stackmov ss,axmov sp,16mov ax,datamov ds,axmov bx,0mov cx,4s0: push cxmov si,0mov cx,3s: mov al,[bx+si]and al,11011111Bmov [bx+si],alinc siloop sadd bx,16pop cx
loop s0mov ax,4c00Hint 21Hcode endsend start code endsend start
如图:
知识点
通过栈来存放数据
例如:上面程序中进行了嵌套循环,但是技术寄存器cx只有一个。怎么做到将cx存储一分为二使用呢?我们可以通过栈来将cx中的数据存储到内存单元中。外层循环中,我们通过cx来进行循环计数;在进入内层loop之前,将外层的loop中的cx,push存放起来,再重新设置cx,进行内部loop;当内层loop完毕,通过pop将cx中的数取出来,继续外部loop中的操作。
循环嵌套
s0: push cx...s: mov al,[bx+si].........loop spop cx loop s0
大小写转化(3)
'1. display '
'2. brows '
'3. replace '
'4. modify '
将上面4个字符串中的小写单词转化为大写单词。
代码如下
assume cs:code, ds:data, ss:stackdata segmentdb '1. display ' db '2. brows 'db '3. replace 'db '4. modify '
data endsstack segmentdw 0,0
stack endscode segmentstart: mov ax,stackmov ss,axmov sp,10Hmov ax,6Hpush axmov ax,7Hpush axmov ax,5Hpush axmov ax,7Hpush axmov ax,datamov ds,axmov bx,3Hmov si,0Hmov cx,4H
s1: mov dx,cxpop cxpush dxmov si,0Hs2: mov al,[bx+si]and al,11011111Bmov [bx+si],alinc siloop s2add bx,10Hpop cx
loop s1mov ax,4c00Hint 21H
code ends
end start
效果图
转载于:https://www.cnblogs.com/AbeDay/p/5026856.html
汇编程序-更灵活的定位内存地址方法相关推荐
- 更灵活的定位内存地址的方法02 - 零基础入门学习汇编语言33
第七章:更灵活的定位内存地址的方法02 让编程改变世界 Change the world by program [bx+idata] 在前面,我们可以用[bx]的方式来指明一个内存单元, 我们还可以用 ...
- 更灵活的定位内存地址的方法---汇编学习笔记
更灵活的定位内存地址的方法 前面,我们用[0].[bx]的方法,在访问内存的指令中,定位内存单元的地址.本章将用更灵活的方式来定位内存地址. 7.1 and和or指令 (1)and指令:逻辑与指令,按 ...
- 更灵活的定位内存地址的方法05 - 零基础入门学习汇编语言36
第七章:更灵活的定位内存地址的方法05 让编程改变世界 Change the world by program 问题7.8 [codesyntax lang="asm"] assu ...
- 汇编: 更灵活的定位内存地址的方法
bx是偏移地址寄存器.同样的, si,di也是偏移地址寄存器. 这样使用了si,di可以更灵活的定位内存地址. assume cs:codecode segmentstart: mov bx,0mov ...
- (七)汇编语言——更灵活的定位内存地址的方法
目录 and和or ASCII码 [bx+idata] SI和DI寄存器 [bx+si]和[bx+di] [bx+si+idata]和[bx+di+idata] 总结 例子(双重循环的解决方案) 我们 ...
- [汇编语言]更灵活的定位内存地址的方法
目录 一.and和or指令 二.以字符的形式给出数据 三.大小写转化问题 四.[bx+idata] 五.SI和DI 六.[bx+si]和[bx+di] 与 [bx+si+idata]和[bx+di+i ...
- 《汇编语言》总结04 —— 更灵活的定位内存地址的方法
(一)and和or指令 and指令:逻辑与指令,按位进行与运算 mov al,01100011B and al,00111011B 执行后,al=00100011B 作用:通过该指令可将操作对象的相应 ...
- 王爽 汇编语言第三版 第7章 --- 更灵活的定位内存地址的方法(可以理解为 数组形式的内存定位)
汇编语言(第三版)王爽著 的十二个实验:https://blog.csdn.net/OrangeHap/article/details/89791064 大小端 字节对齐 对于 arm,intel 这 ...
- 汇编语言-王爽 第7章 更灵活的定位内存地址的方法-笔记
将datasg中的第一个字符串转化为大写,第二个字符串转化为小写. 第一种方法: assume cs:codesg,ds:datasgdatasg segmentdb 'BaSic'db 'iNfOr ...
最新文章
- [vb+mo] visual baisc 6.0 基于mapobjects 2.4 开发的数字化校园电子地图
- niosII EDS和QuartusII安装心得体会
- Linux动态链接库的使用
- linux网络协议栈之数据包处理过程,Linux网络协议栈之数据包处理过程
- 大数据视觉智能实践及医学影像智能诊断探索(讲座精华笔记)
- [译]WPF开源控件扩展库ControlzEx
- 本地线程分配缓冲_线程本地分配缓冲区
- fasttext 文本分类_4种常见的NLP实践思路【特征提取+分类模型】
- PyTorch框架学习一——PyTorch的安装(CPU版本)
- java事件绑定,Java编程GUI中的事件绑定代码示例
- Java并发编程实战————售票问题
- Elasticsearch性能监控(一)
- 前端编码规范之JavaScript
- 学习笔记 十一 : iscsi
- 案例-旋转木马(CSS3)
- linux 检查文件更新,Linux系统文件系统优化及磁盘检查
- Blend 混合模式
- jpa 人大金仓数据库方言_人大金仓+springboot配置
- 利用Python创建Excel条形图
- 按键精灵电脑版对接百度ai,告别字库(文字识别篇)
热门文章
- python中的float和eval_python中eval和float_python中eval与json.loads对json的处理
- 搜索引擎蜘蛛抓取主要依据用户的四种行为
- c 语言 循环队列,循环队列C语言
- oracle 11gr2 单机数据库使用asm,RHEL7上安装11gR2单机使用ASM存储搭建Physical Standby笔记...
- ios 圆形旋转菜单_iOS高级动画:圆形树展开收起动画
- java 集合自定义元素_java集合 collection-list-ArrayList 将自定义对象作为元素存到ArrayList集合中,并去除重复元素。...
- 开发日记-20190918 关键词 努力
- 开发日记-20190417 关键词 代码之间耦合度的一刀两断 (思路篇)
- SIMD指令集——一条指令操作多个数,SSE,AVX都是,例如:乘累加,Shuffle等
- cassandra 集群并发测试脚本