课程设计1
入门级的,方法比较笨,大家多指点。assume cs:code,ds:data
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'
;data:54h
dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000
;data:0a8h
dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
dw 11542,14430,15257,17800
data ends
code segment
start:
call nf
call sr
call gy
call rjsr
mov ax,4c00h
int 21h
nf:
push ax
push ds
push es
push bx
push si
push cx
mov ax,data
mov ds,ax
mov ax,0b800h
mov es,ax
mov bx,0
mov si,0
mov cx,21
nf1:
push cx
mov cx,4
nf0:
mov al,
mov es:,al
mov byte ptr es:,2
inc bx
add si,2
loop nf0
add si,98h
pop cx
loop nf1
pop cx
pop si
pop bx
pop es
pop ds
pop ax
ret
sr:
push ax
push bx
push cx
push dx
push ds
push es
push si
push di
push bp
mov ax,data
mov ds,ax
mov ax,0b800h
mov es,ax
mov bx,0h
mov si,54h
mov di,20h
mov bp,0
mov cx,21
sr4:
push cx
push di
mov dx,
mov ax,
sr1:
mov cx,10
call divdw
add cx,30h
push cx
inc bp
mov cx,ax
jcxz sr0
jmp short sr1
sr0:
mov cx,dx
jcxz sr2
jmp short sr1
sr2:
mov cx,bp
sr3:
pop
inc bx
loop sr3
mov bx,0
mov ch,0
sr6:
mov cl,
jcxz sr5
mov es:,cl
mov byte ptr es:,2
inc bx
add di,2
jmp short sr6
sr5:
add si,4
pop di
add di,0a0h
mov bx,0
mov bp,0
pop cx
loop sr4
pop bp
pop di
pop si
pop es
pop ds
pop dx
pop cx
pop bx
pop ax
ret
divdw:
;功能:进行不会产生溢出的除法运算,被除数为dword型,除数为word型,结果为dword型。
;参数:(ax)=dword型数据的低16位,(dx)=dword型数据的高16位,(cx)=除数。
;返回:(dx)=结果的高16位,(ax)=结果的低16位,(cx)=余数。
push bx
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
gy:
push ax
push bx
push cx
push dx
push ds
push es
push si
push di
push bp
mov ax,data
mov ds,ax
mov ax,0b800h
mov es,ax
mov bx,0
mov si,0a8h
mov di,40h
mov bp,0
mov cx,21
gy1:
push cx
push di
mov ax,
mov dx,0
gy0:
mov cx,10
call divdw
add cx,30h
push cx
inc bp
mov cx,ax
jcxz gy3
jmp short gy0
gy3:
mov cx,dx
jcxz gy2
jmp short gy0
gy2:
mov cx,bp
gy4:
pop
inc bx
loop gy4
mov bx,0
mov ch,0
gy6:
mov cl,
jcxz gy5
mov es:,cl
mov byte ptr es:,2
inc bx
add di,2
jmp short gy6
gy5:
add si,2
pop di
add di,0a0h
mov bx,0
mov bp,0
pop cx
loop gy1
pop bp
pop di
pop si
pop es
pop ds
pop dx
pop cx
pop bx
pop ax
ret
rjsr:
push ax
push bx
push cx
push dx
push ds
push es
push si
push di
push bp
mov ax,data
mov ds,ax
mov ax,0b800h
mov es,ax
mov bx,0
mov si,54h
mov di,0a8h
mov cx,21
rjsr1:
push cx
mov ax,
mov dx,
mov cx,
call divdw
mov ,ax
mov ,dx
add si,4
add di,2
add bx,4
pop cx
loop rjsr1
mov bx,0
mov si,0
mov di,60h
mov bp,0
mov cx,21
rjsr7:
push cx
push di
mov ax,
mov dx,
rjsr0:
mov cx,10
call divdw
add cx,30h
push cx
inc bp
mov cx,ax
jcxz rjsr3
jmp short rjsr0
rjsr3:
mov cx,dx
jcxz rjsr2
jmp short rjsr0
rjsr2:
mov cx,bp
rjsr4:
pop
inc bx
loop rjsr4
mov bx,0
mov ch,0
rjsr6:
mov cl,
jcxz rjsr5
mov es:,cl
mov byte ptr es:,2
inc bx
add di,2
jmp short rjsr6
rjsr5:
add si,4
pop di
add di,0a0h
mov bx,0
mov bp,0
pop cx
loop rjsr7
pop bp
pop di
pop si
pop es
pop ds
pop dx
pop cx
pop bx
pop ax
ret
code ends
end start 给个建议
每一段与段之间 增加空格行数
至少在每一段开始或者结束的地方添加一句注释 好长的代码 很长啊,鱼哥,有没有短点的 本帖最后由 天长地久 于 2012-8-2 13:12 编辑
我的代码是直接在试验7的代码基础上添加的!还可以再优化一下!
assume cs:code,ss:stack
data segment
db '1975','1976','1977','1978','1979','1980','1981','1982','1983'
db '1986','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 11542,14430,15257,17800
data ends
table segment
db 21 dup ('year summ ne ?? ')
table ends
stack segment para stack'zjsf'
dw 16 dup (0)
stack ends
code segment
start: mov ax,data
mov ds,ax
mov bx,0
mov ax,table
mov es,ax
mov bp,0
mov si,0
mov di,0
mov cx,21
s: mov ax,
mov es:,ax
mov ax,2
mov word ptr es:2,ax
mov ax,84
mov word ptr es:5,ax
mov ax,86
mov word ptr es:7,ax
mov ax,168
mov word ptr es:10,ax
mov ax,84
add si,2
mov dx,84
div word ptr 168
mov word ptr es:13,ax
add bx,4
mov si,0
add di,2
add bp,16
loop s
mov ax,table ;这里开始课程设计一
mov ds,ax
mov di,0
mov ax,stack
mov ss,ax
mov sp,32
mov ax,0b800h
mov es,ax
mov bx,320
mov si,58
mov cx,21
ss0: mov bp,0
call dyl1 ;第一子程序
add si,30 ;列数增加30位
add di,5 ;数据列增加5位
call dyl2 ;第二子程序
add si,30 ;列数增加30位
add di,5 ;数据列增加5位
call dyl3 ;第三子程序,使用的是第二子程序的代码!比第二子程序少用一行代码!
add si,30 ;列数增加30位
add di,3 ;数据列增加3位
call dyl3 ;第四子程序,使用的是第三子程序的代码!
add bx,160
mov si,58
add di,3
loop ss0
mov ax,4c00h
int 21h
dyl1:push bx ;显存写入的起始行数
push si ;显存写入的起始列数
push di ;被读取数据的起始位置
push cx
s1: mov dx,0 ;将dx的内容清零
mov dl,ds:;将数据保存在dx的低位
mov cx,dx ;将dx的值保存在cx中
sub cx,20h ;运算cx-20h是非=0,如果cx=0 下面将跳转
jcxz dyl12 ;如果cx=0 跳转到dyl12不=0 继续下面的循环
mov dh,7 ;将颜色保存在dx的高位
mov es:,dx ;将数据写入显存地址
add si,2
inc di
jmp short s1
dyl12: pop cx
pop di
pop si
pop bx
ret ;第一子程序结束
dyl2:mov dx,2 ;第二子程序开始
dyl3:mov ax, ;第三四子程序开始
push bx
push si
push di
push cx
mov di,0
dyl21: mov cx,dx
jcxz dyl22
push ax ;低位保存到栈
mov ax,dx ;高位移到AX中待除
mov dx,0 ;高位清零
mov cx,10 ;除数设置为10
div cx ;高位除以10 开始除高位
mov bp,ax ;除后商保存到bp中
pop ax ;将栈中保存的数恢复到AX中
div cx ;低位除以10 开始除低位
push dx ;将结果余数保存到 栈中
inc di
mov dx,bp
jmp short dyl21
dyl22: mov cx,10
div cx
push dx
inc di
mov dx,0
mov cx,ax
jcxz dyl23
jmp short dyl22
dyl23: mov cx,di
dyl24: pop ax
add al,30h
mov ah,7
mov es:,ax
add si,2
loop dyl24
pop cx
pop di
pop si
pop bx
ret ;第二三四子程序结束
code ends
end start
页:
[1]