王爽汇编 实验7 寻址方式在结构化数据访问中的应用
Power idea 公司从1975年成立一直到1995年的基本情况如下。
下面的程序中,已经定义好了这些数据:
1 assume cs:code,ds:data,ss:stack 2 3 data segment 4 5 db '1975','1976','1977','1978','1979','1980','1981','1982','1983' 6 db '1984','1985','1986','1987','1988','1989','1990','1991','1992' 7 db '1993','1994','1995' 8 ;以上是表示21年的21个字符串 year 9 10 11 dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514 12 dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000 13 ;以上是表示21年公司总收入的21个dword数据 sum 14 15 dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226 16 dw 11542,14430,15257,17800 17 18 data ends 19 20 table segment 21 ;0123456789ABCDEF 22 db 21 dup ('year summ ne ?? ') 23 table ends 24 25 stack segment stack 26 db 128 dup (0) 27 stack ends 28 29 30 31 code segment 32 33 start: mov ax,stack 34 mov ss,ax 35 mov sp,128 36 37 38 39 mov ax,4C00H 40 int 21H 41 42 43 44 code ends 45 46 47 48 end start
下面是我写这个实验的答案
1 assume cs:code,ds:data,ss:stack 2 3 data segment 4 5 db '1975','1976','1977','1978','1979','1980','1981','1982','1983' 6 db '1984','1985','1986','1987','1988','1989','1990','1991','1992' 7 db '1993','1994','1995' 8 ;以上是表示21年的21个字符串 year 9 10 11 dd 0016,0022,0382,1356,2390,8000,16000,24486,50065,97479,140417,197514 12 dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000 13 ;以上是表示21年公司总收入的21个dword数据 sum 14 15 dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226 16 dw 11542,14430,15257,17800 ;雇员数 17 18 data ends 19 20 table segment 21 ;0123456789ABCDEF 22 db 21 dup ('year summ ne ?? ') 23 table ends 24 25 stack segment stack 26 db 128 dup (0) 27 stack ends 28 29 30 31 code segment 32 33 start: 34 mov ss,ax 35 mov sp,128 36 37 mov ax,data 38 mov ds,ax 39 40 mov ax,table 41 mov es,ax 42 43 mov si,0 ;年 44 mov di,84 ;年收入 45 mov bx,168 ;雇员 46 mov bp,0 47 48 ;循环21次 49 mov cx,21 50 51 ;设置年 52 inputTable: push ds:[si] 53 pop es:[bp] 54 push ds:[si+2] 55 pop es:[bp+2] 56 57 ;除数问题 58 mov ax,ds:[di] ;低地址 59 mov dx,ds:[di+2] ;高地址 60 61 ;收入问题 62 mov es:[bp + 5],ax 63 mov es:[bp + 7],dx 64 65 ;雇员数 66 push ds:[bx] 67 pop es:[bp + 0AH] 68 69 ;0123456789ABCDEF 70 ;('year summ ne ?? ') 71 ;人均收入 72 ;人均收入是用除法,可以用二种方式 73 ;一种是内存方式 一种是寄存器的方式,由于寄存器占用太多,所以用内存的方式 74 div word ptr ds:[bx] 75 mov es:[bp + 0DH],ax 76 77 add si,4 78 add di,4 79 add bx,2 80 add bp,16 81 loop inputTable 82 83 84 85 86 mov ax,4C00H 87 int 21H 88 89 90 91 code ends 92 93 94 95 end start
运行效果:
通过这个实验,我的收获是:
1、当时在学校学数据结构这门课的时候,我只知道栈有一个先进先出这个特殊的性质,完成这个实验我发现栈还有一个重要性质 就是可以帮我们临时保留一些性质
2、汇编这门课最重要是我们可以直接操作内存,根据这道题题目,我们只要知道数据从哪里来的,数据又要从哪里去,按这条线去想,稍微花一点心思是可以想出来了的。