|
主题 : : 第八章实验7,用栈和循环结合写出的,请教高手有没有更好的方法 [待解决] |
回复[ 0次 ]
点击[ 442次 ] | |
荣誉值:12
信誉值:2
注册日期:2015-06-12 14:12 |
;编程将data段中数据按格式写入到table段中
;并计算21年中的人均收入(取整)
;结果按格式保存在table段中
assume cs:code,ds:data,ss:table,es:stack
data segment
db '1975','1976','1977','1978','1979','1980','1981'
db '1982','1983','1984','1985','1986','1987','1988'
db '1989','1990','1991','1992','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,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
dw 11542,14430,15257,17800
;以上是表示21年公司雇员人数的21个word型数据
data ends
table segment
db 21 dup ('year summ ne ?? ')
table ends
stack segment
dw 0
stack ends
code segment
start:
mov ax, data
mov ds, ax ;设置源数据起始地址
mov ax, table
mov ss, ax ;设置目的数据起始地址
mov bx,0 ;设置源数据偏移地址
mov bp,0 ;设置目的数据偏移地址
mov si,0
mov cx,21
s0:
mov ax,cx ;保存外循环次数
mov cx,2 ;设置内循环次数
s1:
push [bx][si]
pop [bp][si] ;复制年份数据
add si,2
loop s1
mov byte ptr 2[bp][si],' ' ;加空格到指定位置
add bx,4
add bp,16
mov cx,ax ;恢复外循环次数
mov si,0 ;恢复外循环字节偏移量
loop s0
mov bp,5
mov cx,21
s2:
push [bx]
pop [bp]
push 2[bx]
pop 2[bp] ;复制总收入数据
mov byte ptr 4[bp],' ' ;加空格到指定位置
mov ax,[bp]
mov dx,2[bp]
div word ptr 84[bx] ;计算人均收入
mov 8[bp],ax ;保存人均收入到指定位置
mov byte ptr 0ah[bp],' ' ;加空格到指定位置
add bx,4h
add bp,10h
loop s2
mov cx,21
mov bp,0ah
s3:
push [bx]
pop [bp] ;复制雇员数
mov byte ptr 2[bp],' ' ;加空格到指定位置
add bx,2
add bp,16
loop s3
mov ax, 4c00h
int 21h
code ends
end start | | |