|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
实验要求上说高位存放字符属性,小甲鱼给的参考答案第一个和第三个参考程序都是低位al存放字符属性,而第二个参考程序是高位ah存放字符属性,哪位大神指点指点啊,小弟新手,真的没弄明白啊!!第一个参考程序assume cs:code,ds:data,es:table
data segment
db 'welcome to masm!'
data ends
table segment
dw 4000 dup (0)
table ends
code segment
start: mov ax,data
mov ds,ax
mov ax,0b800h
mov es,ax
mov bx,0
mov si,0
mov cx,16
s0: mov ax,[bx]
mov es:[bx+720h][si],ax
mov al,2
mov es:[bx+721h][si],al
inc bx
inc si
loop s0
mov bx,0
mov cx,16
mov si,160
s1: mov ax,[bx]
mov es:[bx+720h][si],ax
mov al,36
mov es:[bx+721h][si],al
inc bx
inc si
loop s1
mov bx,0
mov cx,16
mov si,320
s2: mov ax,[bx]
mov es:[bx+720h][si],ax
mov al,113
mov es:[bx+721h][si],al
inc bx
inc si
loop s2
mov ax,4c00h
int 21h
code ends
end start
第三个参考程序assume cs:code,ds:data
data segment
db 'welcome to masm!'
data ends
code segment
start: mov ax,data
mov ds,ax
mov bx,0 ;ds:bx指向data字符串
mov ax,0b800h
mov es,ax
mov si,0 ;es:si指向显存
mov cx,16
s: mov al,[bx] ;字符赋值al
mov ah,02h ;绿色
mov es:[si].720h,ax ;写入第12行64列
mov ah,14h ;绿底红色
mov es:[si].7c0h,ax ;写入第13行64列
mov ah,71h ;白底蓝色
mov es:[si].860h,ax ;写入第14行64列
inc bx ;指向下一字符
add si,2 ;指向下一显存单元
loop s
mov ax,4c00h
int 21h
code ends
end start
第二个参考程序assume cs:code
data segment
db 'welcome to masm!'
data ends
code segment
start: mov ax,data
mov ds,ax
mov ax,0b800h
mov es,ax
mov bx,0720h ;设置中间行中间列的首地址
mov si,0
mov cx,16
s: mov ax,[si]
mov ah,2h
mov es:[bx],ax ;设置绿色字体
mov ah,24h
mov es:[bx].0a0h,ax ;设置绿底红色
mov ah,71h
mov es:[bx].0a0h.0a0h,ax ;设置白底蓝色
inc si ;指向下一字符
add bx,2 ;指向下一显存单元
loop s
mov ax,4c00h
int 21h
code ends
end start
0B800h开始的地址中写入内容,低地址(偶数位)存放字符的ASCII码
高地址(奇数位)存放字符的属性
如果物理地址为0b800:0001,那么开始的地址就不是偶数位了
就不能高地址存放字符的属性,只能是反过来。
|
|