[Hb-VII] 寻址方式在结构化数据访问中的应用

《汇编语言·第三版》--王爽


1 题目

Power idea公司从1975年成立到1995年的基本情况如下。

[Hb-VII] 寻址方式在结构化数据访问中的应用_第1张图片

Figure1. Power idea基本情况

下面的程序中,已经定义好了这些数据:

assume    cs:codesg

 

data segment

         db     '1975','1976','1977','1978','1979','1980','1981','1982','1983'

         db     '1984','1985','1986','1987','1988','1989','1990','1991','1992'

         db     '1993','1994','1995'

         ;以上是表示21年的21个字符串

        

         dd     16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514

         dd     345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000

         ;以上是表示21年公司总收入的21个dword型数据

        

         dw    3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226

         dw    11542,14430,15275,17800

         ;以上是表示21年雇员人数的21个word型数据

data ends

 

table         segment

         db     21 dup      ('year sumn ne ?? ')

table         ends

编程,将data段中的数据按如下格式写入到table段中,并计算21年中的人均收入(取整),结果也按照下面的格式保存在table段中。

[Hb-VII] 寻址方式在结构化数据访问中的应用_第2张图片

Figure2. table表数据格式

提示,可将data段中的数据看成是多个数组,而将table中的数据看出是一个结构型数据的数组,每个结构型数据中包含多个数据项。可用bx定位每个结构型数据,用idata定位数据项,用si定位数组项中的每个元素,对于table中的数据的访问可采用[bx].idata和[bx].idata[si]的寻址方式。


2 代码

1.        assume    cs:codesg

2.         

3.        data segment

4.                 db     '1975','1976','1977','1978','1979','1980','1981','1982','1983'

5.                 db     '1984','1985','1986','1987','1988','1989','1990','1991','1992'

6.                 db     '1993','1994','1995'

7.                 ;以上是表示21年的21个字符串

8.                

9.                 dd     16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514

10.             dd     345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000

11.             ;以上是表示21年公司总收入的21个dword型数据

12.            

13.             dw    3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226

14.             dw    11542,14430,15275,17800

15.             ;以上是表示21年雇员人数的21个word型数据

16.    data ends

17.     

18.    table         segment

19.             db     21 dup      ('year sumn ne ?? ')

20.    table         ends

21.     

22.     

23.    codesg     segment

24.    start:

25.             mov ax, data

26.             mov ds, ax                          ;得到data段段地址

27.             mov bx, 0

28.             mov si, 0                    ;用作data段中dd数据类型的偏移

29.             mov di, 0                    ;用作data段中dw数据类型的偏移

30.            

31.             mov ax, table

32.             mov ss, ax                           ;得到table段段地址

33.             mov bp, 0

34.            

35.            

36.             mov cx, 21                          ;循环次数

37.    s:     

38.             mov ax, [bx + si]

39.             mov [bp], ax                       ;拷贝data中的年份的低字到table中        

40.             mov ax, 2[bx  + si]         

41.             mov 2[bp], ax            ;拷贝data中的年份的高字到table中

42.            

43.             mov ax, 84[bx + si]

44.             mov 5[bp], ax            ;拷贝data中的年收入的低字到table中

45.             mov ax, 86[bx + si]

46.             mov 7[bp], ax            ;拷贝data中的年收入的高字到table中

47.                      

48.             mov ax, 168[bx + di]                 

49.             mov 10[bp], ax                   ;将data中的雇员数拷贝到table中

50.            

51.             mov dx, 86[bx + si]            ;年收入的高子存入dx

52.             mov ax, 84[bx + si]

53.             div    word ptr  ss:[bp + 10]    ;雇员人均收入,商将保存在ax中

54.            

55.             mov 13[bp],     ax              ;将商(取整)保存在bp[13]字中

56.            

57.             add  bp, 16                          ;table下一行

58.             add  si, 4                    ;下一年,下一收入

59.             add  di, 2                    ;下年雇员

60.             loop s

61.            

62.             mov ax, 4c00h

63.             int    21h

64.    codesg     ends

65.    end  start

(1) 两个隐含段地址的两个内存单元不能直接进行数据拷贝,需要中间寄存器如ax作为中介。

(2) div后面的内存地址必须要指明段:div word ptr  ss:[bp + 10]。


3 调试

(1) 数据段段地址

[Hb-VII] 寻址方式在结构化数据访问中的应用_第3张图片
Figure3. 数据段地址

table数据段的段地址为0778,data数据段的段地址为076a。


(2) table段原始数据

[Hb-VII] 寻址方式在结构化数据访问中的应用_第4张图片
Figure4. table段原始数据

(3) data段数据分布

[Hb-VII] 寻址方式在结构化数据访问中的应用_第5张图片
Figure5. data段数据分布

data段中的数据的内存紧挨着。


(4) 程序执行后table段中的数据

[Hb-VII] 寻址方式在结构化数据访问中的应用_第6张图片
Figure6. table数据段内容
途中标红的两处表明从data段读取数据到table段正确,20h为空格。

[2014.11.27 - 17:56]
R《Hb》Note Over.

你可能感兴趣的:(碚大)