jeset 发表于 2013-4-7 17:04:36

实验9,独立完成独立程序

本帖最后由 jeset 于 2013-4-7 17:18 编辑

实验9,独立完成独立程序,做程序就是要考自己的头脑做,不要跟着别人的头脑走,那么永远做不出来程序,只有靠自己的头脑才能一步一步的实现程序的功能,欢迎大家和我一同交流,我的Google Talk:crackkay@gmail.com。
任务:在中间依次显示'welcome to masm!'
材料:一行有80个字符串,每个字符串后面有它的属性,即偶数为字符串,奇数为属性,一行占用160个内存单元,每页显示25行。那么我先取中间的12行,即12*160.
设计:首先考虑到字符串是一样的,那么我就可以先在代码段的开头定义一个'welcome to masm!'(或者另外一个段也行,记住挂钩就行),因为3行需要显示的字符串都是一样的,那么就可以利用双层循环进行控制,在这里字符串控制我用ds控制结构组(显存段),用bx控制结构体(控制行),用di控制结构体元素(控制列),用si控制cs段最开始的字符串进行传送,这样的好处就是减少了CPU的工作量
颜色因为属性不同,所以需要3次循环,循环中我用bx控制结构体(控制行),用di控制结构体中的元素(控制列),最重要的是因为属性为奇数位,所以我把di设置为81。

至于白底色怎么调出来的是用三个原色相加,就可以出现了白底



assume cs:codesg
codesg segment
db 'welcome to masm!'

kk:
mov ax,0B800H
mov ds,ax
mov bx,780H
mov di,80
mov si,0
mov cx,3
s1w:push cx
mov cx,16
s1n:
mov al,cs:
mov byte ptr ds:,al
add si,1
add di,2

loop s1n
mov si,0
mov di,80
add bx,160
pop cx
loop s1w


mov di,81
mov bx,780H
mov cx,16
ys1:
mov al,02H
mov byte ptr ds:,al
add di,2
loop ys1

mov di,81
add bx,160
mov cx,16
ys2:
mov al,24H
mov byte ptr ds:,al
add di,2
loop ys2

mov di,81
add bx,160
mov cx,16
ys3:
mov al,71H
mov byte ptr ds:,al
add di,2
loop ys3

mov ax,4c00h
int 21h

codesg ends
end kk
页: [1]
查看完整版本: 实验9,独立完成独立程序