鱼C论坛

 找回密码
 立即注册
查看: 1396|回复: 0

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

[复制链接]
发表于 2013-3-13 15:24:31 | 显示全部楼层 |阅读模式

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

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

x
我是按照王爽老师的书的实验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:[si] ;小于61无需转换,因为字母a的ASCII的16进制等于61
         ja sss      ;无需转换的字符则跳转
  
         mov al,7ah
         cmp al,byte ptr ds:[si] ;大于7a无需转换,因为字母z的ASCII的16进制等于7a
         jb sss      ;无需转换的字符则跳转

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

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

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

         loop letterc

         ret
code ends
end start

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

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-17 22:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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