王爽版汇编语言实验7 寻址方式在结构化数据访问中的应用

实验在P172

代码如下

assume cs:codesg,ds:data

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个字符串,都是连续存放的每一个字符占一个字节,共占据84个字节

 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型数据,每个数据占据4个字节,共占据84个字节

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

 dw 11543,14430,15257,17800

 ;以上是表示21年公司雇员人数的21个word型数据,每个数据占据2个字节,共占据42个字节

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

 table segment

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

 table ends    

 codesg segment

 start:

       mov ax,data

       mov ds,ax;ds为data段的段地址

       mov ax,table

       mov es,ax;es为table段的段地址

       mov bx,0

       mov di,0

       mov cx,21

       s0:mov dx,cx

          mov cx,4

          s:

            mov al,ds:[bx]

            mov es:[di],al

            mov ah,ds:84[bx]

            mov es:5[di],ah;di+5的位置写入收入,数据在bx+84中

            inc di

            inc bx

            loop s

         mov cx,dx

         sub di,4

         add di,10h;这两行相当于换行

         loop s0;以上代码写入了4字节数据的所有录入,接下来写两个2字节的

     

      mov bx,168

      mov di,0ah

      mov cx,21

      mov si,4;si用于写入空格

       s1:

          mov al,ds:[bx]

          mov es:[di],al

          mov ah,ds:1[bx]

          mov es:1[di],ah

          mov byte ptr es:3[di],3fh

          mov byte ptr es:4[di],0;写入问号,问号的ascii码为3f。高位补0

          mov byte ptr es:[si],20h

          mov byte ptr es:5[si],20h

          mov byte ptr es:8[si],20h

          mov byte ptr es:11[si],20h;空格写入完成

          add si,10h

          add di,10h

          add bx,2

          loop s1

   

    mov ax,4c00h

    int 21h

    codesg ends

    end start

这个调试中有很多问题。现在还存在一些冗余,但可以运行,可读性也很好,画个图一目了然

一定要注意不能用mov 寄存器简介寻址,寄存器间接寻址 的方式传递数据

在数据传输时一定要人为规定它的数据长度,要么通过寄存器名指定长度,要么用操作符 X ptr 指明

这是执行后的table 段中的数据格式,20为空格的ASCII码,?的码是3f

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值