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

自学汇编,讨论学习,不对之处请指出共同学习,不喜勿喷

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'
 
   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
          mov si,0
          mov di,0
          mov bx,0
          mov cx,21
      s0: push cx
          mov si,0
          mov cx,4
       s: mov al,[di]
          mov es:[si+bx],al
          mov al,[di+84]
          mov es:[si+bx+5],al
          inc si
          inc di
          loop s
          pop cx
          add bx,16
        loop s0


          mov si,0
          mov bx,0
          mov cx,21      
     s10: push cx
          mov si,0
          mov cx,2
      s1:
          mov al,[di+84]
          mov es:[si+bx+10],al
          inc si
          inc di
          loop s1
          pop cx
          add bx,16
        loop s10


          mov cx,21
          mov bx,0      
     s11: mov ax,es:[bx+5]
          mov dx,es:[bx+7]
          div word ptr es:[bx+10]
          mov es:[bx+13],ax
          add bx,16
        loop s11
    mov ax,4c00h
    int 21h
    codesg ends
end start

    start:mov ax,data
          mov ds,ax               ;定义数据段
          mov ax,table
          mov es,ax              ;定义table段
          mov si,0
          mov di,0
          mov bx,0
          mov cx,21          ;行数的循环
      s0: push cx          ;完成年份和收入的写入过程
          mov si,0
          mov cx,4               ;四个字节一次一个,循环四次

                                         ;蓝色部分为年份和收入的第一行循环                  
      s: mov al,[di]             ;年份的写入
          mov es:[si+bx],al 
          mov al,[di+54h]     ;收入的写入
          mov es:[si+bx+5],al
          inc si
          inc di
          loop s

          pop cx
          add bx,16
        loop s0

          mov si,0
          mov bx,0
          mov cx,21        ; 雇员数的写入
     s10: push cx
            mov si,0
            mov cx,2       ;总共两个字节,写入两次
      s1:
          mov al,[di+84] ;由于上面的di没有清零,直接到雇员人数的位置
          mov es:[si+bx+10],al
          inc si
          inc di
          loop s1
          pop cx
          add bx,16
        loop s10

由于上面的程序已经将雇员人数和收入已经写入到es的位置,所以直接操作es中的数据完成人均数的操作

          mov cx,21
          mov bx,0      
  s11: mov ax,es:[bx+5]  ; 被除数的输入
          mov dx,es:[bx+7]
          div word ptr es:[bx+10]    ;除法操作,商输入ax中 
          mov es:[bx+13],ax
          add bx,16

最终的输出结果如下图

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值