|
发表于 2013-5-30 22:10:55
|
显示全部楼层
- assume cs:code
- data segment
- db 'Welcome to masm!',0
- data ends
- ;(dh) = 行号 (dl) = 列号 (cl) = 颜色 ds:si指向字符串地址
- ;在屏幕的8行3列显示绿色的打data段中的数据
- stack segment
- dw 0,0,0,0,0,0,0,0
- stack ends
- code segment
- start:
- mov dh,8;
- mov dl,3;
- mov cl,2;
- mov ax,data;
- mov ds,ax;
- mov si,0;
- mov ax,stack;
- mov ss,ax;
- mov sp,16;
- call show_str
-
- mov ax,4c00h;
- int 21h;
- 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
复制代码 这段代码你跑一下看看,这段代码我验证过可以在屏幕显示文字。如果能显示,就表示是程序的问题。如果不能显示就再来分析其他原因 |
|