- [kanwangxue] 如果是文字的,不是特别好啊,体力活,如果文字还加点动画,那就必须顶了。 01/15 01:10
- [kanwangxue] 必须顶啊。 01/15 00:54
- [ltoiii] 既然是实现loop功能,是否要考虑s和se标号? mov bx,offset s - offset 12/09 12:09
- [xiaoyao2012] 正确 11/01 15:33
- [xuer2016] 又找到2条被我忽视的地方: 1.PUSH 和 POP 针对字单元 2.POP 不能是CS 10/26 10:57
- [xuer2016] 学习了 我书写不规范,16进制字母前不加0,后面不加H,以后要注意了。。。 10/26 10:51
- [xuer2016] 来老师这学习下 10/26 10:31
- [youthangel] 不妙,CPU的利用率一下子就上去了。还好我的处理器不是太弱,35%左右的利用率。建议博主在修改一下 10/20 08:23
- [fpamc] 在我心里她就是我的女神。 10/02 08:58
- [newpeople] 你女朋友用得了简直就是一个女神…… 10/01 08:10
- [99998888] 请您指点一下如何找到会ASSEMBLER 语言的翻译,翻译成中文或英文。我的QQ ; 9097815 07/25 09:56
- [jeremy] 我觉得你学习的挺好,可以加你扣扣吗?我的469614823 08/07 14:46
- [zhangbo0805] 哈哈, 你好呀!很希望认识你呀!我发现你学习的积极性很高!正想向您学习呢! 07/31 23:31
- [tomato] 知道了,排得还挺满。 05/29 16:35
- [tomato] 现在学习情况怎么样?在做课设二还是什么? 05/29 10:41
- [tomato] 你的留言收到了。 05/05 23:51
- [fpamc] 开始学习c咯! 05/03 21:40
- [fpamc] 居然不能发博客了……! 04/22 21:03
- [tomato] 你相册中的游戏界面我看过了,非常好,界面很漂亮,很有创造力。博主,很有潜力。加油,一定能把这个游戏做 04/20 23:46
- [fpamc] 忙了半个月,不在家,没时间学习汇编。 但是在途中想到了一个有史以来最难的程序。对于刚学完9章的我。 04/13 20:56
[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
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 ]
恩,这个的功能实现大概懂了。
我去找找资料了解了解。
谢谢你们。嘿。