鱼C论坛

 找回密码
 立即注册
查看: 2224|回复: 0

一个显示问题

[复制链接]
发表于 2011-12-14 18:21:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
请大家帮忙看看,那里有问题
;王爽汇编课程设计1代码
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个字符串(0——83)
     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数据(84---167)
     dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
     dw 11452,14430,15257,17800
         ;以上是21年公司雇员人娄的21个word型数据(168---251)
data ends  
table segment
db 'Year','souru','guyuan','renjunsouru'
table ends  ;设置将显示第一段内容
stack segment  ;
dw 32 dup (0)  ;(0----63)
stack ends     ;栈段
code segment
ldata segment
  db 32 dup(0)
ldata ends
start:
mov ax,stack
mov ss,ax
mov sp,32
mov ax,data
mov ds,ax


;a2:  song1子程序将收入由数据型转为字符型,放入临时数据段中
song1:
mov ax,data
mov si,ax         ;被转化数字的段地址传入si,准备调用dtoc
mov di,84         ;将被转化的第一个数值型数据偏移地址放入di,准备调用dtoc
call dtoc
mov ax,ldata

mov bp,ax     ;
mov cx,bx         ;显示字符数量
mov bx,0          ;设置xians子程序参数
mov dl,1         ;
mov dh,10         ;
call xians        ; 调用xians子程序

mov ax,4c00h
int 21h
;a21 ;dtoc子程序将数据型收入转为字符型
;传入参数:被转化数字的段地址:si,被转化数字的偏移地址:di
;返回参数:保留已转化字符的段地址es的值,已转化的字符数量:bx
dtoc:
mov bx,0           ;设置字符记数器为0
mov ds,si
mov ax,ds:[di]     ;将待转化数字的低16位置到ax
mov dx,ds:[di+2]   ;将待转化数字的高16位置到dx
nn:
push ax            ;将待转化数字的低16位入栈临时保存
mov ax,dx          ;将先除以10的高16位数放入ax
mov dx,0
mov cx,10
div cx             ;将高16位除以10
mov bp,ax          ;将下一轮除以10的高16位临时放入bp
pop ax             ;ax放入待转化数字的低16位,高位在上一次运算的dx中
div cx
push dx            ;将余数入栈保存
mov cx,ax
add cx,bp        ;高低16位商相加,准备判断是否为0
jcxz mm
mov dx,bp        ;将下一轮计算的高16位置入dx
inc bx           ;计数器加1
jmp nn
mm:
inc bx
mov cx,bx
mov ax,ldata
mov es,ax
mov di,0
bb:
pop es:[di]
add di,2
loop bb

ret
;以下程序用于显示字符串
;传入参数:  bp--被显示字符串的段地址,bx--被显示字符串的偏移地址
;     dl--被显示字符串头字符的行标,dh--被显示字符串头字符的列标
;     cx--被显示字符串的数量
;返回参数:无
xians:
push bp
push bx
push dx
push cx
push di
push es         
mov ax,0b800h
mov es,ax     ;设置显存段地址
mov ax,bp
mov ds,ax     ;设置被显示字符串的段地址
mov ax,0a0h
mul dl
mov di,ax     ;将显示行端偏移地址放入di
mov ax,2
mul dh
mov bp,ax     ;将显示行横向偏移地址放入si
ff:
mov ax,ds:[bx]
mov es:[bp+di],ax ;将字符传入显存
inc bp
mov byte ptr es:[bp+di],2
inc bx
inc bp
loop ff
pop es
pop di
pop cx
pop dx
pop bx
pop bp
ret

code ends
end start

正在测试,不完整
程序是把data dd 的第一个数据转化为字符,存在ldata中,经debug已经成功,
显示程序也没有什么问题
因为可以显示其他的字符,已试,
可是却不能把ldata中的16显示出来
请问那里有问题
debug时,xians子程序中的
ff:
mov ax,ds:[bx]
mov es:[bp+di],ax ;将字符传入显存
inc bp
mov byte ptr es:[bp+di],2
inc bx
inc bp
loop ff
部分中inc bp,inc bx,inc bp没有执行,怎么回事:dizzy:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-10-8 14:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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