x86汇编语言读取键盘输入学习

使用DOS int 21h;

1 功能号 01h

读取一个字符,回显到屏幕,结果在 AL 中;

运行之前如下,

运行之后,

输入m,仿真屏幕显示了m,AL寄存器中存入6D;

2 字符串输入到缓冲区

功能号 0Ah:读取一行字符串,存入指定缓冲区;

先运行如下的指令,

显示了一个错误:不匹配,16比特的寄存器和8比特的地址;那把mov dx改为lea dx;

执行如下的代码;运行之前如下,

根据资料,

buffer db 80, 0, 80 dup(0) ; 最大80字符,首字节为最大长度,第二字节为实际长度

定义了缓冲区,名为buffer;头2个字节存的是长度;其他字节现在是0;

但是好像80变为了205,不知道为啥;

运行,输入7个字符;

仿真屏幕显示了7个字符;

定义的缓冲区也存入了7个字符;0D应该是结束标志;

缓冲区的第二个字节现在是7,实际长度;

cpp 复制代码
.data
    buffer db 80, 0, 80 dup(0)  ; 

.code
main proc
  mov ah, 0Ah
  lea dx, buffer
  int 21h

main endp
end main

3 不带回显输入

通常用于输入密码;

功能号 08h:读取字符但不显示;

运行代码,键盘输入m,仿真屏幕不会显示,AL寄存器变为6D;

相关推荐
Logic1014 个月前
深入理解C语言if语句的汇编实现原理:从条件判断到底层跳转
c语言·汇编语言·逆向工程·底层原理·条件跳转·编译器原理·x86汇编