风轻云淡_1/10 发表于 2013-3-13 15:24:31

一段转换字符大小写的代码问题!

我是按照王爽老师的书的实验11:
要求:
子程序名称:letterc
功能:将以0结尾的字符串中的小写转换为大写,
参数:ds:si指向字符串的首地址

我写的源码自己加了一个zhan(栈的意思)段设置为栈data是书中的,还有子程序letterc前面的也是书中写的
代码具体如下:

assume cs:code
data segment
       db "Beginner's All-purpose Symbolic Instruction Code.",0
data ends

zhan segment
dw 5 dup (0)
zhan ends

code segment
start: mov ax,zhan
         mov ss,ax
         mov sp,10

         mov ax,data
         mov ds,ax
         mov si,0
         call letterc

         mov ax,4c00h
         int 21h
letterc:
         mov al,61h
         cmp al,byte ptr ds: ;小于61无需转换,因为字母a的ASCII的16进制等于61
         ja sss      ;无需转换的字符则跳转

         mov al,7ah
         cmp al,byte ptr ds: ;大于7a无需转换,因为字母z的ASCII的16进制等于7a
         jb sss      ;无需转换的字符则跳转

         mov al,ds:    ;若未实现跳转则说明需要进行转换
         and al,11101111b
         mov ds:,al

sss:   inc si      ;指向字符串的寄存器(指针)自增1,指向下一个字节

         mov ch,0    ;将下一个字节的值赋值到CX,用于判断是否为0
         mov cl,ds:

         loop letterc

         ret
code ends
end start

问题在于,用debug运行后参数g为什么会出错?
提示:CPU遇到无效指令,而且CS=0了,
还有就是用参数t单步执行,当si等于n了,我查看内存时,n前面的字母还和原来一样未实行转换
是不是上面的cmp指令下面的跳转用错了还是?

页: [1]
查看完整版本: 一段转换字符大小写的代码问题!