. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->转移指令的原理
主题 : :  请问我的实验9程序哪错了,改了一个下午也没改好,显示老是不正常  [待解决] 回复[ 17次 ]   点击[ 530次 ]  
kingsgg
[帖 主] [ 发表时间:2012-03-17 23:06 ] 
荣誉值:4
信誉值:6
注册日期:2012-02-25 16:01
assume cs:code
data segment
      db 'welcome to masm!'
      dw 3 dup (0)
data ends
code segment
start:
      mov ax,data
      mov ds,ax
      mov ss,ax
      mov sp,16h
      mov ax,0b800h
      mov es,ax
      mov bx,0
      mov bp,0
      mov si,6e0h
      mov cx,16
    s:push cx
      mov al,ds:[bx]
      mov ah,02h
      mov es:[si+bp],ax
      add bp,2
      inc bx
      loop s
    
    s0:pop cx
      push cx
      mov bx,0
      mov bp,0
      mov al,ds:[bx]
      mov ah,24h
      mov es:[si+0a0h+bp],ax
      add bp,2
      inc bx
      loop s0

   s1:pop cx
      mov bx,0
      mov bp,0
      mov al,ds:[bx]
      mov ah,71h
      mov es:[si+140h+bp],ax
      add bp,2
      inc bx
      loop s1

      mov ax,4c00h
      int 21h
code ends
end start

编译完后运行,在屏幕中间右边只显示出'welcome'这几个字,然后就是几个小方块,第二行就只有一个绿底的小方块,第三行也是一个白底的小方块.请大大们帮下忙,我到底哪出错了,我的系统是深度技术ghostxp_sp3极速纯净版_2011.12,感激不尽!!
wzhh1986
[第12楼] [ 回复时间:2012-05-11 20:27 ] 
荣誉值:6
信誉值:2
注册日期:2010-12-02 13:35
要是需要显示很多种颜色的字符串,很明显,你修改后的程序不够好,不够简洁,至少没我这个简洁。我的程序如果需要的显示的颜色比较多,只需要在段中多加几个颜色上去,然后循环的个数和要显示的行数相对应改下即可。附上我写的程序。

assume cs:code,ds:data,ss:stack

data segment

  db 'welcome to masm!'      ;要显示的字符串
  db 71h,24h,2h              ;定义颜色,分别是白底蓝色、绿低红色、绿色

code segment

stack segment                ;栈段

  dw 8 dup (0)

stack ends

start:        mov ax,data
        mov ds,ax

        mov ax,0b86eh         ;0b86e为显存的第11行
        mov es,ax

        mov ax,stack
        mov ss,ax
        mov sp,16

        mov cx,3              ;以颜色的个数为外循环
        mov bp,64             ;显存的第32列,之前有32*2=64个字节
        mov bx,0

s0:        mov si,cx
        dec si                ;取颜色段中最后一个单元颜色
        mov ah,[bx+16+si]     ;ax的高位ah为颜色

        push cx               ;
        mov cx,16             ;字符串个数
        mov di,0
        mov si,0
        
s1:        mov al,[bx+si]        ;ax的低位al为要显示的字符
        mov es:[bp+di],ax     ;传到显存,以显示字符
        inc si
        add di,2
        loop s1
        add bp,160            ;显存下一行
        pop cx                ;显示完一行颜色字符串后,选取下一个颜色,再次循环显示字符串
        loop s0

        mov ax,4c00h
        int 21h

code ends

end start
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved