标题无所谓,也不过是个鳌头而已。
总算我看完了这本书啦。我打算花掉这个月的时间进行实践。
我看书啊,跟看小说一样,一目十行,所以我要把大把时间用在研究上。
继续我做的题吧。
试验10,编写子程序
1显示字符串。
子程序描述:
名称:show_str
功能:在指定的位置,用指定的颜色,显示一个用0结束的字符串。
参数:(dh)=行号(取值范围0~24),(dl)=列号(取值范围0~79)
(cl)= 颜色,ds:si指向字符串的首地址
返回:无
应用举例:在屏幕的8行3列,用绿色显示DATA段中的字符串
assume cs:code
data segment
db 'welcome to masm!',0
data ends
code segment
start:mov dh,8 ;从这里输入行数
mov ax,data
mov ds,ax
mov si,0
call show_str
mov ax,4c00h
int 21h
show_str: mov ax,0b800h ;从这里到
mov es,ax
mov al,0AH
mul dh ;行数
mov bx,es
add ax,bx
mov es,ax ;到这里,都是为了设置显存融合进了8行的段地址。
sub ax,ax
mov al,2
mov bl,6 ;数值/2为列数
sub bh,bh
sub ch,ch
S:mov cl,DS:[si] ;下面的嘛,就是出显存了呗。上山容易,下山难啊,如果有人愿意看代码
;是不容易啊。我尽量清晰明了的说明下,也能更好的梳理自己的程序理念。
jcxz S1 ;就简单介绍下跳转吧,我的理念是到0的时候就跳转到S1, 然后回家。
mov es:[bx],cl
mov es:[bx+1],al
inc si
add bx,2
jmp short s
S1:ret
code ends
end start
总结:可恶,我要吐了,第一次自己完成程序完整的。不是作业。我竟然调试了1整天,不停的在DOS里面写啊,写啊,现在我每次完整一次编译,连接,执行的速度,超快。我被逼的。哎,不过收货也不小,我推荐大家都自己写,别看我的,我写的挺乱,把一些在循环里的mov ax,0之类的改到了外面,我绝的这样该会提高速度吧,还有其次,我没有用堆栈,所以大部分都是用通用寄存器存储的,看起来会比较乱。贴出来只是来炫耀一下。
大家可以路过。~~ |