对键盘输入的小写字母用大写字母显示出来

本文介绍了一个简单的汇编语言程序,该程序可以接收键盘输入的小写字母,并将其转换为大写字母显示出来。程序使用INT 21H中断来获取键盘输入和屏幕输出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

;对键盘输入的小写字母用大写字母显示出来
DATA SEGMENT 
CRLF DB 0AH,0DH,'$'  ;换行
MESSAGE DB "CONTINUE(C) OR QUIT(Q)?",0AH,0DH,'$'  ;0AH 换行 ODH 空格 24H '$'
DATA ENDS

STACK SEGMENT PARA STACK
          DW 128 DUP(?)
TOP   LABEL WORD
STACK ENDS

CODE SEGMENT
          ASSUME CS:CODE,SS:STACK,DS:DATA
MAIN PROC FAR
START:
         MOV AX,DATA
MOV DS,AX
 
MOV AX,STACK
MOV SS,AX
LEA SP,TOP
 
L1: MOV AH,1    ;INT 21H的1号功能是获得键盘输入并放在AL中
INT 21H
 
PUSH AX     ;保护键盘输入
 
MOV AH,9
LEA DX,CRLF
INT 21H
 
MOV AH,2
POP DX
SUB DL,20H   ;将小写字母转化为大写字母 ASCII码相差20H
INT 21H
 
MOV AH,9
LEA DX,CRLF
INT 21H
 
MOV AH,9
LEA DX,MESSAGE
INT 21H
 
MOV AH,1
INT 21H
PUSH AX
 
MOV AH,9
LEA DX,CRLF
INT 21H
 
POP DX
CMP DL,'C'
JE  L1
 
MOV AH,4CH
INT 21H
CODE ENDS 
MAIN ENDP
         END START
 
 
### 实现从键盘输入小写字母并转换为大写的汇编程序 下面是一个简单的汇编语言程序示例,该程序实现了从键盘读取一个小写字母,并将其转换为对应的大写字母显示来。此程序基于 x86 架构下的 NASM 汇编器编写。 #### 程序说明 在 ASCII 编码表中,字母 'a' 到 'z' 的范围是从 97 到 122,而 'A' 到 'Z' 是从 65 到 90。通过将字符的 ASCII 值减去 32 可以完成从小写到大写的转换[^1]。 以下是完整的汇编代码: ```asm section .data prompt db "Enter a lowercase letter: ", 0 result db "The uppercase letter is: ", 0 section .bss input resb 1 ; Reserve space for user input section .text global _start _start: ; Display prompt message mov eax, 4 ; sys_write system call number mov ebx, 1 ; file descriptor 1 (stdout) mov ecx, prompt ; address of the message to write mov edx, 22 ; length of the message int 0x80 ; invoke operating system interrupt ; Read character from keyboard mov eax, 3 ; sys_read system call number mov ebx, 0 ; file descriptor 0 (stdin) mov ecx, input ; location where data will be stored mov edx, 2 ; maximum number of bytes to read int 0x80 ; invoke operating system interrupt ; Convert lowercase to uppercase by subtracting 32 mov al, [input] ; load the first byte into AL register sub al, 32 ; subtract 32 to convert it to uppercase mov [input], al ; store back the converted value ; Display result message mov eax, 4 ; sys_write system call number mov ebx, 1 ; file descriptor 1 (stdout) mov ecx, result ; address of the message to write mov edx, 22 ; length of the message int 0x80 ; invoke operating system interrupt ; Display the converted character mov eax, 4 ; sys_write system call number mov ebx, 1 ; file descriptor 1 (stdout) mov ecx, input ; address of the converted character mov edx, 1 ; only one byte to display int 0x80 ; invoke operating system interrupt ; Exit program gracefully mov eax, 1 ; sys_exit system call number xor ebx, ebx ; exit code 0 int 0x80 ; invoke operating system interrupt ``` #### 关键点解释 - **sys_write 和 sys_read**: 这些是 Linux 下的标准系统调用,分别用于向标准输打印数据和从标准输入读取数据。 - **AL 寄存器操作**: 使用 `sub` 指令来修改寄存器中的值,从而实现大小写的转换。 - **ASCII 转换逻辑**: 小写字母大写字母之间的差值固定为 32,在二进制表示下仅需改变第 5 位即可完成转换。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值