. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->转移指令的原理
主题 : :  实验9,很笨的办法……不会计算屏幕中间的位置……  [待解决] 回复[ 2次 ]   点击[ 331次 ]  
glcwolf
[帖 主] [ 发表时间:2010-10-24 14:13 ] 
荣誉值:0
信誉值:0
注册日期:2010-10-23 15:46
代码如下:


assume        cs:code

data        segment
        db        'Welcome to masm!'
data        ends

code        segment
start:
        mov        ax,data
        mov        ds,ax
        mov        bx,0
        mov        ax,0B866H
        mov        es,ax
        mov        bp,0000H
        mov        si,0
        mov        cx,07H
        ;;;;;;;;;;;;;;;;;输出welcome;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        s:                                
        mov        al,ds:[bx]
        mov        es:[bp],al
        mov        es:[bp+1],00000010B
        add        bp,2
        inc        bx
        loop        s
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        mov        cx,2
        inc        bx
        add        bp,2
        ;;;;;;;;;;;;;;;;;;输出to;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;        
        s1:
        mov        al,ds:[bx]
        mov        es:[bp],al
        mov        es:[bp+1],00100100B
        add        bp,2
        inc        bx
        loop        s1
        ;;;;;;;;;;;;;;;;;;输出masm!;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        mov        cx,5
        inc        bx
        add        bp,2
        s2:
        mov        al,ds:[bx]
        mov        es:[bp],al
        mov        es:[bp+1],01110001B
        add        bp,2
        inc        bx
        loop        s2
        mov        ax,4c00h
        int         21h
code        ends
end        start


屏幕的中间位置如何计算啊?高人帮说下……谢谢!
masmaster
[第1楼] [ 回复时间:2010-10-25 17:31 ] 
荣誉值:268
信誉值:12
注册日期:2010-06-18 22:19
assume        cs:code,ds:data
data        segment
_str        db        'Welcome masm!'
data        ends
code        segment
start:
        mov ax,data
        mov ds,ax
        mov ax,0b800h
        mov es,ax
        mov si,offset _str
        mov di,12*160+40*2    ;屏幕是80X25,所以,12行就是中间行,40列就是中间列
        mov cx,lengthof _str
        mov ah,2
s:
        mov al,[si]
        mov es:[di],ax
        inc si
        add di,2              ;由于一个字符占两个字节, 故加2
        loop s

        mov ah,4ch
        int 21h
code        ends
end        start
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved