当前位置: 代码迷 >> 汇编语言 >> 有个程序未调试出,请高手帮忙!(多谢先)
  详细解决方案

有个程序未调试出,请高手帮忙!(多谢先)

热度:3466   发布时间:2013-02-26 00:00:00.0
有个程序未调试出,请高手帮忙!(谢谢先)
;这是小写转大写的程序
assume   cs:code
;--------数据部分--------------
data   segment
db   'word ',0
db   'unix ',0
db   'wind ',0
db   'good ',0
data   ends
;------------------------------

code   segment
start:
mov   ax,data
mov   ds,ax
mov   bx,0
mov   cx,4
;-------循环转换每个字符串----
s:
mov   si,bx
call   capital
add   bx,5
loop   s
;-------------------------
mov   ax,4c00h
int   21h
;--------------------------------------------------
;小-> 大转换过程
capital:
mov   cl,[si]
mov   ch,0
jcxz   ok
and   byte   ptr   [si],11011111b     ;转换语句
inc   si
jmp   short   capital
ok:
ret
;--------------------------------------------------
code   ends
end   start

------解决方案--------------------------------------------------------
看不太懂,中间的S循环能跳出来吗?会不会访问溢出啊
------解决方案--------------------------------------------------------
我也菜,看不太懂。进入S循环前,si=-1;然后进去调用capital,执行mov cl,[si],就是mov cl,[-1].这给cl赋的是什么值啊?因为我不清楚这时候cl的值,所以也搞不清紧跟的jcxz ok到底会不会跳
------解决方案--------------------------------------------------------
你的第一个程序没有保存CX的值

push cx ;加上

call capital

pop cx ;加上
------解决方案--------------------------------------------------------
data segment
quit db "your put wrong num press any key to exit...... ",13,10, '$ '
data ends
extra segment
max db 'z '
min db 'a '
extra ends
code segment
assume cs:code,ds:data,es:extra
start:
input:
mov ax,data
mov ds,ax
mov ax,extra
mov es,ax
mov ah,01h
int 21h
;mov ax, 'd '
lea di,min
scas min
jb exit
ja judgez

exit: mov ah,9
lea dx,quit
int 21h

judgez:
lea di,max
scas max
ja exit
jb amend
amend:
sub al,20h
mov dx,ax
mov ah,2h
int 21h
mov ah,4ch
int 21h
code ends
end start
  相关解决方案