比如酱紫:
- assume cs:code
-
- data segment
- db 'Welcome to masm!',0
- data ends
-
- code segment
-
- start: mov dh,8 ;行号
- mov dl,3 ;列号
- mov cl,2 ;颜色
- mov ax,data
- mov ds,ax
- mov si,0 ;ds:si指向字符串的首地址
-
- call show_str
-
- mov ax,4c00h
- int 21h
-
- show_str:
- push cx
- push si
-
- mov al,0A0h
- dec dh ;行号从0开始
-
- ;显示在 M行 N列的字符为 B800:[160*M + 2*N]
- mul dh ;8位乘法,结果存在ax中,定位行
- mov bx,ax
- mov al,2
- mul dl ;定位列
- sub ax,2 ;列号从0开始,偶字节存放字符
-
- add bx,ax
-
- mov ax,0b800h ;显存段地址
- mov es,ax
-
- mov di,0 ;显存偏移地址
- mov al,cl ;cl中存放颜色参数
-
- mov ch,0
-
- s: mov cl,ds:[si] ;'Welcome to masm!',0
-
- jcxz ok ;cx为0时,跳转,结束
-
- mov es:[bx+di],cl ;偶字节存放字符
- mov es:[bx+di+1],al ;奇字节存放颜色参数
-
- inc si
- add di,2
-
- jmp short s ;jcxz执行时候才结束
-
- ok: pop si
- pop cx
-
- ret
-
- code ends
- end start
编译无问题。。。运行也行。。。。但就是一点反应都木有。。。
各种百度google,最后发现是因为cmd.exe的原因
大部分人都是在cmd 中运行程序.一般来说没什么.但是在操作显存的时候十之八九不太会如意(显示不出)
错就错在进入了cmd.exe运行的这个程序, 正确的应该是从开始-运行-Command.com进入Command.com运行, 则不会有问题。
command.com是ms-dos的应用程序,(严格地说,是内部命令处理程序)是所有内部命令的集合,调入内存后可以接受键入的内部命令,并按照dos的规定的功能执行命令,cmd.exe是基于windows系统运行的程序,只是为习惯dos操作提供的一个命令提示符窗口。
另外:cmd下会恢复一些用户已经更改的中断向量。Command.com下不恢复。
PS:cmd.exe下有时候操作显存没反应的时候,debug一下,-g也可以显示咯