|
|
assume cs:codesg, ds:datasg, es:tablesg
datasg segment
db '1975', '1976', '1977', '1978', '1979', '1980', '1981', '1982' ;;21年字符串,共计84个字节
db '1983', '1984', '1985', '1986', '1987', '1988', '1989', '1990' ;;十六进制地址:00H~53H 十进制地址:00~83
db '1991', '1992', '1993', '1994', '1995'
dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514 ;;以下为21年每年的总收入,共计84个字节
dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000 ;;十六进制地址:54H~a7H 十进制地址:84~167
dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226 ;;以下表示21年每年雇员人数,共计42个字节
dw 11542,14430,15257,17800 ;;十六进制地址:a8H~d2H 十进制地址:168~210
datasg ends
tablesg segment
db 21 dup ('year summ ne ?? ') ;;表格初始数值
tablesg ends
codesg segment
start:
mov ax,datasg ;;分配ds数据、es表格段地址
mov ds,ax
mov ax,tablesg
mov es,ax
mov ax,0 ;;清空相关寄存器
mov bx,0 ;;ax,bx,dx 用于中转、计算数据
mov dx,0
mov di,0 ;;di指向源数据地址,年份、收入
mov si,0 ;;si指向源、流数据地址,雇员数、表格年份、表格收入、表格雇员、表格人均地址
mov bp,0 ;;bp指向流表格行地址
mov cx,21
Count_copy_s:
mov ax,ds:[di] ;;年份低位复制
mov es:[bp],ax
mov ax,ds:[di+2] ;;年份高位复制
mov es:[bp+2],ax
mov ax,ds:[di+54H] ;;收入低位ax暂存并复制
mov es:[bp+5],ax
mov dx,ds:[di+56H] ;;收入高位dx暂存并复制
mov es:[bp+7],dx
mov bx,ds:[si+0a8H] ;;雇员人数bx暂存并复制
mov es:[bp+0ah],bx
div bx ;;16位除法运算,商存放在ax,余数存放在dx
mov es:[bp+0dh],ax ;;运算结果ax商复制到表格地址
add di,4 ;;指向下个双字型数据地址
add si,2 ;;指向下个字型数据地址
add bp,10H ;;指向表格下行地址
loop Count_copy_s
mov ax,4c00H
int 21H
codesg ends
end start
debug cx=0288 怎样算的??? |
|