有个程序未调试出,请高手帮忙!(谢谢先)
;这是小写转大写的程序
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