. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->转移指令的原理
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  请问实验九如何计算行与列的位置  [待解决] 回复[ 8次 ]   点击[ 217次 ]  
asmcaicai
[帖 主]   [ 发表时间:2011-02-19 15:34 ]   [引用]   [回复]   [ top ] 
荣誉值:4
信誉值:0
注册日期:2011-02-16 23:01
请问实验九如何计算行与列的位置?
masmaster
[第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
asmcaicai
[第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
???
masmaster
[第3楼]   [ 回复时间:2011-02-19 22:24 ]   [引用]   [回复]   [ top ] 
荣誉值:268
信誉值:12
注册日期:2010-06-18 22:19
按照自己的想法去做吧。。。
asmcaicai
[第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
asmcaicai
[第5楼]   [ 回复时间:2011-02-20 10:07 ]   [引用]   [回复]   [ top ] 
荣誉值:4
信誉值:0
注册日期:2011-02-16 23:01
用笨方法,算出第12行是6E0H,第13行是780H,第14行是820H,然后在每行的第40H列循环。
有错误的地方,请大家指导一下
asmcaicai
[第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楼的
asmcaicai
[第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楼的
asmcaicai
[第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
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved