实验7
assume cs:code,ds:data,es:table,ss:stackdata segment
;data
db '1975','1976','1977','1978','1979','1980','1982','1982','1983'
db '1984','1985','1986','1987','1988','1989','1990','1991','1992'
db '1993','1994','1995'
;21年的字符串
;data + 54H (84)
dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000
;21个年份公司的总收入
;data + A8H(168)
dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
dw 11542,14430,15257,17800
;21个年份的雇员数
data ends
stack segment
dw 16 dup(0)
stack 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 ;es指向table段地址
mov ax,stack
mov ss,ax
mov sp,16
mov bx,0 ;bx作为data段四字节数据的索引 (每次增加4)
mov si,0 ;si作为data段2字节数据的索引 (每次增加2)
mov bp,0 ;bp作为table段的索引 (table每次增加16)
mov cx,21
s:
;拷贝
;table中每年的数据相隔F个字节
;table中同一年数据头索引 year(0)-summ(5)-ne(A)-??(D)
; 长度(byte) 4 4 2 2
mov ax,ds: ;拷贝年份字符串 4 byte 每次2byte
mov es:,ax
mov ax,ds:
mov es:,ax
mov ax,ds: ;拷贝收入字符串 dd=4byte 每次2byte
mov es:,ax
mov ax,ds:
mov es:,ax
mov ax,ds:
mov es:,ax ;拷贝雇员字符串 dw=2byte
;除法计算会改变bx的值,先将bx入栈
push bx
;计算平均收入
;load收入(4字节)
mov ax,ds:
mov dx,ds:
;load人数(2字节)
mov bx,ds:
div bx
;bx出栈
pop bx
;保存计算结果(取整)(2字节)
mov es:,AX
add bx,4H
add si,2H
add bp,10H
loop s
mov ax,4c00H
int 21H
code ends
end start
验算了前三个结果没问题,后面的没具体看了 雪球丶 发表于 2020-3-16 18:17
验算了前三个结果没问题,后面的没具体看了
两个1982是因为data段的数据输错了{:5_96:}
页:
[1]