|
主题 : : 请问实验九如何计算行与列的位置 [待解决] |
回复[ 8次 ]
点击[ 217次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2011-02-19 15:34 ]
[引用]
[回复]
[ top ] | |
荣誉值:4
信誉值:0
注册日期:2011-02-16 23:01 |
|
|
|
|
|
[第1楼]
[ 回复时间:2011-02-19 16:41 ]
[引用]
[回复]
[ top ] | |
荣誉值:268
信誉值:12
注册日期:2010-06-18 22:19 |
字母模式下文本的行列点阵位25X80,也即,25行X80字符/行,而每个字符都是由高8位的字符属性和低8位的ASCII字符组成,实际每行160个字节,假如在屏幕中心位置显示字符串的话, 那么这就即可。
mov ax,0b800h
mov es,ax
mov di,160*12+40*2 | | |
|
|
|
|
[第2楼]
[ 回复时间:2011-02-19 17:36 ]
[引用]
[回复]
[ top ] | |
荣誉值:4
信誉值:0
注册日期:2011-02-16 23:01 |
书上说000-09F是第一行
0A0-13F是第一行
也就是每行加160个字=0A0H
那么第12行是不是6E0呢?
我用BX设置6E0,然后再加40H,这样可以吗?
MOV AX,B800H
MOV DS,AX
MOV BX,6E0H
??? | | |
|
|
|
|
[第3楼]
[ 回复时间:2011-02-19 22:24 ]
[引用]
[回复]
[ top ] | |
荣誉值:268
信誉值:12
注册日期:2010-06-18 22:19 |
|
|
|
|
|
[第4楼]
[ 回复时间:2011-02-20 10:02 ]
[引用]
[回复]
[ top ] | |
荣誉值:4
信誉值:0
注册日期:2011-02-16 23:01 |
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 si,0
mov di,0
mov cx,16
s:mov al,[si]
mov es:[720h+di],al
mov al,02h
mov es:[721h+di],al
mov al,[si]
mov es:[7c0h+di],al
mov al,24h
mov es:[7c1h+di],al
mov al,[si]
mov es:[860h+di],al
mov al,71h
mov es:[861h+di],al
inc si
add di,2
loop s
mov ax,4c00h
int 21h
code ends
end start | | |
|
|
|
|
[第5楼]
[ 回复时间:2011-02-20 10:07 ]
[引用]
[回复]
[ top ] | |
荣誉值:4
信誉值:0
注册日期:2011-02-16 23:01 |
用笨方法,算出第12行是6E0H,第13行是780H,第14行是820H,然后在每行的第40H列循环。
有错误的地方,请大家指导一下 | | |
|
|
|
|
[第6楼]
[ 回复时间:2011-02-20 11:34 ]
[引用]
[回复]
[ top ] | |
荣誉值:4
信誉值:0
注册日期:2011-02-16 23:01 |
看了别人写的代码,再改一下,更短些
start:mov ax,data
mov ds,ax
mov ax,0b872h
mov es,ax
mov si,0
mov di,0
mov cx,16
s:mov al,[si]
mov es:[di],al
mov es:[0a0h+di],al
mov es:[140h+di],al
inc si
mov byte ptr es:[di],02h
mov byte ptr es:[0a0h+di],24h
mov byte ptr es:[140h+di],71h
inc si
add di,2
loop s
http://www.asmedu.net/bbs/pasteinfo.jsp?part=1&level=book&kind=1010&qkSg=2&qID=4683712楼的 | | |
|
|
|
|
[第7楼]
[ 回复时间:2011-02-20 11:35 ]
[引用]
[回复]
[ top ] | |
荣誉值:4
信誉值:0
注册日期:2011-02-16 23:01 |
看了别人写的代码,再改一下,更短些
start:mov ax,data
mov ds,ax
mov ax,0b872h
mov es,ax
mov si,0
mov di,0
mov cx,16
s:mov al,[si]
mov es:[di],al
mov es:[0a0h+di],al
mov es:[140h+di],al
inc si
mov byte ptr es:[di],02h
mov byte ptr es:[0a0h+di],24h
mov byte ptr es:[140h+di],71h
inc si
add di,2
loop s
http://www.asmedu.net/bbs/pasteinfo.jsp?part=1&level=book&kind=1010&qkSg=2&qID=46837
12楼的 | | |
|
|
|
|
[第8楼]
[ 回复时间:2011-02-20 12:11 ]
[引用]
[回复]
[ top ] | |
荣誉值:4
信誉值:0
注册日期:2011-02-16 23:01 |
这是看别人写的,代码更短,效率更高些
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
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 | | |
|