; 每行80个字符,占160个字节(0a0h),每个占2个字节。中间的位置是80
; 显示的字符串'welcome to masm!'总共16个字符,共32个字节,每行最左边的位置四160/2[中间位置]-8*2[左边8个字符占的字节数]=64
; 要显示3次,每次有不同的颜色,显示在中间总共25行,中间12行,显示3个,现实的第一行在屏幕的第
; 11行,前面的10行所占的空间为 10*160=1600 (0a00h),第11行从0a40开始的。
assume cs:code
data segment
db 'welcome to masm!'
db 02h, 24h, 71h ;绿色、绿地红色、白底蓝色
data ends
stack segment
dw 8 dup(0)
stack ends
code segment
start:
mov ax, data
mov ds, ax
mov ax,0B800h
mov es,ax
mov ax,stack
mov ss,ax
mov sp,10h
mov cx,3
mov bx,10h ; bx是每种颜色的关于ds的偏移地址
mov di,0a40h ;显示第一行字母的初始位置
;外层循环 显示的颜色,位置: 10+[bx]
s:
mov ah, ds:[bx] ;获取腰线使得内容的颜色
push cx
push bx
;内层循环 显示的
mov cx,16
mov bx,0 ;显示器中每行中每个字母对应的相对于该行第一个字母地址的偏移量。
mov si,0 ; data段中字母的偏移地址
s1:mov al, ds:[si]
mov es:[di+bx], ax
add bx,2
inc si
loop s1
add di,0a0h ;下一行的初始位置
pop bx
inc bx
pop cx
loop s
mov ax,4c00h
int 21h
code ends
end start
王爽 汇编语言 实验9
最新推荐文章于 2022-03-26 11:10:35 发布