很羡慕实验8的源程序写法,换位想了下,就写出这个代码,不知道全对了没。
assume cs:codesg,ds:datasg
datasg segment
db 'welcome to masm!'
;以上是要输出的固定字符
db 02h
;黑底绿色
db 24h
;绿底红色
db 71h
;白底蓝色
;以上为方便阅读写得如此的控制显示时颜色代码已经转换为16进制,还没有实地用地栈所以暂时不加入栈的用法。想集中时间来学栈的用法。
datasg ends
codesg segment
start:mov ax,datasg
mov ds,ax ;初始化数据地址
mov dx,0b850h
mov es,dx ;初始化输出数据地址
mov di,10h ;颜色值的初始化偏移地址
mov si,3 ;控制循环的次数用
s:mov cx,si
jcxz s2 ;结束循环,跳转到程序返回
mov bx,0 ;初始化各REG
mov bp,0
mov cx,10h ;循环次数
s1:mov al,[bx] ;读取字符
mov ah,ds:[di] ;读取颜色
mov es:[bp+40h],ax ;输出字符
inc bx
add bp,2
loop s1 ;循环主体
inc di
add dx,160H ;换行显示下一循环的数据,做得没准确
dec si ;控制循环次数自减1
jmp s ;对JMP用法不那么熟先这样写希望有人帮忙
s2:mov ax,4c00h
int 21h
codesg ends
end start |