专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > 汇编语言

一个死循环有关问题

发布时间:2010-06-14 15:51:58 文章来源:www.iduyao.cn 采编人员:星星草
一个死循环问题
什么原因造成内循环才刚循环一次还没完,到了loop s1的时候cx突然变成F?
Assembly code
assume cs:codesg,ds:datasg
datasg segment
    db 'welcome to masm!'
    db 02h,24h,71h
datasg ends
stack segment
    dw 8 dup(0)
stack ends
codesg segment

start:mov ax,datasg
    mov ds,ax                
    mov ax,stack
    mov ss,ax                
    mov sp,10h
    mov ax,0b8720h              
    mov es,ax                 
    mov bx,0                 
    mov si,0
    mov di,1     
    mov bp,10h
    mov cx,3   
s:  push cx      
    mov cx,10h   
s1: mov ah,ds:[bx]          
    mov es:[si],al      
    mov al,ds:10[bp]
    mov ds:[di],al
    inc bx    
    inc bp
    add si,2
    add di,2
    loop s1  
    add bx,10h 
    pop cx   
    loop s  
    add ax,4c00h
    int 21h
codesg ends
end start
    
    


------解决方案--------------------
楼主明显错误:

1:
mov ax,0b8720h

2:
 add ax,4c00h

附上以前做过的,仅供楼主参考。
Assembly code
  
1 assume    cs:code,ds:data 
  2 data    segment 
  3         db      'welcome to masm!' 
  4         db      02h,24h,71h 
  5 data    ends 
  6 code    segment 
  7 start: 
  8         mov ax,data                ;指定数据段DS 
  9         mov ds,ax 
 10         mov ax,0b800h              ;显示区域为附加段ES 
 11         mov es,ax 
 12         mov di,780h                ;ES:DI起始行 
 13         mov bx,10h                 ;颜色属性,地址为:DS:[BX] 
 14         mov cx,3                   ;3个颜色 
 15 a:                                 ;外循环对3中颜色循环, 依次是02,24h,71h 
 16         push cx                    ;由于内循环要用到cx,故保存 
 17         push di                    ;保存初始行 
 18         mov si,0                   :字符首地址ds:si 
 19         mov cx,16                  ;内循环开始,依次遍历16个字符 
 20 b:      mov al,[si]                ;将asacii放入al 
 21         mov ah,[bx]                ;将属性放入ah 
 22         mov es:[di+40h],ax         ;显示 
 23         inc si                     ;指向下一个字符 
 24         add di,2                   ;指向下一个显示位置 
 25         loop b                     ;如cx=0,则内循环结束 
 26         pop di                     ;第一次循环结束,恢复初始行的值 
 27         pop cx                     ;恢复cx 
 28         inc bx                     ;ds:[bx+1],指向下一个属性 
 29         add di,0a0h                ;第二行 
 30         loop a                     ;外循环,如3个属性遍历完毕则跳出循环 
 31 
 32         mov ah,4ch 
 33         int 21h 
 34 code    ends 
 35 end     start
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: