鱼C论坛

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

[技术交流] 第十章实验第三问实现,自己写的还没看小甲鱼的视频不知道是不是跟我一样的思路

[复制链接]
发表于 2013-4-17 18:44:45 | 显示全部楼层 |阅读模式

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

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

x
assume cs:code

data segment
        db 10 dup(0)
data ends

stack segment
        dw 16 dup(0)
stack ends

code segment
        start:
                mov ax,stack
                mov ss,ax;
                mov sp,20h
                mov ax, 12666
                mov bx,data
                mov ds,bx
                mov si,0
               
                call dtoc
               
                mov dh,8
                mov dl,3;
                mov cl,2;
                call show_str
               
                mov ax,4c00h
                int 21h;
dtoc:
                ;将除法得出的余数压栈
        sx:        mov cx,10
                mov dx,0
                div cx;
               
                ;ax商 dx余数
                mov cx,ax;
                push dx;
                jcxz s0;商为0就跳转
               
                jmp sx
        s0:
                mov cx,1eh
                sub cx,sp
                jcxz s1;(除压入的ip值外的所有值都出栈了)
                pop ax
                add ax,30h
                mov ds:[si],al;给数据段中赋值
               
                inc si
                jmp s0;
        s1:       
                ret
               
show_str:
                ;首先把该压栈保存的压栈保存 ,
                push dx
                push ax
                push si
                push cx
               
                ;计算出dh行dl列的数据缓冲地址
                ;计算行数所用的字节数
                mov ax,160
                mul dh
                mov cx,ax;
               
                ;计算列数字节数
                mov ax,2
                mul dl
               
                ;计算要填充数据的缓冲区地址偏移
                add ax,cx;
               
               
                ;填充缓冲区
                mov si,0;
                mov di,ax;
                mov ax,0b800h;
                mov es,ax;
                mov ch,0;
               
                pop ax;
                s:
                        mov cl,ds:[si];
                        jcxz funcend;cx为0就填充颜色
                        mov es:[di],cl;
                       
                        mov es:[di+1],al;颜色属性
                        add di,2
                        inc si;
                        jmp s;

                       
                ;函数结束前把该出栈的全部出栈
                funcend :
                        pop si
                        pop ax
                        pop dx
                       
                        ret

code ends
end start

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-17 18:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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