鱼C论坛

 找回密码
 立即注册
查看: 2078|回复: 3

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

[复制链接]
发表于 2016-1-15 15:06:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
</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,[bx+si]
                and al,11011111b
                mov [bx+si],al
                inc si
                loop s

                add bx,16
                pop cx
                loop s0

                mov ax,4c00h
                int 21h

codesg ends

end start
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-1-15 15:40:12 | 显示全部楼层
知道了  ,就是不明白  为何每次pop之后会自动减一   难道cpu能识别了?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-1-15 15:41:40 | 显示全部楼层
原来是执行顺序弄混了。。。。。pop之后遇loop
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-1-16 11:04:45 | 显示全部楼层
先把cx=4入栈,然后进入内层循环,把cx赋上内层循环的值内存循环完成后把外层循环的数弹出栈,然后遇到loop指令就会将cx-1进行判断是否进行循环
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-6 18:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表