王爽-組合語言第三版實驗7
阿新 • • 發佈:2019-02-17
;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
;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