这个程序先后进行了几次修改,感觉现在还是比较简单的
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;++ ++
;++ 课程设计一(完成于08/11/23,修改于08/11/25) ++
;++ ++
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
assume cs:code
data segment
db '1975','1976','1977','1978','1979','1980','1981','1982','1983'
db '1984','1985','1986','1987','1988','1989','1990','1997','1992'
db '1993','1994','1995'
;以上数据为年份记录(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年)
dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258
dw 2793,4037,5635,8226,11542,14430,15257,17800
;以上数据为雇员人数(对应上面21年)
db 10 dup (0)
;定义10字节的内存空间用来存放除法所得余数
data ends
code segment
start:
mov ax,0b800h
mov ds,ax
mov ax,data
mov es,ax
mov bx,01E8H ;设定显示的起始位置为4行4列
mov si,0
mov di,0
mov cx,21
lop:
;将年份写入显示缓冲区指定位置
push si
push di
push cx
mov cx,4
mov si,0
mov ah,71h ;设定年份显示为白底蓝字
wry:
mov al,es:[di]
mov byte ptr [bx+si],al
mov byte ptr [bx+si+1],ah
inc di
add si,2
loop wry
pop cx
pop di
pop si
;将年收入写入显示缓冲区指定位置
mov dx,es:[di+86] ;取得年收入,存入DX和AX中
mov ax,es:[di+84]
call dtoc
push si
mov si,40 ;取si存储显示间隔
call show
pop si
;将雇员人数写入显示缓冲区指定位置
mov dx,0
mov ax,es:[si+168] ;取得雇员人数,存入AX中
call dtoc
push si
mov si,80
call show
pop si
;将人均收入写入显示缓冲区指定位置
mov dx,es:[di+86] ;取得年收入,存入DX和AX中
mov ax,es:[di+84]
div word ptr es:[si+168]
mov dx,0
call dtoc
push si
mov si,120
call show
pop si
add bx,00a0h
add si,0002h
add di,0004h
loop lop
mov ax,4c00h
int 21h
dtoc:
push cx
push bx
push si
push di
mov si,0
mov di,0
mov word ptr es:[di+218],0 ;将最后一个内存字空间用来存储被除数的长度
dwi:
push ax
mov ax,dx
mov dx,0
mov cx,10
div cx
mov bx,ax
pop ax
div cx
add dx,30h
push dx
inc si
mov dx,bx
mov cx,ax
jcxz ow
jmp short dwi
ow:
mov cx,si
mov word ptr es:[di+218],cx
wri:
pop dx
mov byte ptr es:[di+210],dl
inc di
loop wri
pop di
pop si
pop bx
pop cx
ret
show:
push cx
push bx
push di
mov di,0
mov ah,04h ;将年收入设置为红字
mov cx,es:[di+218]
s1:
mov al,es:[di+210]
mov [bx+si],al
mov [bx+si+1],ah
add bx,2
inc di
loop s1
pop di
pop bx
pop cx
ret
code ends
end start
- [kuiye] 为什么大家的中断处理程序都没有用iret指令来返回? 12/25 10:41
- [zy3287] 恩,是啊,我也是过后才想起这个问题的,应该dl*2才对,呵呵 11/27 08:37
- [lwbfq] 安装的时候还会遇到一些问题,相信博主是能够解决的。 11/26 19:17
- [lwbfq] 继续。 11/26 19:07
- [wsrf] 不错。 11/26 17:20
- [wsrf] 程序没问题,大家一起进步。 11/26 17:18
- [wsrf] 没问题。 11/26 17:13
- [wsrf] 完成的不错。 11/26 17:04
- [wsrf] 博主继续努力。 11/26 17:00
- [wsrf] 还是show_str: 的老问题,列不能定位到0。 11/26 16:59
- [游客] 你好,zy3287 可以给一份银行的网银接口文档吗 QQ 99728441 01/31 02:34