鱼C论坛

 找回密码
 立即注册
查看: 1939|回复: 1

[汇编作业] 实验11

[复制链接]
发表于 2019-2-23 15:30:04 | 显示全部楼层 |阅读模式

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

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

x
编写一个程序,将包含任意字符,以0结尾的字符串中的小写字母转变成大写字母
名称:letterc
功能:将以0结尾的字符串中的小写字母转变成大写字母
参数:ds:si指向字符串首地址
  1. assume cs:codesg

  2. datasg segment
  3.                 db "Beginner's All-purpose Symbolic Instruction Code.", 0
  4. datasg ends

  5. codesg segment
  6. begin:
  7.                 mov ax, datasg
  8.                 mov ds, ax
  9.                 mov si, 0
  10.                 call letterc
  11.                
  12.                 mov ax, 4c00h
  13.                 int 21h
  14.                
  15. letterc:
  16.                 mov cx, 0
  17.                 mov cl, byte ptr ds:[si]  ;把ds:[si]中的数据传给cl数据库中定位的是db所以按照字节传送
  18.                 cmp cl, 64      ;ACII码表上的10进位64是@
  19.                 ja one_1                ;大于并且不等于,限定跳转的范围,只有ASCII码64以后的才会产生跳转
  20.                
  21.                 jcxz end_1            ;如果ds:[si]中传给cx的是0那么此程序结束跳转到最后ret
  22. ok:               
  23.                 inc si
  24.                 jmp short letterc
  25. one_1:
  26.                 and cl, 11011111b ;转换cl中的数据用and 1和1转换等于1 0和1转换等于0 0和0等于0
  27.                 mov byte ptr ds:[si], cl   ;把cl中的数据再次传给数据段datasg中替换掉小写字母
  28.                 jmp short ok
  29. end_1:
  30.                 ret
  31.                
  32.                
  33. codesg ends
  34. end begin
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-8-20 11:51:00 | 显示全部楼层
lz的代码第19行和29行masm编译器不认吧,前面已经有一个cl限定了是八位的数据了,就不用再加一个byte ptr了?
然后letterc段定位的时候要有个上限比较好吧,ASCII码里在小写字母之后可还有东西吧。
and。。。。si默认段地址在ds中。。。。。也不用?
不知道说的对不对哦,可能可以更精简一些呢~~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-4-25 06:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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