美文网首页
实验7:寻址方式在结构化数据访问中的应用

实验7:寻址方式在结构化数据访问中的应用

作者: Top_Assassin | 来源:发表于2018-07-19 15:43 被阅读0次

分析:

根据题目要求,要进行的操作只有两种:

第一:进行一个除法操作,用到div指令。

第二:对数据重排,即要求把按项目格式排列的数据转换成按表格格式排列。实际上只要进行一次循环操作即可,循环体内进行表格中一行数据的操作。通过循环21次实现。具体代码如下:

assume cs:codesg,ds:data,es:table

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'

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

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

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

  dw 11542,14430,15257,17800

data ends

table segment

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

table ends

codesg segment

start:

      mov ax,data

      mov ds,ax

      mov ax,table

      mov es,ax

;以上是将data存放到ds寄存器,将要覆盖的table地址存放到es寄存器.

      sub si,si

      sub di,di

      sub bx,bx

      mov cx,21

;21轮循环.

traverse:

    mov ax,[si]

    mov es:[di],ax

    mov ax,[si+2]

    mov es:[di+2],ax

    mov byte ptr es:[di+4],20h

;以上是对年份数据的copy,要注意的是它是字符型的,所以每个数据是4字节。。。

    mov ax,[si+84]

    mov es:[di+5],ax

    mov ax,[si+86]

    mov es:[di+7],ax

    mov byte ptr es:[di+9],20h

;以上是对总收入的copy,dd定义的每个值占有4字节。

    sub si,bx

    mov ax,[si+168]

    mov es:[di+10],ax

    add si,bx

    mov byte ptr es:[di+12],20h

;以上是对人数的copy,注意用dw定义的数据是2字节的,所以需要bx寄存器来保存偏移值,每移动一次,偏移量+2.

    mov ax,[si+84]

    mov dx,[si+86]

    div word ptr es:[di+10]

    mov es:[di+13],ax

;以上是执行总收入÷总人数的运算,注意是按word(16位)除的,ax存放低字节,dx存放高字节.

;注意!!!:CPU一般是小端模式(little endian)存储,即第一字节是低字节.

;div操作中,ax存放商,dx存放余数.如果除数为 8 位, 则 al 存储除法操作的商, ah 存储除法操作的余数; 如果除数为 16 位, 则 ax 存储除法操作的商, dx 存储除法操作的余数

    add si,4

    add di,16

    add bx,2

    loop traverse

    mov ax,4c00h

    int 21

;程序返回.

codesg ends

end start

从这个实验中,更熟悉掌握了cpu寻址的方式,自己要再多消化,谢谢。

相关文章

网友评论

      本文标题:实验7:寻址方式在结构化数据访问中的应用

      本文链接:https://www.haomeiwen.com/subject/tbutmftx.html