第十章实验第三问实现,自己写的还没看小甲鱼的视频不知道是不是跟我一样的思路
assume cs:codedata 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]