如何获取int 0x16输入结果并存入变量?附现有汇编代码
解决方案
要获取输入内容并存入变量,你需要在代码中添加缓冲区存储逻辑——定义一块内存区域保存输入字符,同时用索引跟踪当前写入位置。以下是修改后的完整实现:
1. 定义数据段变量
首先在数据段声明用于存储输入的缓冲区,以及记录写入位置的索引:
section .data input_buffer db 64 dup(0) ; 64字节的缓冲区,初始化为0,足够存储短输入 buffer_index db 0 ; 记录缓冲区当前的写入位置(初始为0)
2. 修改输入函数逻辑
调整原代码,在读取到非回车字符时将其存入缓冲区,回车时给字符串添加结束符后返回:
input: mov ah, 0x00 int 0x16 ; 调用BIOS中断读取键盘输入,al=ASCII字符,ah=扫描码 cmp al, 0x0d ; 判断是否按下回车键(ASCII码0x0d) je enter_press ; 非回车字符:存入缓冲区 mov bx, 0 mov bl, [buffer_index] ; 取出当前缓冲区的写入索引 mov [input_buffer + bx], al ; 将读取到的字符存入缓冲区对应位置 inc byte [buffer_index] ; 索引自增,准备存储下一个字符 ; 可选:防止缓冲区溢出(最多存63个字符,留1位给结束符) cmp bl, 63 jle enter_not_press ; 未溢出则继续等待输入 je enter_press ; 溢出则直接结束输入 enter_not_press: jmp input enter_press: ; 在输入末尾添加ASCII空字符(0),方便后续字符串处理(如打印) mov bx, 0 mov bl, [buffer_index] mov [input_buffer + bx], byte 0 ret
关键说明
input_buffer是用来存放输入字符的内存块,大小可根据需求调整buffer_index跟踪当前写入的位置,确保每个新字符存在正确的位置- 回车时添加空字符是为了符合C风格字符串的标准,后续如果要打印或处理这个输入,能正确识别字符串结尾
- 溢出判断是可选但推荐的,避免越界写入导致内存错误
内容的提问来源于stack exchange,提问作者Federico Occhiochiuso
相关产品推荐
相关产品推荐

