王爽书实验九参考答案看不懂的地方
实验要求上说高位存放字符属性,小甲鱼给的参考答案第一个和第三个参考程序都是低位al存放字符属性,而第二个参考程序是高位ah存放字符属性,哪位大神指点指点啊,小弟新手,真的没弄明白啊!!第一个参考程序assume cs:code,ds:data,es:tabledata 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,
mov es:,ax
mov al,2
mov es:,al
inc bx
inc si
loop s0
mov bx,0
mov cx,16
mov si,160
s1:mov ax,
mov es:,ax
mov al,36
mov es:,al
inc bx
inc si
loop s1
mov bx,0
mov cx,16
mov si,320
s2:mov ax,
mov es:,ax
mov al,113
mov es:,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, ;字符赋值al
mov ah,02h ;绿色
mov es:.720h,ax ;写入第12行64列
mov ah,14h ;绿底红色
mov es:.7c0h,ax ;写入第13行64列
mov ah,71h ;白底蓝色
mov es:.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,
mov ah,2h
mov es:,ax ;设置绿色字体
mov ah,24h
mov es:.0a0h,ax ;设置绿底红色
mov ah,71h
mov es:.0a0h.0a0h,ax ;设置白底蓝色
inc si ;指向下一字符
add bx,2 ;指向下一显存单元
loop s
mov ax,4c00h
int 21h
code ends
end start
三个参考答案都能正常运行~ 有没有能帮助一下的大侠~~小弟实在不懂啊~~ 在0B800h开始的地址中写入内容,低地址(偶数位)存放字符的ASCII码,高地址(奇数位)存放字符的属性
如果物理地址为0b800:0001,那么开始的地址就不是偶数位了,就不能高地址存放字符的属性,只能是反过来。 我不明白的是,为什么时候我的程序第一次运行正常,第二次再运行就不会显示字符了,把参考答案直接复制了也是这样。 最上面的一个。mov es:,ax,是把(ax)放入了 0b800:720 ,然后al.2 mov es:,al
是把(al)放入了0b800:721.第一次循环时,第二次就加2 2418267670 发表于 2015-9-6 13:52
最上面的一个。mov es:,ax,是把(ax)放入了 0b800:720 ,然后al.2 mov es:,al
是把(al)放入了0 ...
谢谢~~已弄懂 {:1_1:} 0B800h开始的地址中写入内容,低地址(偶数位)存放字符的ASCII码
高地址(奇数位)存放字符的属性
如果物理地址为0b800:0001,那么开始的地址就不是偶数位了
就不能高地址存放字符的属性,只能是反过来。
页:
[1]