实验9 根据材料编程
编程:在屏幕中间分别显示绿色、绿底红色、白底蓝色的字符串'welcome to masm!'。
我自己编了2段程序 执行的结果都不对 但我就是想不明白
第一段
assume cs:code,ds:data
data segment
db'welcome to masm!' ;定义需要显示的字符串
data ends
code segment
start:mov ax,data
mov ds,ax
mov ax,0b872h ;将第1行的段地址送入
mov es,ax
mov di,0
mov bx,0 ;这里BX设置为-1D程序显示正常(这也是让我百思不得其解的地方)
mov cx,10h ;循环16次
s:mov al,ds:[bx]
mov es:[di],al
mov es:[di+0a0h],al
mov es:[di+140h],al
inc bx
add di,2
loop s
mov di,1h
mov cx,10h
s1:mov byte ptr es:[di],02h
mov byte ptr es:[di+0a0h],21h
mov byte ptr es:[di+140h],71h
add di,2
loop s1
mov ax,4c00h
int 21h
code ends
end start
注意第一段程序 执行后 第一个循环结束后 显示三排elcome to masm!但没有属性
第2个循环结束后 显示三排属性 但没有字符
第2段程序
assume cs:code,ds:data
data segment
db'welcome to masm!' ;定义需要显示的字符串
data ends
code segment
start:mov ax,data
mov ds,ax
mov ax,0b872h ;将第1行的段地址送入
mov es,ax
mov di,0
mov bx,0 ;这里BX设置为-1D程序显示正常(这也是让我百思不得其解的地方)
mov cx,10h ;循环16次
s:mov al,ds:[bx]
mov es:[di],al
mov es:[di+0a0h],al
mov es:[di+140h],al ;将第一个字母w送入
inc di ;为属性做准备
mov byte ptr es:[di],02h
mov byte ptr es:[di+0a0h],21h
mov byte ptr es:[di+140h],71h ;将第一个字母的颜色属性送入
inc di ;为第2个字母做准备
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end start
这个程序 可以说 非常正常 但是他只显示15个字符 第一个字符的W不显示 但是将BX设置为-1D就显示正常 这是怎么回事
请高手解答 |