. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->转移指令的原理
主题 : :  实验九   这个程序怎么优化  [已解决] 回复[ 10次 ]   点击[ 488次 ]  
12345678911
[帖 主] [ 发表时间:2012-07-16 16:15 ] 
荣誉值:0
信誉值:0
注册日期:2011-08-26 20:17
assume cs:code,ds:data,ss:stack    
data segment           
db 'welcome to masm!'  ;定义要显示的字符串(共16字节)          
db 02h,24h,71h         ;定义三种颜色属性  
 data ends      
stack segment           
dw 8 dup(0)   
stack ends    
code segment   
start:   mov ax,data          
         mov ds,ax         
         mov ax,stack          
         mov ss,ax          
         mov sp,10h           
         xor bx,bx           ;bx清零,用来索引颜色          
         mov ax,0b872h       ;算出屏幕第12行中间的显存的段起始位置放入ax中                   
         mov cx,3            ;S3循环控制行数,外循环为3次,因为要显示三个字符串  
 s3:     push cx             ;三个进栈操作为外循环s3保存相关寄存器的值          
         push ax             ;以防止它们的值在内循环中被破坏         
         push bx                    
         mov es,ax           ;此时es为屏幕第12行中间的显存的段起始位置                    
         mov si,0            ;si用来索引代码列的字符         
         mov di,0            ;di用来定位目标列           
         mov cx,10h          ;S1循环控制存放的字符,内循环为10h次,因为一个字符串中含10h个字节  
 s1:     mov al,ds:[si]         
         mov es:[di],al          
         inc si         
         add di,2          
         loop s1                 ;此循环实现偶地址中存放字符                    
         mov di,1                ;di的值设为1,从而为在显存奇地址中存放字符的颜色属性做准备         
         pop bx                            
         mov al,ds:10h[bx]       ;取颜色属性          
         inc bx                              
         mov cx,10h              ;第二个内循环也为10h次  
 s2:     mov es:[di],al          
         add di,2          
         loop s2                 ;此循环实现奇地址中存放字符的颜色属性                    
;以下4句为下一趟外循环做准备          
        pop ax          
       add ax,0ah              ;将显存的段起始地址设为当前行的下一行                                  
                               ;[在段地址中加0ah,相当于在偏移地址中加了0a0h(=160d)]          
       pop cx         
       loop s3                     
       mov ax,4c00h         
       int 21h   
code ends  
 end start
12345678911
[第6楼] [ 回复时间:2012-07-19 14:12 ] 
荣誉值:0
信誉值:0
注册日期:2011-08-26 20:17
welcome to masm!
         welcome to masm!
                 welcome to masm!
我编译了成这样
但是把add di,144改为add di,128就好了
为什么
此问题已结贴!
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved