assume cs:codesg,ds:data
data segment
;表示21年的21个字符串
db '1975','1976','1977','1978','1979','1980','1981','1982','1983'
db '1984','1985','1983','1987','1988','1989','1990','1991','1992'
db '1993','1994','1995'
;表示21年公司总收入的21个dword型数据
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个word型数据
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
temp segment ;临时内存
db 16 dup(0)
temp ends
codesg segment
start: ;程序开始处
mov ax,data
mov es,ax
mov ax,temp
mov ds,ax
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;显示时间
mov si,0
mov bx,0
mov dh,0
mov cx,21
start_s1:
push cx
push dx
mov cx,4
start_s2:
mov al,es:[bx+si]
mov ds:[si],al
inc si
loop start_s2
sub si,si
pop dx
inc dh
mov cl,2
mov dl,23
call show_str ;调用show_str函数
add bx,4
pop cx
loop start_s1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;显示公司总收入
mov bx,0
mov si,0
mov dh,0
mov cx,21
start_s3:
push cx
push dx
mov ax,es:[bx+54h]
mov dx,es:[bx+56h]
call wdtoc
pop dx
inc dh
mov cl,2
mov dl,33
call show_str ;调用show_str函数
add bx,2
pop cx
loop start_s3
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;显示公司雇员人数
mov bx,0
mov si,0
mov dh,0
mov cx,21
start_s4:
push cx
push dx
mov ax,es:[0a8h+bx]
call dtoc
pop dx
inc dh
mov cl,2
mov dl,43
call show_str ;调用show_str函数
add bx,2
pop cx
loop start_s4
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;显示人均收入
mov bx,0
mov si,0
mov di,0
mov dh,0
mov cx,21
start_s5:
push cx
push dx
;人均收入
mov ax,es:[bx+54h]
mov dx,es:[bx+56h]
div word ptr es:[di+0a8h]
call dtoc
pop dx
inc dh
mov cl,2
mov dl,53
call show_str ;调用show_str函数
add bx,4
add di,2
pop cx
loop start_s5
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
s9:
mov cx,10 ;无限循环,暂屏看效果用
nop
nop
loop s9
mov ax,4c00h
int 21h
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
show_str:;显示字符串函数
push ax
push es
push dx
push di
push si
push cx
push ds ;保存子过程要用到的寄存器
mov ax,0B800h
mov es,ax ;显存段地址
dec dh
mov al,0a0h
mul dh
mov di,ax ;行定位
dec dl
mov al,2
mul dl
add di,ax ;列定位
mov ah,cl
ss_s:mov cl,ds:[si]
mov ch,0
jcxz ss_ok
mov al,ds:[si]
mov es:[di],al
mov es:[di+1],ah
inc si
add di,2
jmp short ss_s ;字符串复制
ss_ok: pop ds
pop cx
pop si
pop di
pop dx
pop es
pop ax ;恢复寄存器
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
dtoc: ;数值显示的子程序定义
push dx
push cx
push ax
push si
push bx
push ds
mov bx,0 ;用bx计数
dt_s1:
mov cx,10d
mov dx,0
div cx
mov cx,ax
jcxz dt_s2
add dx,30h
push dx
inc bx
jmp short dt_s1
dt_s2:
add dx,30h
push dx
inc bx
mov cx,bx
mov si,0
dt_s3:
pop ax ;存放到ds:si内存当中
mov [si],al
inc si
loop dt_s3
mov byte ptr [si],0
dt_ok1:
pop ds
pop bx
pop si
pop ax
pop cx
pop dx
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
wdtoc:;转换十进制字符串
push dx
push cx
push ax
push si
push bx
mov bx,0 ;用bx计数
wdt_s1: mov cx,10d
call divdw
mov cx,ax
jcxz wdt_s2
add cx,30h
push cx
inc bx
jmp short wdt_s1
wdt_s2: add cx,30h
push cx
inc bx
mov cx,bx
mov si,0
wdt_s3: pop ax ;存放到ds:si内存当中
mov [si],al
inc si
loop wdt_s3
wdt_ok1:pop bx
pop si
pop ax
pop cx
pop dx
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
divdw: ;防止除法溢出的除法
push ax
mov ax,dx
mov dx,0
div cx
mov bx,ax
pop ax
div cx
mov cx,dx
mov dx,bx
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
codesg ends
end start
- [haojunyu] 游客:解方程啊 sa>1000H 要最小就取1001H 11/23 22:08
- [游客] sa*16+ffff=20000h如何得出sa为1001H呢,求解释 11/23 11:17
- [hongdayong] 嗯嗯 。。我只是先存在这里。。最近没电脑用。 10/01 11:39
- [wsrf] 程序不能通过编译,博主应该把没有编译错误和警告错误的完整程序贴出来,而不应该是现在的程序,这样的问题 09/22 09:23
- [游客] 你的程序还是有问题,不能正常运行的。 问题应该是出在显示公司总收入哪里。你自己在检查一下。 08/19 09:31
- [younggay] 加油。 08/18 10:05
- [mywiil] OK。加油! 07/28 10:05
- [hongdayong] 此程序可以进一步改进,就是在data段最后加一个结束字节比如0。然后外层通过jxcz来判断时候结束. 07/27 11:46
- [younggay] 正确。 07/27 10:21
- [younggay] 大概的意思描述清了。这个题目很经典。对于该知识点掌握的程度一试即知啊。 07/27 10:20
[ 游客 发表于 2009-08-19 09:31 ]
你的程序还是有问题,不能正常运行的。
问题应该是出在显示公司总收入哪里。你自己在检查一下。