汇编网首页登录博客注册
fpamc的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
学习动态

[2012-04-16 18:48] 一个因为MY想到的程序(二)「自娱自乐」

图片载入中
在“一个因为MY想到的程序(一)”中,因源程序出现一些细节错误导致左右两边出现多余的蓝色条。今空余时间做了修改,都是一些细节问题。程序效果按照所想呈现。
PS:个人感觉有BUG的那个好看些。。。。嘿嘿。

下面贴出修改后的源码。

assume cs:code,ds:data,ss:stack
data segment
db '9966999999966699999996699666699666999966699666699'
db '9969999999996999999999699666699669966996699666699'
db '9966999999999999999996699666699699666699699666699'
db '9966669999999999999666669999966699666699699666699'
db '9966666699999999966666666999666699666699699666699'
db '9966666666999996666666666999666669966996699666699'
db '9966666666699966666666666999666666999966669999996'
db '6666666666669666666666666666666666666666666666666'
data ends

stack segment
dw 8 dup (0)                  ;开辟栈段,暂时存储cx的值
stack ends

code segment
start:
mov ax,data
mov ds,ax                     ;设置数据段地址

mov ax,0b800h
mov es,ax                     ;设置显示存储段地址

mov ax,stack
mov ss,ax
mov sp,10h                    ;初始化栈空间

mov bx,0
mov si,0
mov cx,8                      ;行的循环次数
push cx                       ;暂存行的循环次数到栈
mov cx,49                     ;列的循环次数
s:
push cx                       ;暂存列的循环次数
mov cx,0ffc7h                 ;为了保证((cx)+39h=0)jcxz的跳转。也就是判断字符‘9’的思想

s0:
mov al,[bx]
mov ah,0
add cx,ax
jcxz colour                   ;判断字符‘9’,是则跳转,反之无视。
mov ah,01eh
mov es:[si].330h,ax           ;将字符和字符属性放入显存
inc bx
add si,2
jmp over                      ;越过colour段

colour:
mov ah,0ceh
mov es:[si].330h,ax
inc bx
add si,2                      ;此段是设置字符‘9’属性的

over:
pop cx
loop s                        ;如果,列循环数cx≠0,则转到标号处,开始设置下一个字符

pop cx                        ;行,循环数出栈
dec cx                        ;每次循环减少循环次数
jcxz over0                    ;当行循环数(cx)=0时,转移到'程序返回',结束程序
push cx                       ;暂存所剩行循环数到栈中

mov cx,50                     ;设置列循环数,因为下面有一个loop指令,所以多加1
sub si,62H                    ;清除上一行列数
add si,0a0h                   ;指向下一行
loop s                        ;如果行循环数,cx≠0,则转移到s标号处,开始新的列循环

over0:
mov ax,4c00h
int 21h
code ends
end start
评论次数(5)  |  浏览次数(257)  |  类型(自娱自乐) |  收藏此文  | 

[  chinatree   发表于  2012-04-16 19:20  ]

泪牛满面。干脆定义4000字节,然后设置好ds:si,es:di以及cx,然后rep movsb好了。。。
嘿嘿。

[  fpamc   发表于  2012-04-16 21:12  ]

rep movsb什么意思?!
貌似我没看懂……

[  tomato   发表于  2012-04-16 22:37  ]

字节传送指令,传送次数在cx中。

[  chinatree   发表于  2012-04-16 23:40  ]

串传送指令,ds:si源地址,es:di目标地址,cx传送次数,Rep重复串操作前缀,使用Cld使df复位,每传送一次di,si自加,称作正向传送,Std置位,di,si自减。

[  fpamc   发表于  2012-04-17 06:51  ]

恩,这个的功能实现大概懂了。
我去找找资料了解了解。
谢谢你们。嘿。

 
 请输入验证码  (提示:点击验证码输入框,以获取验证码