首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

一个死循环有关问题

2012-02-12 
一个死循环问题什么原因造成内循环才刚循环一次还没完,到了loop s1的时候cx突然变成F?Assembly codeassume

一个死循环问题
什么原因造成内循环才刚循环一次还没完,到了loop s1的时候cx突然变成F?

Assembly code
assume cs:codesg,ds:datasgdatasg segment    db 'welcome to masm!'    db 02h,24h,71hdatasg endsstack segment    dw 8 dup(0)stack endscodesg segmentstart: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 21hcodesg endsend 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 

热点排行