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

第七章:更灵活的定位内存地址的方法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/p/3846994.html