当前位置:鱼C工作室 >汇编语言 > 查看文章

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

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

 

让编程改变世界

Change the world by program


 

不同的寻址方式的灵活应用

 

如果我们比较一下前面用到的几种定位内存地址的方法(可称为寻址方式),就可以发现有以下几种方式:

(1)[iata] 用一个常量来表示地址,可用于直接定位一个内存单元;

(2)[bx]用一个变量来表示内存地址,可用于间接定位一个内存单元;

(3)[bx+idata] 用一个变量和常量表示地址,可在一个起始地址的基础上用变量间接定位一个内存单元;

(4)[bx+si]用两个变量表示地址;

(5)[bx+si+idata] 用两个变量和一个常量表示地址。

 

可以看到:

从[idata]一直到[bx+si+idata],我们可以用更加灵活的方式来定位一个内存单元的地址。

这使我们可以从更加结构化的角度来看待所要处理的数据。

下面我们将通过一系列问题来体会CPU提供多种寻址方式的用意,并学习一些相关的编程技巧。

好了,大家要做好心理准备~

 

问题7.6

 

编程,将datasg段中每个单词的头一个字母改为大写字母。

assume cs:codesg,ds:datasg
datasg segment
    db '1. file       '
    db '2. edit       '
    db '3. search     '
    db '4. view       '
    db '5. options    '
    db '6. help       '
datasg ends
 
codesg segment
    start:……
codesg ends
end start

 

问题7.6分析

 

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

datasg中的数据的存储结

 

我们可以看到:

在datasg中定义了6个字符串,每个长度为16字节。(注意,为了直观,每个字符串的后面都加上了空格符,以使它们的长度刚好为16字节)

我们需要进行6次循环,用一个变量R定位行,用常量3定位列。

 

处理的过程如下:

BX先存放第一行的地址

mov cx,6;因为总共有六行

s:       改变第BX行,第3列的字母为大写

改变BX的值是它指向下一行的地址

loop

 

我们用bx作变量,定位每行的起始地址,用3定位要修改的列,用[bx+idata]的方式来对目标单元进行寻址,

 

请看视频具体演示!

分页阅读: 1 2 下一页
为您推荐

报歉!评论已关闭.