等一个_在乎你的 发表于 2012-3-9 14:16:07

实验9 怎么样改变段地址才能在中间显示

assume cs:code,ds:data
data segment
db 'Welcome To Masm!'
db 42h,29h,4ah
data ends
code segment
start:mov ax,data
    mov ds,ax
    mov bx,0
   
    mov ax,0b840h;第一行中间地址
    mov es,ax
    mov si,0
   
    mov ah,0
    mov cx,16
   
s:mov al,
    mov es:,al
    mov es:,al
    mov es:,al
    mov al,ds:;送第一种颜色
    mov es:,al
    mov al,ds:;送第二种颜色
    mov es:,al
    mov al,ds:;送第三种颜色
    mov es:,al
   
    inc bx
    add si,2
    loop s

   

    mov ax,4c00h
    int 21h
code ends
end start   
   
   
   
如题想知道怎么去改变段地址ES实现 在屏幕中间显示 字符呢
   

莫名其妙 发表于 2012-3-9 17:13:10

本帖最后由 莫名其妙 于 2012-3-9 17:28 编辑

   mov ax,0b840h;第一行中间地址    这里用mov ax, 0B800h方便计算
; 当然你用B840h也可以不过后面计算显示器中间区域比较麻烦    还要计算当前位置到中间位置的偏移
;要想一步到位就直接0B8000H+中间位置的偏移[idata=160*12+2*30] 得出es 段地址 =B87C:000B
    mov es,ax                                                                                                   ;mov ax,0b87c
    mov si,0                                                                                                      ;mov es,ax
                                                                                                                        ;mov si,0bh
    mov ah,0
    mov cx,16



s:mov al,                                       这里上面改成B800H的计算方法要显示在中间需要每行加上idata   160*12+2*30
    mov es:,al   这里是第一行显示字符             ES:160*12+2*30]
    mov es:,al   这里 第二行显示字符       ES:160*12+2*30 +0a0h]
mov es:,al   这里第三行                     ES:160*12+2*30 +140h]
mov al,ds:;送第一种颜色                         下面的也要加 es: 160*12+2*30+1+偏移
    mov es:,al
    mov al,ds:;送第二种颜色
    mov es:,al
    mov al,ds:;送第三种颜色
    mov es:,al


页: [1]
查看完整版本: 实验9 怎么样改变段地址才能在中间显示