|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 adong 于 2017-2-19 20:48 编辑
已经确实没有办法了,大神麻烦帮忙调试下吧,万分感谢,代码如下
assume cs:codesg,ds:data,ss:stack
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' ;年份
dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000 ;收入
dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
dw 11452,14430,15257,17800 ;雇员
data ends
table segment
db 16 dup (0)
table ends
stack segment
db 32 dup(0)
stack ends
codesg segment
; 思路:年份直接写入数据段
; 收入和雇员转化ASCII后入栈,然后写入数据段
; 人均收入用无溢出除法后转化ASCII后,入栈写入数据段
; 最后把数据段内容写入显示器
; 然后上述步骤重复21次
start: mov ax,data
mov ds,ax
mov ax,table
mov es,ax ;es只能用在外循环,子程序要用es需要入栈
mov ax,stack
mov ss,ax
mov sp,32
mov cx,21 ;外循环次数
mov dh,0 ;每次循环的行数
mov bx,0 ;bx表示每次循环的每个年份或收入 ,每次大循坏开始要加4
mov si,0 ;表示人员
first_loop:
push cx ;每次大循坏开始要减1
push dx
mov ax,[bx]
mov es:[bx],ax
mov ax,[bx+2]
mov es:[bx+2],ax
; dx 做为每次循环的参数 ,子程序要入栈,每次循环dh加1
;显示数据
pop dx
mov dl,0
mov cl,2
call show_str
;收入和雇员转化ASCII后入栈,然后写入数据段
; 需要个ASCII转化子程序dtoc
;收入数和年份一样的字节数,可以和年份一样用bx定列地址
;显示收入
push dx
mov ax,[bx+84] ;低位字节
mov dx,[bx+86] ;高位字节
call dtoc
pop dx
mov dl,20
mov cl,2
call show_str
;显示雇员
push dx
mov ax,[si+168] ;低位字节
mov dx,0 ;高位字节
call dtoc
pop dx
mov dl,40
mov cl,2
call show_str
;计算平均数并显示
push dx
mov ax,[bx+84] ;低位字节
mov dx,[bx+86] ;高位字节
mov cx,[si+168]
call divdw
call dtoc
pop dx
mov dl,60
mov cl,2
call show_str
add bx,4
add si,2
inc bh
pop cx
loop first_loop
mov ax,4c00h
int 21h
dtoc: ;用cx存储商,做判断,余数存在data段
push si
push ds
push bx
mov bx,table
mov ds,bx
mov si,0
mov cx,10
s1:
jcxz ok1
mov cx,10
call divdw
add cx,30h
push cx
mov cx,ax
inc si
jmp s1
ok1: mov cx,si
mov si,0
ok2: pop bx
mov [si],bx
inc si
loop ok2
pop bx
pop ds
pop si
ret
divdw: push bx ;无溢出除法后dx为最高位,ax为低位,cx为余数
push ax
mov ax,dx
mov dx,0
div cx
mov bx,ax
pop ax
div cx
mov cx,dx
mov dx,bx
pop bx
ret
show_str: ;显示table段数据 dh行 dl列 cl 颜色
push ax
push bx
push si
push es
push di
push ds
mov ax,0b800h
mov es,ax
mov ax,table
mov ds,ax
mov ax,160
mul dh
mov si,ax ;行偏移地址
mov ax,2
mul dl
mov bx,ax ;行列地址
mov al,cl
mov di,0
mov ch,0
s: mov cl,[di]
jcxz ok
mov es:[bx+si],cl
mov es:[bx+si+1],al
inc di
add bx,2
jmp s
ok:
pop ds
pop di
pop es
pop si
pop bx
pop ax
ret
codesg ends
end start
|
-
最后的实现的图形
|