鱼C论坛

 找回密码
 立即注册
查看: 2586|回复: 4

课程设计1,屏幕无输出

[复制链接]
发表于 2012-3-8 09:31:53 | 显示全部楼层 |阅读模式
1鱼币
assume cs:code,ds:data,es:table,ss:stack
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个字符串
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
dw 16 dup (0)
table ends

stack segment
dw 32 dup(0)
以上代码用emu8086调试通过,但是用cmd调用无输出,debug调用出现错误显示。请高手帮忙调试。
stack ends

code segment
start:
mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,32

mov ax,table
mov es,ax
mov si,0
mov di,0

mov cx,21
call out_put

mov ax,4c00h
int 21h
;------------out_put-----start---使用寄存器bx,cx,dx,si,di-------
out_put:                ;写入es数据库
mov cx,21               ;总循环21行
mov di,0                ;定义显单元
mov bx,0                ;定义ds年份、收入数据单元
mov si,0                                 ;定义ds人数单元
mov dx,0                                
mov ax,0
all_s:
call out_put_1
call out_put_2
call out_put_3
call out_put_4
add bx,4
add si,2
add dh,1
loop all_s


ret
;-------------out_put-end----------
;----------显示字节单元-开始---------------

out_put_1:
;-------1-年份循环开始----

push bx
push cx
push dx
push di
push si

mov cx,4
add dh,2                                ;行
mov dl,3                                ;列
o_s1:;年份循环4次
push cx
mov cl,33                                ;定义显示位置与颜色
mov al,byte ptr ds:[bx];第一个单元赋值
call show_str                        ;调用显示程序,传递al
inc bx
inc dl
pop cx
loop o_s1

pop si
pop di
pop dx
pop cx
pop bx

;-------1-年份循环结束----
ret

out_put_2:
;-------2-收入循环开始----
push bx
push cx
push di
push si
push dx

mov ax,ds:[bx+84]
mov dx,ds:[bx+86]

call gt_16_10                        ;16转10,传递ax,dx,返回循环次数ax
pop dx
push dx
mov bx,0
mov cx,ax                                ;定义循环次数
add dh,2                                ;行
mov dl,20                                ;列

o_s2:;收入循环
push cx
mov cl,33                                ;定义显示位置与颜色
mov ax,table
mov es,ax
mov al,byte ptr es:[bx]
call show_str                        ;调用显示程序,传递al
inc bx
inc dl
inc di
pop cx
loop o_s2

;===============
pop dx
pop si
pop di
pop cx
pop bx
;-------2-收入循环结束----
ret

out_put_3:
;-------3-人数循环开始----
push bx
push cx
push di
push si
push dx
mov ax,ds:[si+168]
mov dx,0

call gt_16_10                        ;16转10,传递ax,dx,返回循环次数ax
pop dx
push dx
mov bx,0
mov cx,ax                                ;定义循环次数
add dh,2                                ;行
mov dl,40                                ;列

o_s3:;人数循环
push cx
mov cl,33                                ;定义显示位置与颜色
mov ax,table
mov es,ax
mov al,byte ptr es:[bx]
call show_str                        ;调用显示程序,传递al
inc bx
inc dl
inc di
pop cx
loop o_s3

;===============
pop dx
pop si
pop di
pop cx
pop bx
;-------3-人数循环结束----
ret

out_put_4:
;-------4-平均工资循环开始----
push bx
push cx
push di
push si
push dx

mov ax,word ptr ds:[bx+84]    ;求平均工资
mov dx,word ptr ds:[bx+86]
div word ptr ds:[si+168]

mov dx,0


call gt_16_10                        ;16转10,传递ax,dx,返回循环次数ax
pop dx
push dx
mov bx,0
mov cx,ax                                ;定义循环次数
add dh,2                                ;行
mov dl,60                                ;列

o_s4:                                        ;工资循环
push cx
mov cl,33                                ;定义显示位置与颜色
mov ax,table
mov es,ax
mov al,byte ptr es:[bx]
call show_str                        ;调用显示程序,传递al
inc bx
inc dl
inc di
pop cx
loop o_s4

;===============
pop dx
pop si
pop di
pop cx
pop bx
;-------4-平均工资循环结束----

ret

show_str:;显示用程序,使用寄存器ax,bx,cx,dx,es

push bx
push cx
push dx
push si
;push di
push ax

mov si,0
mov ax,0b800h
mov es,ax
mov bx,0
mov di,0
mov si,0
mov ax,160
mul dh;求行首字母数量 (m-1)160
add dl,dl;求列首字母数量 (n-1)2
mov dh,0
mov di,dx
add di,ax
sub di,162;求总数量
;---求出具体显示坐标完毕--
pop ax
push ax
mov ah,cl;颜色参数赋值给ah
;将显示用字符赋值给al,颜色赋值给ah
mov cl,al
mov ch,0

;jcxz ok1
mov word ptr es:[di],ax
;inc si
;add di,2
;jmp short s1

ok1:
pop ax
;pop di
pop si
pop dx
pop cx
pop bx

ret
;----------显示字节单元--结束------------
;----------16进制转换10进制-----ax传递循环次数-------
gt_16_10:
push bx
push cx
push dx
push si
push di

mov cx,10
mov di,0
gt_s:
call div_dw ;传递ax,bx
push cx
mov cx,ax
inc di
jcxz gt_ok
jmp short gt_s

gt_ok:
mov cx,di
mov ax,table
mov es,ax
mov bx,0
gt_s1:
pop ax
add ax,30h
mov es:[bx],ax
inc bx
loop gt_s1
mov ax,di

pop di
pop si
pop dx
pop cx
pop bx
ret
;----------16进制转换10进制--------------
;----------无溢出除法-使用寄存器cx,ax,dx,bx---
div_dw:;16进制变10进制赋值
push bx
mov cx,10
push ax
mov ax,dx
mov dx,0
div cx;16位除法 高16 dx 低16 ax。
mov bx,ax;除完后ax存商,dx存余数
pop ax
div cx;16位除法,高16dx是上面的余数
mov cx,dx
mov dx,bx
pop bx
ret
;----------无溢出除法-结束--------------------

code ends
end start


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-3-8 09:38:33 | 显示全部楼层
哦,我看到了是覆盖了,但是cmd不输出结果还是很奇怪。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-3-8 09:40:57 | 显示全部楼层
这个帖子关闭了,取消int 21h后,程序通过。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-3-8 10:09:35 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-6-6 15:44:45 | 显示全部楼层
长长见识。。。。。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-17 11:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表