荣誉值:0
信誉值:0
注册日期:2009-03-18 14:35 |
assume cs:code
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'
;以上表示21年的21个字符串 4个字节 21*4
dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000
;以上表示21年公司总收入的21个dword型数据 21*4
dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
dw 11542,14430,15257,17800
;以上表示21年公司雇员人数的21个word型数据 21*2
data ends
table segment
db 21 dup ('year summ ne ?? ')
table ends
stack segment
dw 32 dup (0)
stack ends
code segment
start:
mov ax, data
mov ds, ax
mov ax, stack
mov ss, ax
mov sp, 40h
mov ax, table
mov es, ax
;填充table表
mov si, 0
mov di, 0
mov bx, 0
mov bp, 0
mov cx, 21
table0:
;年份
mov ax, 0h[bx]
mov es:[bp].0h, ax
mov ax, 0h[bx+2]
mov es:[bp].2h, ax
;收入
mov ax, 54h[bx]
mov es:[bp].5h, ax
mov ax, 54h[bx+2]
mov es:[bp].7h, ax
;雇员数
mov ax, 0a8h[si]
mov es:[bp].0ah, ax
;人均收入
mov ax, es:[bp].5h
mov dx, es:[bp].7h
div word ptr es:[bp].0ah
mov es:[bp].0dh, ax
add bx, 4
add si, 2
add bp, 10h
loop table0
;显示table表
mov bp, 0
mov si, 0
mov dh, 4
mov dl, 1
mov cx, 21
table1:
push cx
;显示年份
mov ax, es:[bp].0h
mov [si].0h, ax
mov ax, es:[bp].2h
mov [si].2h, ax
mov byte ptr [si].4h, 0
mov cl, 2h
call show_str
;显示收入
push dx
mov ax, es:[bp].5h
mov dx, es:[bp].7h
call dtoc
pop dx
mov dl, 11
call show_str
;显示雇员数
push dx
mov ax, es:[bp].0ah
mov dx, 0
call dtoc
pop dx
mov dl, 21
call show_str
;显示人均收入
push dx
mov ax, es:[bp].0dh
mov dx, 0
call dtoc
pop dx
mov dl, 31
call show_str
inc dh
mov dl, 1
add bp, 10h
pop cx
loop table1
mov ax, 4c00h
int 21h
;名称:dtoc 数值显示
;功能:将dword型数转变为表示十进制数的字符串,字符串以0为结尾符
;参数:(ax)=dword型数据的低16位
; (dx)=dword型数据的高16位
; ds:si指向字符串首地址
;返回:无
dtoc:
push ax
push cx
push dx
push si
mov cx, 0h
push cx
dtoc3:
mov cx, 0ah
call divdw
add cx, 30h
push cx ;余数入栈
;判断商是否为零,即dx和ax都为零才行
mov cx, dx
jcxz dtoc1
jmp short dtoc3
dtoc1:
mov cx, ax
jcxz dtoc2
jmp short dtoc3
dtoc2:
pop cx
mov [si], cl
inc si
jcxz dtoc4
jmp short dtoc2
dtoc4:
pop si
pop dx
pop cx
pop ax
ret
;名称:divdw 防止除法溢出子程序
;功能:进行不会产生溢出的除法运算,被除数为dword型,除数为word型,
; 结果为dword型
;参数:(ax)=dword型数据的低16位
; (dx)=dword型数据的高16位
; (cx)=除数
;返回:(dx)=结果的高16位,(ax)=结果的低16位
; (cx)=余数
divdw:
push bx
mov bx, ax
mov ax, dx
mov dx, 0h
div cx
push ax
mov ax, bx
div cx
mov cx, dx
pop dx
pop bx
ret
;名称:show_str 显示字符串子程序
;功能:在指定的位置,用指定的颜色,显示一个用0结束的字符串
;参数:(dh)=行号(取值范围0-24),(dl)=列号(取值范围0-79)
; (cl)=颜色,ds:si指向字符串的首地址
;返回:无
show_str:
push ax
push bx
push cx
push dx
push si
push es
mov ax, 0b800h
mov es, ax
mov al, 0a0h
mul dh
mov bx, ax
mov al, 2h
mul dl
add bx, ax
mov dl, cl
mov cx, 0
s:
mov cl, [si]
jcxz ok
mov es:[bx], cl
mov es:[bx+1], dl
add bx, 2
inc si
jmp short s
ok:
pop es
pop si
pop dx
pop cx
pop bx
pop ax
ret
code ends
end start | | |