|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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
|
|