更灵活的定位内存地址方式

  • 7.1 and和or命令
    • 解决大小写转换问题
    • [bx+idata]的含义
  • 7.2 SI和DI
    • [bx+si]和[bx+di]方式指定地址(基址+变址寻址)
    • [bx+si+idata]和[bx+di+idata]方式指定地址
    • 不同寻址方式的灵活运用

7.1 and和or命令

db ‘.......’方式给出字符串,并将其以ASCII码的对应形式写入内存中
在ASCII码中大小写同字母之间相差32个序号,所以可以通过与11011111b即二进制的数据,来转换大写或00100000b来转换小写。即加减32位的数值变换大小写。

解决大小写转换问题

大小写转换要通过初始化bx和循环次数,在循环中通过与或操作进行大小写转换。

代码如下:
通过两次循环实现大小写转换

assume cs:codesg,ds:datasg
datasg segmentdb 'BaSiC'db 'MinIX'
datasg endscodesg segment
start:mov ax,datasgmov ds,axmov bx,0mov cx,5
s:  mov al,[bx]and al,11011111bmov [bx],alinc bxloop smov bx,5mov cx,5
s0: mov al,[bx]or al,00100000bmov [bx],alinc bxloop s0mov ax,4C00Hint 21Hcodesg endsend start

[bx+idata]的含义

通过单次循环[bx+idata]解决大小写转换

assume cs:codesg,ds:datasg
datasg segmentdb 'BaSiC'db 'MinIX'
datasg endscodesg segment
start:mov ax,datasgmov ds,axmov bx,0mov cx,5
s:  mov al,[bx]and al,11011111bmov [bx],almov al,[bx+5]or al,00100000bmov [bx+5],alinc bxloop smov ax,4C00Hint 21Hcodesg endsend start

7.2 SI和DI

SI,DI称为变址寄存器。
其特点就是不能分为两个八位寄存器来使用。一直都是16位。


[bx+si]和[bx+di]方式指定地址(基址+变址寻址)


[bx+si+idata]和[bx+di+idata]方式指定地址


不同寻址方式的灵活运用

直接寻址:通过一个常量数字来表示一个地址。
寄存器间接寻址:用一个变量[bx]表示偏移地址,存入寄存器中再传给ax
寄存器相对寻址:通过用一个起始地址的常量[idata]来加上变量[bx]来间接表示内存单元。
基址变址寻址:用两个 变量[bx+si] 表示地址。
相对基址变址寻址:用
两个变量[bx+si]一个 常量[idata]
来表示地址。

assume cs:codesg,ds:datasg
datasg segmentdb '1. file         'db '2. edit         'db '3. search       'db '4. view         'db '5. options      '
datasg endscodesg segment
start:mov ax,datasgmov ds,axmov bx,0mov cx,5
s:  mov al,[bx+3]and al,11011111bmov [bx+3],aladd bx,16loop smov ax,4C00Hint 21Hcodesg endsend start


上面这段代码有个问题,那就是cx只有一个,到第二个循环内出来时,cx已经变为0了,那再出外层循环时,cx不是成为负数了么?我们要怎么改进呢?
我们可以通过一个多余的寄存器dx来保存
但是如果dx已经被用了呢?寄存器可是只有14个。
相对而言我们可以用固定的内存空间保存数据,这样相较而言比占用宝贵的寄存器资源要更加划算,但是这样也有一个新问题,那就是如果当时内存空间有别的内容,可能最终会改变别的功能,造成一些后果。
再改进的话我们可以在程序运行前先定义一个栈段,把需要用到的cx的值压到栈段中,用到的时候将其弹出,回复cx。

【汇编】更灵活的定位内存地址方式——and,or命令、SI、DI变址寄存器、直接寻址[idata]、寄存器间接寻址[bx]、寄存器相对寻址[bx+idata]、基址变址寻址、相对基址变址寻址相关推荐

  1. 汇编: 更灵活的定位内存地址的方法

    bx是偏移地址寄存器.同样的, si,di也是偏移地址寄存器. 这样使用了si,di可以更灵活的定位内存地址. assume cs:codecode segmentstart: mov bx,0mov ...

  2. 更灵活的定位内存地址的方法---汇编学习笔记

    更灵活的定位内存地址的方法 前面,我们用[0].[bx]的方法,在访问内存的指令中,定位内存单元的地址.本章将用更灵活的方式来定位内存地址. 7.1 and和or指令 (1)and指令:逻辑与指令,按 ...

  3. 汇编程序-更灵活的定位内存地址方法

    汇编程序-更灵活的定位内存地址方法 如何灵活运用定位内存的方法呢?在之后,我们将列出几个实际例子.通过例子,展示定位内存的一些方法,熟悉和提升我们对汇编程序的理解. 大小写转化(1) 通过上面的汇编程 ...

  4. 更灵活的定位内存地址的方法02 - 零基础入门学习汇编语言33

    第七章:更灵活的定位内存地址的方法02 让编程改变世界 Change the world by program [bx+idata] 在前面,我们可以用[bx]的方式来指明一个内存单元, 我们还可以用 ...

  5. 更灵活的定位内存地址的方法05 - 零基础入门学习汇编语言36

    第七章:更灵活的定位内存地址的方法05 让编程改变世界 Change the world by program 问题7.8 [codesyntax lang="asm"] assu ...

  6. [汇编语言]更灵活的定位内存地址的方法

    目录 一.and和or指令 二.以字符的形式给出数据 三.大小写转化问题 四.[bx+idata] 五.SI和DI 六.[bx+si]和[bx+di] 与 [bx+si+idata]和[bx+di+i ...

  7. (七)汇编语言——更灵活的定位内存地址的方法

    目录 and和or ASCII码 [bx+idata] SI和DI寄存器 [bx+si]和[bx+di] [bx+si+idata]和[bx+di+idata] 总结 例子(双重循环的解决方案) 我们 ...

  8. 王爽 汇编语言第三版 第7章 --- 更灵活的定位内存地址的方法(可以理解为 数组形式的内存定位)

    汇编语言(第三版)王爽著 的十二个实验:https://blog.csdn.net/OrangeHap/article/details/89791064 大小端 字节对齐 对于 arm,intel 这 ...

  9. 《汇编语言》总结04 —— 更灵活的定位内存地址的方法

    (一)and和or指令 and指令:逻辑与指令,按位进行与运算 mov al,01100011B and al,00111011B 执行后,al=00100011B 作用:通过该指令可将操作对象的相应 ...

  10. 汇编语言-王爽 第7章 更灵活的定位内存地址的方法-笔记

    将datasg中的第一个字符串转化为大写,第二个字符串转化为小写. 第一种方法: assume cs:codesg,ds:datasgdatasg segmentdb 'BaSic'db 'iNfOr ...

最新文章

  1. python中while嵌套循环_python中的while循环
  2. 动态路由协议RIP的基本原理与配置
  3. 自学python需要下载什么软件-学python下载什么软件开发
  4. 作为项目的直接上级通过问题和风险来帮助项目
  5. MFC中关于虚函数的一些问题
  6. 前端学习(1849)vue之电商管理系统电商系统前端项目初始化
  7. java软尾山地车评测_[渣图] 骑很慢的穷屌丝软尾历程
  8. 在做模具设计过程中应注意哪些问题
  9. 雨棚板弹性法计算简图_雨棚板的计算书
  10. vue2中vant实现网易云音乐案例-附带所有源码
  11. Process Hacker 简单介绍
  12. Pinia(小菠萝)使用方法
  13. App关键字(100字符)优化的方法
  14. [观点]AppStore支持人民币支付对国内开发者的影响
  15. DNS Glue Record 测试、查找
  16. 标星 2.7w+ 堪称史上最全的微信小程序开发资源汇总
  17. HTTP请求错误码大全
  18. Cena win8/win10配置
  19. 计算机比特有大小吗,比特大小- 比特犬一般能长多大
  20. 美国的教科书价格为什么这么高

热门文章

  1. tp5 根据身份证号码判断性别 男女
  2. 浅谈学习的深度和广度
  3. LimeSDR-USB硬件部分详细解读
  4. Unity跳一跳小游戏简单代码
  5. 【iPhone】解决照片无法编辑或删除的问题
  6. sai笔记3-钢笔图层
  7. 系统测试:功能测试、健壮性测试、恢复测试、安全测试、压力测试
  8. 微服务架构下分布式事务解决方案
  9. win7 共享计算机 网络密码怎么设置,win7局域网共享设置密码 win7局域网如何设置密码【详细步骤】...
  10. 汇新杯选手专访:旅游看人海?VR+旅游让你身临其境