关于汇编的基本小程序——将输入字符串中的小写字母转换成大写字母并输出

;将输入字符串中的小写字母转换成大写字母
	.model small
	.stack
	.data
strShow DB 'Please input string:$'
strInput DB 0ffh,0,0ffh dup(0)	;定义缓存字符串的区域
strAH 	DB 0dh,0ah,'$' 		;定义回车换行
	.code
	.startup
	mov dx,offset strShow
	mov ah,9
	int 21h
	mov dx,offset strInput
	mov ah,0ah
	int 21h
	mov si,dx
	mov dx,offset strAH
	mov ah,9
	int 21h
	cld
	mov al,[si+1]
	mov ah,0
	mov cx,ax
	cmp cx,0	;判断是否是空串
	je inLast
	inc si
	inc si
outStr: lodsb		
	cmp al,'a'
	jnc MayH
normalS:mov dl,al
	mov ah,02h	;输出字符
	int 21h
	loop outStr
	jmp inLast
MayH:	cmp al,'z'
	jnc normalS
	sub al,32
	jmp normalS
inLast: mov ah,1	;停顿
	int 21h
	.exit 0
	end


这个是关于字符串输入和输出的

需要注意的知识点是:21中断中的01、02、09、0a中断的使用,然后就是缓存字符串的定义,最后就是跳转指令

对于缓存字符串,第一个参数定义最大字符数,第二个定义为实际输入数,第三个为开始输入的字符串

注意获取实际输入字符串的操作,该程序通过ax间接获取的

汇编语言中,处理字符大小写转换通常需要结合ASCII码来操作,因为每个字母在ASCII表中有其固定的数值。以下是使用x86汇编语言(如Intel x86体系结构)的一个简单示例,假设输入小写字母存储在内存中的某个位置,我们将逐个字符地将其转换为大写: ```assembly section .data input db 'hello',0 ; 小写字母字符串 output times 5 db 0 ; 输出的大写字符串,预设为全0 section .text global _start _start: mov ecx, 5 ; 字符串长度 mov esi, input ; 输入字符串地址 mov edi, output ; 输出字符串地址 convert_loop: lodsb ; 从输入读取一个字节(字符) cmp al, 'a' ; 判断是否小于'a' jl not_lowercase ; 如果不是小写,则无需转换 sub al, 32 ; 转换为大写,减去'a' - 'A'的差值(ASCII码差值) not_lowercase: stosb ; 将转换后的字节存回输出 loop convert_loop ; 循环处理直到所有字符完成 ; 结束程序 mov eax, 1 ; 系统调用编号(exit) xor ebx, ebx ; 返回码 int 0x80 ; 执行系统调用 ; 这是一个简化的版本,实际应用中可能还需要处理边界情况、空格等非字母字符,可能需要使用中断服务子程序(ISR)来实现循环 ``` 请注意,这个例子仅适用于基于ASCII编码的情况,如果处理Unicode或其他复杂编码,代码会更复杂。同时,现代操作系统可能会提供特定的库函数或API来简化这种转换,而不是直接在汇编层面处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值