课程设计1写得有点抓狂
assume cs:code,ds:data,ss:stackstack segment
dw 8 dup (0)
stack ends
data segment
db '1975','1976','1977','1978','1979','1980','1981';年份起始地址0
db '1982','1983','1984','1985','1986','1987','1988'
db '1989','1990','1991','1992','1993','1994','1995'
dd 16,22,382,1356,2390,8000,16000,24486,50065,97479;收入起始地址84
dd 140417,197514,345980,590827,803530,1183000
dd 1843000,2759000,3753000,4649000,5937000
dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258 ;人数起始地址168
dw 2793,4037,5635,8226,11542,14430,15257,17800
dw 21 dup (0) ;人均收入起始地址210
db 8 dup (0) ;空储存段起始地址252
data ends
code segment
start: mov ax,data ;将DS指向DATA段
mov ds,ax
mov bx,84 ;BX指向收入起始地址
mov si,168 ;SI指向人数起始地址
mov di,210 ;DI指向人均收入起始地址
mov ax,stack ;将SS指向STACK段
mov ss,ax
mov sp,16 ;将SS段设为空栈
mov cx,21 ;求21年的人均收入循环
s: push cx
mov ax,
mov dx,
mov cx,
div cx
mov ,ax
add bx,4
add si,2
add di,2
pop cx
loop s
mov bp,640 ;将ES指向显存区,BP起始为640
mov ax,0b800h
mov es,ax
mov cx,21 ;21次循环将21年的的数据放入显存区
mov bx,0 ;BX指向年份起始
mov di,168 ;DI指向人数起始
mov si,0 ;SI设为偏移量
s2: call show ;进入SHOW函数
mov ax,4c00h
int 21h
show: push cx ;将循环次数入栈
push bp ;将BP入栈
mov cx,4
s0: mov al, ; 四次循环把年份放入显存区
mov es:,al
inc si
add bp,2
loop s0
mov ax, ;把收入高16位低16位分别放入AX,DX中
mov dx,
mov si,0 ;SI置0
call divdw ;进入DIVDW求收入的每一位的ASCII码
mov ax, ;人数放入AX
mov dx,0 ;DX置0
mov si,0
call divdw ;求人数的每一位的ASCII码
mov ax, ;人均收入放入AX
mov dx,0 ;DX置0
mov si,0
call divdw ;求人数的每一位的ASCII码
pop bp ;BP指向下一行
add bp,160
add bx,4 ;BX指向下一年
add di,2 ;DI指向下一人数
pop cx ;取出循环次数判断
loop s2
divdw:mov cx,10000
div cx ;求出商为万位数后的数值,余数为千百十个位数
push ax ;将万位数后的数入栈
mov ax,dx ;千百十个位数放入AX
mov dx,0 ;DX置0
mov cx,4 ;CX为循环次数
call div1
pop ax ;取出万位后的数
mov dx,0 ;DX置0
mov cx,4 ;循环次数
call div1
s3:dec si ;SI指向最后的ASCII码
add bp,10 ;BP指向下一存放区
jmp short show1
div1: push cx ;循环次数入栈
mov cx,10 ;除数10
div cx ;求出商和余数
mov ,dl ;把余数放入空数据段
inc si ;SI+252指向下一空数据
mov dx,0 ;DX置0
pop cx ;取循环次数进行判断
loop div1
ret
show1: mov al,;把每一位数的ASCII码值放入显存区
add al,30h
mov es:,al
mov cx,si ;判断SI是否为零
jcxz ok
dec si ;SI+252指向上一数据
add bp,2 ;显存区单元加2
jmp short show1
ok: ret
code ends
end start
页:
[1]