王爽汇编实验7(二)

实验七 寻址方式在结构化访问中的应用(两个程序) 

程序一:四个循环

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


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 11452,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 ss,ax 


         mov bx,0        // data 基地址

         mov si,0        // 定位每个元素      idata定位数据项

         mov bp,0      // table 基地址


         mov cx,21 

s0:     mov ax,[bx+si]                //年份

	     mov [bp+0],ax 


	     add si,2 


	     mov ax,[bx+si] 

	     mov [bp+2],ax 


	     add si,2 


	     add bp,10h 

	     loop s0 

	 
	     mov cx,21 

	     mov bp,0 

	     mov si,0 

s1:     mov ax,[bx+si+84]           //总收入

	     mov [bp+5],ax 

	     add si,2 

	     mov ax,[bx+si+84] 

	     mov [bp+7],ax 

	     add si,2 

	     add bp,10h 

	     loop s1 

	 
	     mov cx,21 

	     mov bp,0 

	     mov si,0 

s2:     mov ax,[bx+si+168]         //雇员数

	     mov [bp+10],ax 

	     add si,2 

	     add bp,10h 

	     loop s2 

	 
	     mov cx,21 

	     mov bp,0 

s3:     mov ax,[bp+5]          //人均收入

	     mov dx,[bp+7] 

	     div word ptr [bp+10] 

	     mov [bp+13],ax 

	     add bp,10h 

	     loop s3 

 
	     mov ax,4c00h

	     int 21h
  
codesg ends

end start

----------------------------------华丽的分割线---------------------------------

程序二:一个循环

assume cs:code,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 11452,14430,15257,17800

data ends

table segment

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

table ends

code segment 

start:  mov ax,data 

         mov ds,ax 
		 

         mov ax,table 

         mov es,ax 
		 

         mov bx,0 

         mov si,0 

         mov di,0 
		 

         mov cx,21 

s:       mov ax,[bx]

         mov es:[si],ax

         mov ax,[bx].2

         mov es:[si].2,ax

 
         mov ax,[bx].84

         mov es:[si].5,ax
 
         mov dx,[bx].86

         mov es:[si].7,dx

 
         div word ptr ds:[di].168
 
         mov es:[si].13,ax

        
         mov ax,[di].168

         mov es:[si].10,ax

 
         add di,2

         add bx,4

         add si,16

         loop s 

 
         mov ax,4c00h 

         int 21h 

code ends 

end start
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值