-146- | PC机汇编语言实战精解 | ![]() |
|||||||||||||||||||
dispmsg: exit: main code |
lodsb or jz mov stosw add inc jmp mov int mov mov int mov int endp ends end |
al,al exit ah,attr di,80 attr dispmsg ah,0 16h ah,0 al,mode 10h ah,4ch 21h main |
;取得一个字符 ;已经到了字符串结尾了吗? ;已到结尾,转EXIT退出 ;属性字节送入AH寄存器 ;将ASCII码与属性一同写入显示缓存中 ;DI寄存器后移80个字节 ;属性字节加1 ;转DISPMSG继续显示下一个字符 ;等待键盘输入 ;恢复原来的显示模式 ;结束进程 |
||||||||||||||||||
我尽量使每个程序都有富于趣味性的输出,不知大家对这个程序的输出结果是否有兴趣。这个程序给我们提出了两个问题:第一,为什么这一串文字是倾斜的?第二,为什么paradise一词中第二个字母a 是一个蓝方块? 答案十分简单:首先指令stosw可以让DI寄存器自动加2,因此当我们给DI加上80的时候,DI寄存器的实际增量是82,所以DI指向了下一行的下一列。大家可以修改程序给DI加上78,想想输出结果会是什么样子,然后运行程序看看实际输出和想象中是否一致。至于那个字母"a"的去向就更不用多说,我们每显示一个字符就将属性值加1,显示字符"a"时属性值恰好是11H,所以字符"a"和背影融为一体了。 这个程序十分简单,不过它很形象地说明了每个字符行与显示缓存中的80个字节的对应关系。下面这个程序稍微复杂一些,其中的子过程outchar可以接收字符的行号与列号,由它自行算出偏移量。 |
|||||||||||||||||||||
PARADISE data msg mode data |
.ASM segment assume db'Enter db ends |
ds:data into the paradise.',0 ? |
;定义一个字符串 ;保存当前的显示模式 |
||||||||||||||||||
Copyright © 2004-2015 Reanimator | www.cookmoon.org |