熊文杰 发表于 2013-4-17 18:44:45

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

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:,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:;
                        jcxz funcend;cx为0就填充颜色
                        mov es:,cl;
                       
                        mov es:,al;颜色属性
                        add di,2
                        inc si;
                        jmp s;

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

code ends
end start

页: [1]
查看完整版本: 第十章实验第三问实现,自己写的还没看小甲鱼的视频不知道是不是跟我一样的思路