小写转大写

小写字母的ASCII码值在0x61~0x7A之间,

大写字母的ASCII码值在0x41~0x5A之间

小写字母的ASCII值减去0x20就是大写字母的值

 

汇编源码如下

====toupper.asm====

segment .text
 global ToUpper

ToUpper:
 push ebp
 mov ebp,esp
 mov eax,[ebp+8]
 mov ecx,[ebp+12]
 mov esi,eax
 mov edi,eax
 xor eax,eax
 cld
loopme:
 lodsb
 cmp al,60h
 jng isupper
 sub al,20h 
isupper:
 stosb
 loop loopme
 pop ebp
 ret

========main.c======

#include<stdio.h>

void ToUpper(char *buf,int len);

int main()
{
 char buf[]="This is a demo.";
 printf("%s/n",buf);
 ToUpper(buf,strlen(buf));
 printf("%s/n",buf);
 return 0;
}
=====build.bat=======

nasm -f coff toupper.asm --prefix _
gcc main.c toupper.o -o main.exe
if exist toupper.o del toupper.o
if exist main.o del main.o

====================

运行结果如下

This is a demo.
THIS IS A DEMO.

====================

在toupper.asm中用到了lodsb和stosb

lodab等价于mov al,[esi]

                  add/sub esi,1

stosb等价于mov [edi],al

                  add/sub edi,1

注:在使用他们时不要忘了执行CLD,清除DF标志位

==========================

类似lodsb的还有lodsw,lodsd

类似stosb的还有stosw,stosd

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值