鱼C论坛

 找回密码
 立即注册
查看: 1535|回复: 1

王爽汇编课题设计1,关于显示缓冲区的疑难杂症。

[复制链接]
发表于 2013-9-26 12:57:32 | 显示全部楼层 |阅读模式

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

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

x
为什么我的程序不能正常显示,为什么我用debug调试的时候,我的程序向显存写东西的时候,他老是无动于衷(就是我写入的数据和显存显示的数据不一样。例如:我向b800:0506 写入 0257 查看内存显示的是 0720)呢?以下是我的代码,万分感谢各位来看我的提问。小弟在此致敬。
assume cs:codesg
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'
                
                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
                
                dw 5,3,42,104,85,210,123,111,105,125,140,136,153,211,199,209,224,239
                dw 260,304,333
data ends
        

stack segment                ;把段定义为空格为了输出的时候方便输出、对齐
                db 300 dup (' ')
stack ends

codesg segment
start:        mov dh,0                ;行数
                mov dl,60                ;列数
                mov ax,0b800h
                mov bx,dx                ;因为把数据显示在0行,所以可以直接赋值就行
                mov es,ax                ;ax和dx在下面可任意赋值了
                mov di,0
                ;*********
                mov ax,data
                mov ds,ax
                mov si,0
                ;*********
                mov ax,stack
                mov ss,ax
                mov sp,200
                mov bp,100
                mov dx,21
                
        s6:        mov cx,4                ;存年份
        s5:        mov al,[si]                ;si==0 -> si ==4
                mov [bp],al
                inc si
                inc bp
                loop s5
                mov ax,0
                mov cx,6
                mov bp,100                ;恢复bp的值,以备调用show_str用
                call show_str        ;把年份放到显存
                add bx,160
                mov ax,0
                mov cx,dx
                sub dx,1
                mov bp,100                ;恢复bp以备从新把值送进栈
                loop s6
                ;*********************当上面那些代码运行完时,si指向了data段中的dd的开始
                ;*********************并且di=6
                
                mov di,21                ;这段代码中不要忘了bp=100
                mov bx,60
                add bp,4                ;这样就可以把之前的年份覆盖掉
        s7:        mov ax,[si]                ;公司总收入
                add si,2
                mov dx,[si]        
                call divdw
                mov cx,10
                
                mov ax,6                ;ax作为中介
                call show_str
                add bx,160
                mov ax,6                ;ax作为中介
                add si,2
                mov cx,di
                sub di,1
                loop s7
                ;******************di=001ah
                mov bx,0
                mov ax,4c00h
                int 21h
                ;***********************
                
        ;功能:实现不溢出的除法运算,并把余数推进栈
divdw:        push bx
                push cx
                push di
                push ax
                
                mov bx,10
        did:mov ax,dx
                mov dx,0
                div bx
                mov di,ax        ;保存高位的商
                pop ax
                div bx
                add dl,30h
                mov [bp],dl
                sub bp,1
                mov cx,ax
                push ax
                mov dx,di
                jcxz next
                jmp short did
                
        next:inc bp
                pop ax
                pop di
                pop cx
                pop bx
                ret
                ;**********************
                
        ;功能:把字符放进显示缓冲区        
show_str:        push bx                
                        push dx
                        push es
                        push ds
                        push di 
          ;push si
                        push cx
                        
                        pop cx
                        mov di,ax
        str1:        mov al,[bp]        ;存放字符
                        mov ah,2        ;存放颜色
                        mov word ptr es:[bx+di],ax
                        inc bp
                        add di,2
                        loop str1
                        
                        
                          ;pop si
                        pop di
                        pop ds
                        pop es
                        pop dx
                        pop bx
                        ret
codesg ends
end start
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-9-26 21:30:35 | 显示全部楼层
各位仁兄能帮忙看看吗?小弟折腾了两三天了,在这题上。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-29 01:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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