《汇编语言(第三版)》王爽,实验九

不知道为什么,在win7下用的emu8086,显示会错位,到不了中间位置


在网上找了下别人的代码,发现即使是在别人那里能正常显示在中间位置,复制到我这里都会显示为上图所示的样子。

下面是代码,定义数据段的时候为了后面不用将ASCII码和属性分开读取,就定义成如下这样比较繁琐的形式了。(其实做的时候第一时间没想到将ASCII码和属性分开写,比如db 'welcome to masm!'    db 02H,24H,71H这样)

assume cs:code


data segment
    ;绿色 
    db 'w',02H,'e',02H,'l',02H,'c',02H,'o',02H,'m',02H,'e',02H,' ',02H
    db 't',02H,'o',02H,' ',02H,'m',02H,'a',02H,'s',02H,'m',02H,'!',02H
    ;绿地红色
    db 'w',24H,'e',24H,'l',24H,'c',24H,'o',24H,'m',24H,'e',24H,' ',24H
    db 't',24H,'o',24H,' ',24H,'m',24H,'a',24H,'s',24H,'m',24H,'!',24H
    ;白底蓝色
    db 'w',71H,'e',71H,'l',71H,'c',71H,'o',71H,'m',71H,'e',71H,' ',71H
    db 't',71H,'o',71H,' ',71H,'m',71H,'a',71H,'s',71H,'m',71H,'!',71H
data ends    
code segment 
start:
    mov ax,data
    mov ds,ax
    
    mov ax,0B800H
    mov es,ax;找到显示缓冲区
    
    mov bx,0
    mov si,0720H;偏移地址
    
    mov cx,16
  s:
    mov ax,word ptr [bx]
    mov word ptr es:[si],ax;12行
    
    mov ax,word ptr [bx+32]
    mov word ptr es:[si+0a0h],ax;13行           
    
    mov ax,word ptr [bx+64]
    mov word ptr es:[si+140h],ax;14行
    add bx,2
    add si,2
    loop s 
          
    mov ax,4c00h
    int 21h                            
code ends
end start

猜你喜欢

转载自blog.csdn.net/chczy1/article/details/80381943