汇编语言——键盘输入字符

程序目的:从键盘上键入字符,并将该字符加1再输出


程序代码:

D_SEG SEGMENT
	CHAR1 DB 1 DUP(0)	;定义字符
D_SEG ENDS

C_SEG SEGMENT
	
	ASSUME CS:C_SEG	, DS:D_SEG	;定义CS,DS,入口
	
	START : MOV AX ,0B800H
			MOV ES ,AX			;将显存地址0B800H赋值给ES
			MOV AX ,D_SEG		;获取D_SEG的地址
			MOV DS ,AX			;将D_SEG的地址赋值给DS
			LEA SI ,CHAR1		;将CHAR1的地址赋值给SI
			
			MOV AH ,1			;01号功能为输入一个字符并且显示
			INT 21H
			MOV [DI],AL			;输入的字符存放在AL寄存器中,现(DS:[DI])=(AL)
			
			MOV AL,[DI]			;(AL)=(DS:[DI])
			ADD AL,1			;(AL)=(AL)+1
			MOV AH,0CH			;设置字体格式
			
			INC SI
			INC SI
			INC SI
			INC SI				;指向显存的下4个单元
			MOV ES:[SI],AX		;在显存中输出
			
			MOV AX,4C00H
			INT 21H
C_SEG ENDS
END START
			

运行结果:


  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
汇编语言中,字符输入通常需要使用系统调用来实现。不同的操作系统提供的系统调用可能不同,下面以Linux操作系统为例,介绍一种实现字符输入的方法。 在Linux系统中,字符输入通常使用系统调用read实现。read系统调用的参数包括文件描述符,读取的缓冲区地址和大小。对于标准输入设备(例如键盘),文件描述符为0。因此,我们可以通过以下汇编代码实现从键盘读取字符串: ``` section .data buffer db 100 ; 缓冲区大小为100字节 section .bss len resb 1 ; 存储读取的字符串长度 section .text global _start _start: ; 从标准输入设备读取字符串 mov eax, 3 ; 系统调用号为3,即read mov ebx, 0 ; 文件描述符为0,即标准输入设备 mov ecx, buffer ; 缓冲区地址 mov edx, 100 ; 缓冲区大小 int 0x80 ; 执行系统调用 ; 计算读取的字符串长度 mov esi, buffer ; 将缓冲区地址存入esi寄存器 xor ecx, ecx ; 将ecx寄存器清零 loop: cmp byte [esi+ecx], 0 ; 比较esi寄存器指向的地址处是否为0 je done ; 如果是,则跳转到done标签 inc ecx ; 将ecx寄存器加1 jmp loop ; 跳转到loop标签 done: mov [len], cl ; 将ecx寄存器的值存储到len变量中 ; 其他操作 ; ... ``` 上面的代码定义了一个100字节大小的缓冲区buffer和一个用于存储字符串长度的变量len。在_start标签处,我们使用read系统调用从标准输入设备读取字符串,并将其存储在buffer中。然后,我们使用一个循环计算读取的字符串长度,将其存储在len变量中。在计算字符串长度时,我们使用了一个类似于C语言中的指针操作——将缓冲区地址存入esi寄存器,然后使用[esi+ecx]的方式访问缓冲区中的每个字符。 需要注意的是,上面的代码仅为示例,实际应用中可能需要添加一些异常处理逻辑,例如输入不合法或输入超出缓冲区大小等情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值