code:
assume cs:code,ds:data
data segment
db 'welcome to masm!'
data ends
code segment
start: mov ax,data
mov ds,ax
mov ax,0b800h
mov es,ax
mov di,0
mov si,7a0h
mov cx,16
s: mov ax,[di]
mov es:[si],ax
mov es:[si+32],ax
mov es:[si+64],ax
inc si
mov byte ptr es:[si],02h
mov byte ptr es:[si+32],24h
mov byte ptr es:[si+64],71h
inc di
inc si
loop s
mov ax,4c00h
int 21h
code ends
end start
许多人都问 怎么确定 屏幕中间的位置,我的方法很简单,只要是找到规律就很容易。先要确定字符串在屏幕的第几行,一共25行,当然是第13行。到底偏移地址是多少呢,可以找出规律:
第一行:000~09f
第二行:0a0~13f
第三行:140~1df
不知道大家看出来没有,第二行(即n=2)开始处前两个数字 0a=10*(2-1),后面的10*(2-1)转化为16进制后是0a,看看 第三行(n=3),10*(3-1)转化成16进制后是14,我们找到规律了!10*(n-1)转化为16进制是第n行的开始处的头两数(第三个数都是0)。
好了,我们计算屏幕中间的第13行的开始处 :10*(13-1)转化成16进制是 78h,后面加一个0为780h。
我们知道了第13行的开始处,但是题目要求我们在屏幕中间输出,开头必须空出一些字节,空出多个字节呢?空出(80-16*3)/2 个即:16个字符也就是 32个字节,用16进制表示为20h。
最后偏移地址为 :7a0h=780h+20h,当然你 也可以有不同的偏移地址,可以在程序里改变。 |