王晓博 2010.05.15-2 汇编 大小写转换
作者:2008级嵌入式 王晓博
#将下面汇编代码保存为 wxb2.s 文件
#功能:将输入的字符串中的小写字母转换为大写,然后输出
.section .bss
.equ len,256
.lcomm buffer,len #.lcomm是在本地内存区域中声明固定长度的未初始化数据,
#这里初始化了256个字节的空间
.section .text
.globl _start
_start:
movl $buffer, %ecx
movl $256, %edx
movl $0, %ebx
mov $3,%eax #3号调用
int $0x80
movl $buffer,%ecx
xor %eax,%eax
jmp ts
up:
incl %eax
ts:
cmpl $len,%eax
jge done
cmpb $97,(%ecx,%eax,1) #如果数小于了小写字母a的ASCII就quit
jl jtbup
cmpb $122,(%ecx,%eax,1) #如果大于w了就也同样quit
jg jtbup
subl $32,(%ecx,%eax,1) #符合的进行转化
jtbup:
jmp up
done:
movl $buffer, %ecx
mov $256,%edx
movl $1, %ebx
mov $4,%eax #4号调用
int $0x80
movl $0, %ebx #quit
mov $1,%eax
int $0x80
[root@localhost ~]# as wxb2.s -o wxb2.o
[root@localhost ~]# ld wxb2.o -lc -dynamic-linker /lib/ld-linux.so.2 -o wxb2
[root@localhost ~]# ./wxb2
asdf
ASDF
[root@localhost ~]# ./wxb2
ADF asdf ASDdsf
ADF ASDF ASDDSF
[root@localhost ~]#
#将下面汇编代码保存为 wxb2.s 文件
#功能:将输入的字符串中的小写字母转换为大写,然后输出
.section .bss
.equ len,256
.lcomm buffer,len #.lcomm是在本地内存区域中声明固定长度的未初始化数据,
#这里初始化了256个字节的空间
.section .text
.globl _start
_start:
movl $buffer, %ecx
movl $256, %edx
movl $0, %ebx
mov $3,%eax #3号调用
int $0x80
movl $buffer,%ecx
xor %eax,%eax
jmp ts
up:
incl %eax
ts:
cmpl $len,%eax
jge done
cmpb $97,(%ecx,%eax,1) #如果数小于了小写字母a的ASCII就quit
jl jtbup
cmpb $122,(%ecx,%eax,1) #如果大于w了就也同样quit
jg jtbup
subl $32,(%ecx,%eax,1) #符合的进行转化
jtbup:
jmp up
done:
movl $buffer, %ecx
mov $256,%edx
movl $1, %ebx
mov $4,%eax #4号调用
int $0x80
movl $0, %ebx #quit
mov $1,%eax
int $0x80
[root@localhost ~]# as wxb2.s -o wxb2.o
[root@localhost ~]# ld wxb2.o -lc -dynamic-linker /lib/ld-linux.so.2 -o wxb2
[root@localhost ~]# ./wxb2
asdf
ASDF
[root@localhost ~]# ./wxb2
ADF asdf ASDdsf
ADF ASDF ASDDSF
[root@localhost ~]#