书上的例题没有看懂,求教。大小写转换
</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 知道了,就是不明白为何每次pop之后会自动减一 难道cpu能识别了?{:10_261:} 原来是执行顺序弄混了。。。。。pop之后遇loop 先把cx=4入栈,然后进入内层循环,把cx赋上内层循环的值内存循环完成后把外层循环的数弹出栈,然后遇到loop指令就会将cx-1进行判断是否进行循环
页:
[1]