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

本文介绍了通过灵活的寻址方式实现对内存中特定数据的修改。重点在于使用二重循环来修改数据段中每个单词的前四个字母为大写,并讨论了寻址方式的应用、二重循环问题处理及大小写转换的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第七章:更灵活的定位内存地址的方法06

 

让编程改变世界

Change the world by program


 

问题7.9

 

编程,将datasg段中每个单词的前四个字母改为大写字母:

[codesyntax lang="asm"]
assume cs:codesg,ds:datasg,ss:stacksg

stacksg segment
   dw 0,0,0,0,0,0,0,0
stacksg ends

datasg segment
   db '1. display......'
   db '2. brows........'
   db '3. replace......'
   db '4. modify.......'
datasg ends

codesg segment
start: 
    ……
codesg ends

end start
[/codesyntax]  

问题7.9分析

 

datasg中的数据的存储结构,如图:

[caption id="attachment_337" align="aligncenter" width="300"] datasg中的数据存储情况[/caption] 由于数据是连续存放的,我们可以将这4个字符串看成一个4行16列的二维数组,按照要求,我们需要修改每个单词的前四个字母,即二维数组的每一行的3~6列。 我们需要进行4x4次的二重循环,用变量R定位行,常量3定位每行要修改的起始列,变量C定位相对于起始列的要修改的列。  

其实这个题也就是将前边的三个题目给“总结”概括了一下!

我们首先用R定位第1行,循环修改R行的3+C( 0≤C≤3 )列

然后再用R 定位到下一行,再次循环修改R行的3+C(0≤C≤3)列

如此重复直到所有的数据修改完毕。

 

处理的过程大致如下:

R=第一行的地址;

mov cx,4

s0:   C=第一个要修改的列相对于起始列的地址

mov cx,4

s:      改变R行,3+C列的字母为大写

C=下一个要修改的列相对于起始列的地址

loop s

R=下一行的地址

loop s0

  我们用bx来作变量,定位每行的起始地址,用 si定位要修改的列,用 [ bx+3+si ]的方式来对目标单元进行寻址。 请在实验中白己完成这个程序。  

小结

  这一章中,我们主要讲解了更灵活的寻址方式的应用和一些编程方法,主要内容有:

寻址方式

[bx(或si、di)+idata]、

[bx+si(或di)]、

[bx+si(或di)+idata]的意义和应用;

 

二重循环问题的处理;

栈的应用;

大小写转化的方法;

and 、or 指令。

  下一章中,我们将对寻址方式的问题进行更深入地探讨。 之所以如此重视这个问题,是因为寻址方式的适当应用,使我们可以以更合理的结构来看待所要处理的数据。 而为所耍处理的看似杂乱的数据设计一种清晰的数据结构是程序设计的一个关键的问题。  

实验六

将本章中讲解过的程序上“鸡”调试,用debug跟踪其执行过程,并在过程中进一步深入理解所讲的内容。(毕竟有时候小甲鱼讲得比较快,大家要注重自己的加深理解!) [buy]  获得所有教学视频、课件、源代码等资源打包 [/buy] [Downlink href='http://kuai.xunlei.com/d/LJCHKCSGLGUW']视频下载[/Downlink]

转载于:https://www.cnblogs.com/LoveFishC/archive/2010/12/27/3846016.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值