数据处理的两个基本问题03 - 零基础入门学习汇编语言40
2011-01-02 00:47
1001 查看
第八章:数据处理的两个基本问题03
让编程改变世界Change the world by program
寻址方式的综合应用
下面我们通过一个实例来进一步讨论各种寻址方式的作用。关于DEC公司的一条记录(1982年):
公司名称:DEC
总裁姓名:Ken Olsen
排 名:137
收 入:40
著名产品:PDP
1988年DEC公司的信息有了变化:
1、Ken Olsen 在富翁榜上的排名已升至38位;
2、DEC的收入增加了70亿美元;
3、该公司的著名产品已变为VAX系列计算机。
任务:编程修改内存中的过时数据
[caption id="attachment_348" align="aligncenter" width="221"]编程修改内存中的过时数据[/caption]
首先,我们应该分析一下要修改的数据:
(1)(DEC公司记录)的(排名字段)(2)(DEC公司记录)的(收入字段)
(3)(DEC公司记录)的(产品字段)的(第一个字符)、(第二个字符)、(第三个字符)
从要修改的内容,我们就可以逐步地确定修改的方法:
(1)我们要访问的数据是DEC公司的记录,所以,首先要确定DEC公司记录的位置:R=seg:60 确定了公司记录的位置后,我们下面就进一步确定要访问的内容在记录中的位置。(2)确定排名字段在记录中的位置:0CH。
(3)修改R+0CH处的数据。
(4)确定收入字段在记录中的位置:0EH。
(5)修改R+0EH处的数据。
(6)确定产品字段在记录中的位置:10H。要修改的产品字段是一个字符串(或一个数组),需要访问字符串中的每一个字符。所以我们要进一步确定每一个字符在字符串中的位置。
(7)确定第一个字符在产品字段中的位置:P=0。
(8)修改R+10H+P处的数:P=P+1。
(9)修改R+10H+P处的数据: P=P+1。
(10)修改R+10H+P处的数据。
根据上面的分析,程序如下:
[codesyntax lang="asm"]
mov ax,seg mov ds,ax mov bx,60h mov word ptr [bx+0ch],38 add word ptr [bx+0eh],70 mov si,0 mov byte ptr [bx+10h+si],’V’ inc si mov byte ptr [bx+10h+si],’A’ inc si mov byte ptr [bx+10h+si],’X’
[/codesyntax]
如果读者熟悉C语言的话,我们可以用C语言来描述这个程序,大致应该是这样的:C语言描述
[caption id="attachment_349" align="aligncenter" width="300"]
C语言描述[/caption]
我们再按照C语言的风格,用汇编语言写一下这个程序,注意和C语言相关语句的比对:汇编语言描述
[caption id="attachment_350" align="aligncenter" width="300"]
汇编语言描述[/caption]
我们可以看到,8086CPU提供的如[bx+si+idata]的寻址方式为结构化数据的处理提供了方便。
使得我们可以在编程的时候,从结构化的角度去看待所要处理的数据。
从上面我们可以看到,一个结构化的数据包含了多个数据项,而数据项的类型又不相同,有的是字型数据,有的是字节型数据,有的是数组(字符串)。
一般来说,我们可以用[bx+idata+si]的方式来访问结构体中的数据。
用bx定位整个结构体,用idata定位结构体中的某一个数据项,用 si 定位数组项中的每个元素 。为此,汇编语言提供了更为贴切的书写方式。
如:[bx].idata、[bx].idata[si]
在C语言程序中我们看到,如:dec.cp[i],dec是一个变量名,指明了结构体变量的地址,cp 是一个名称,指明了数据项cp的地址,而i用来定位cp中的每一个字符。
汇编语言中的做法是:bx.10h[si]
对比一下,是不是很相似?
[buy] 获得所有教学视频、课件、源代码等资源打包 [/buy]
[Downlink href='http://kuai.xunlei.com/d/LVSWMJYPYDAB']视频下载[/Downlink]
相关文章推荐
- 数据处理的两个基本问题03 - 零基础入门学习汇编语言40
- 数据处理的两个基本问题05 - 零基础入门学习汇编语言42
- 数据处理的两个基本问题05 - 零基础入门学习汇编语言42
- 数据处理的两个基本问题02 - 零基础入门学习汇编语言39
- 数据处理的两个基本问题02 - 零基础入门学习汇编语言39
- 数据处理的两个基本问题04 - 零基础入门学习汇编语言41
- 数据处理的两个基本问题04 - 零基础入门学习汇编语言41
- 数据处理的两个基本问题01 - 零基础入门学习汇编语言38
- 数据处理的两个基本问题01 - 零基础入门学习汇编语言38
- <学习笔记>王爽汇编语言__处理数据的两个基本问题
- 基础知识03 - 零基础入门学习汇编语言03
- 直接定址表03 - 零基础入门学习汇编语言74
- 第一个程序03 - 零基础入门学习汇编语言22
- 直接定址表03 - 零基础入门学习汇编语言74
- 更灵活的定位内存地址的方法03 - 零基础入门学习汇编语言34
- 第一个程序03 - 零基础入门学习汇编语言22
- 包含多个段的程序03 - 零基础入门学习汇编语言31
- 更灵活的定位内存地址的方法03 - 零基础入门学习汇编语言34
- int指令03 - 零基础入门学习汇编语言66
- 包含多个段的程序03 - 零基础入门学习汇编语言31