荣誉值:0
信誉值:0
注册日期:2011-01-15 22:31 |
assume cs:Code
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'
dd 16,22,382,1356,2390,8000,16000,24486,50065,97479
dd 140417,197514,345980,590827,803530,1183000,1843000
dd 2759000,3753000,4649000,5937000
dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037
dw 5635,8226,11542,14430,15257,17800
dw 0,0,0
data ends
stack segment
db 60 dup (0)
stack ends
code segment
start:mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,60
mov ax,0b800h
mov es,ax
mov bp,0
mov di,0
mov si,0
mov bx,0
mov cx,21
s1:
push cx
mov cx,4
s21:mov ax,ds:[di]
mov es:[bp],al
mov ax,10
mov es:[bp+1],al
inc di
add bp,2
loop s21
push di
sub bp,8
mov ax,ds:[si+54h]
mov dx,ds:[si+56h]
mov cx,10
mov di,20h
call divdw
mov ax,ds:[bx+0a8h]
mov dx,0
mov cx,10
mov di,40h
call divdw
mov ax,ds:[si+54h]
mov dx,ds:[si+56h]
mov cx,ds:[bx+0a8h]
push bx
call divdw1
pop bx
mov cx,10
mov di,60h
call divdw
add si,4
add bx,2
add bp,160
pop di
pop cx
loop s1
divdw1:push ax
mov ax,dx
mov dx,0
div cx
mov bx,ax
pop ax
div cx
mov dx,bx
ret
divdw:push bx
push si
mov si,di
mov di,0
dw1:push ax
mov ax,dx
mov dx,0
div cx
mov bx,ax
pop ax
div cx
push dx
mov dx,bx
inc di
mov bx,cx
mov cx,ax
jcxz jf
mov cx,bx
jmp short dw1
jf:mov cx,di
mov di,si
jf1:pop ax
add al,30h
mov es:[bp+di],al
mov al,10
mov es:[bp+di+1],al
add di,2
loop jf1
pop si
pop bx
ret
code ends
end start
===================================================
assume cs:Code
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'
dd 16,22,382,1356,2390,8000,16000,24486,50065,97479
dd 140417,197514,345980,590827,803530,1183000,1843000
dd 2759000,3753000,4649000,5937000
dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037
dw 5635,8226,11542,14430,15257,17800
dw 0,0,0
data ends
stack segment
db 60 dup (0)
stack ends
code segment
start:mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,60
mov ax,0b800h
mov es,ax
mov bp,0
mov di,0
mov si,0
mov bx,0
mov cx,21
s1:=== 开始循环年份
push cx 先将外层循环入栈
mov cx,4
s21:mov ax,ds:[di]
mov es:[bp],al
mov ax,10//高亮绿色
mov es:[bp+1],al
inc di
add bp,2
loop s21
push di //将 DI 入栈 为了下次DW数据用到
sub bp,8=== 做完内循环 将 BP-8 恢复BP的值 循环4次 就是2^4次方 BP=8
mov ax,ds:[si+54h]==设置 DATA第二个数据
mov dx,ds:[si+56h]
mov cx,10
mov di,20h
mov ds:[0d8h],di //将DI数据保存,DI为临时数据
mov di,0
call divdw //跳转到DIVDW取ASCII码
mov ax,ds:[bx+0a8h]]==设置 DATA第三个数据
mov dx,0
mov cx,10
mov di,40h
mov ds:[0d8h],di //将DI数据保存,DI为临时数据
mov di,0
call divdw //跳转到DIVDW取ASCII码
mov ax,ds:[si+54h] //设置 DATA第四个数据,取平均工资
mov dx,ds:[si+56h]
mov cx,ds:[bx+0a8h]
call divdw1 // 跳转到DIVDW取平均工资
mov cx,10 //取完平均工资,做ASCII码
mov di,60h
mov ds:[0d8h],di //将DI数据保存,DI为临时数据
mov di,0
call divdw
add si,4
add bx,2
add bp,160
pop di 出栈到DI 做下次内层循环
pop cx //外循环出栈
loop s1
divdw1:push ax //用于取平均工资
mov ax,dx
mov dx,0
div cx
mov ds:[0d2h],ax
pop ax
div cx
mov dx,ds:[0d2h]
ret
divdw:push ax
mov ax,dx
mov dx,0
div cx
mov ds:[0d2h],ax
pop ax
div cx
push dx
mov dx,ds:[0d2h]
inc di //这里的DI 是作为ASCII码传送到显存的循环次数
mov ds:[0d4h],cx //将除数保存
mov cx,ax //检测CX是否为0,为0跳转到JF做ASCII码不为0继续循环
jcxz jf
mov cx,ds:[0d4h]
jmp short divdw
jf:mov cx,di //将循环次数赋予CX
mov di,ds:[0d8h] 恢复DI的值
jf1:pop ax
add al,30h
mov es:[bp+di],al
mov al,10//高亮绿色
mov es:[bp+di+1],al
add di,2
loop jf1
ret
code ends
end start
=============================
汇编QQ群:
25617704
共同努力,哦耶
============================= | | |