|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
assume cs:code,ds:data,ss:stack
data segment
db'welcome to masm!' ;定义要显示的字符串(共16字节)
db 02h,24h,71h ;定义颜3种色属性
data ends
stack segment
dw 1 dup(0) ;定义栈段,用于存放外层循环礐CX的值
stack ends
code segment
start: mov ax,data ;获取定义好的字符串的Ascii码在内存中的起始段地址
mov ds,ax
mov ax,stack ;获取栈段的起始段
mov ss,ax
mov ax,0b872h ;定义要把数据写入显存的起始段地址
mov es,ax
xor si,si ;用做索引颜色属性的偏移地址
xor di,di ;用做索引要写入数据的显存的偏移地址
mov cx,3h ;循环3次,定义3次颜色属性和3次依次把定义好的字符串的Ascii码写入显存
s1: push cx ;把外层循环次数压进栈,以备等下能恢复,避免内层循环改变外层循环的次数
mov ah,ds:10h[si] ;把颜色属性值放进AH寄存器中
inc si ;索引颜色属性的偏移地址自增1
xor bx,bx ;清空BX寄存器中的值,用于索引定义的字符串的Ascii码在内存中的偏移地址
mov cx,10h ;循环16次,依次把定义好的字符串的Ascii码写入显存
s: mov al,[bx] ;把定义的字符串的Ascii码依次放入AL寄存器中
mov es:[di],ax ;把AX寄存中的字符Ascii码和颜色属性写进显存中
inc bx ;所以定义好的字符串的Ascii码在内存中的偏移地址自增1
add di,2 ;索引显存的偏移地址增加2
loop s
pop cx ;恢复外层循环的CX循环次数的值
add di,80h ;显存中的地址加128个字节,使地址指向第二行需要写入定义好的字符的起始位置
loop s1
mov ax,4c00h
int 21h
code ends
end start |
|