four 发表于 2016-1-15 15:06:47

书上的例题没有看懂,求教。大小写转换

</p>此程序在执行内层循环时是没有问题的,当循环到执行外层循环时,不是又进入了死循环了么?pop cx   此时cx是4,回到s0位置,把cx又入栈,之后cx再次改写为3,执行二维数组第二行的循环,之后执行第三行,之后应该永远执行下去,怎么可能会退出呢?   无论是用栈来存储cx的值,还是用寄存器来存储cx的值都应该是这样,原因就应该是cx不够用。。。是我哪里想错了么?</p>

求解答~~~~

因为在C语言中,
for(i= ;   ; i++)

        for(m=   ;   ; m++)
        {

        }

用while也是一样,可是双层的循环就是需要两个变量或更多的变量来同步进行移动。。。。

问题:将datasg段中的每个单词字母改为大写字母

assume cs:codesg,ds:datasg,ss:stacksg

datasg segment
       
        db 'ibm             '
        db 'dec             '
        db 'dos             '
        db 'vax             '
datasg ends

stacksg segment

        dw 0,0,0,0,0,0,0,0
stacksg ends

codesg segment

start:        mov ax,stacksg
                mov ss,ax
                mov sp,16
                mov ax,datasg
                mov ds,ax
                mov bx,0

                mov cx,4

        s0:        push cx
                mov si,0
                mov cx,3

        s:        mov al,
                and al,11011111b
                mov ,al
                inc si
                loop s

                add bx,16
                pop cx
                loop s0

                mov ax,4c00h
                int 21h

codesg ends

end start

four 发表于 2016-1-15 15:40:12

知道了,就是不明白为何每次pop之后会自动减一   难道cpu能识别了?{:10_261:}

four 发表于 2016-1-15 15:41:40

原来是执行顺序弄混了。。。。。pop之后遇loop

爱你没错 发表于 2016-1-16 11:04:45

先把cx=4入栈,然后进入内层循环,把cx赋上内层循环的值内存循环完成后把外层循环的数弹出栈,然后遇到loop指令就会将cx-1进行判断是否进行循环
页: [1]
查看完整版本: 书上的例题没有看懂,求教。大小写转换