You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 17:02:18