1. 程式人生 > >王爽-組合語言第三版實驗7

王爽-組合語言第三版實驗7

;1. 資料組織 data 中資料當成陣列,table中資料當成結構體。
;2. data 用si來定址, table 用 bx , di, idata來定址


assume cs:codesg , ss:stacksg


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個字串
   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型資料
   dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
   dw 11542,11430,15257,17800
   ; 以上是表示21年公司僱員人數的21個word型資料
data ends


table segment
   db 21 dup ('year summ ne ?? ')
table ends


stacksg segment
dw 8 dup(0)
stacksg ends


codesg segment
start:
mov ax, data
mov ds, ax ;init datasegment

mov ax, table
mov es, ax ;store result

mov ax, stacksg
mov ss, ax ;init stack
mov sp, 16



mov si, 0 ; for data index
mov bx, 0 ; for table line
mov bp, 0 ; for table.ne index
mov cx, 21 ; loop 21 times
c1: push cx ; store cx
mov di, 0 ; for table row
mov cx, 4 ; loop 4 times for year
c2:mov al, [si]
mov es:[bx][di], al
inc si
inc di
loop c2 ; cp year

mov di, 0
mov cx, 4
c3:mov al, 80[si]; sume start at [84],si== 4,80 = 84-4
mov es:[bx].5[di], al
inc si
inc di
loop c3 ; cp sume

mov di, 0
mov cx, 2
c4: mov al, ds:168[bp]; ne start at 168
mov es:[bx].10[di], al
inc di
inc bp
loop c4 ; cp ne

mov ax, es:[bx].5
mov dx, es:[bx].7
div word ptr es:[bx].10
mov es:[bx].13, ax; 計算人均收入

pop cx ; restore cx
add bx, 10H ; bx->next line
sub si, 4 ; adjust si to --->next year
loop c1

mov ax, 4c00H
int 21H
codesg ends


end start