使用x64 linux系统调用从键盘读取输入(程序集)
我正在尝试学习如何在汇编中使用linux 64位系统调用 我写了一些代码来读取键盘,然后简单地用按下的键将其打印在屏幕上:我使用的是sys_read 守则:使用x64 linux系统调用从键盘读取输入(程序集),linux,assembly,system-calls,Linux,Assembly,System Calls,我正在尝试学习如何在汇编中使用linux 64位系统调用 我写了一些代码来读取键盘,然后简单地用按下的键将其打印在屏幕上:我使用的是sys_read 守则: section .text global _start _start: ;write startmsg mov rax, 1 mov rdi, 1 mov rsi, startmsg mov rdx, sizestart syscall ;using sys_read mov ax, 0 mov rdi, 0 mov rsi, key
section .text
global _start
_start:
;write startmsg
mov rax, 1
mov rdi, 1
mov rsi, startmsg
mov rdx, sizestart
syscall
;using sys_read
mov ax, 0
mov rdi, 0
mov rsi, key
mov rdx, 2
syscall
;trying to see if esc is pressed then exit
mov rbx, 0x1b
cmp rbx, key
je _exit
_exit:
mov rax, 60
mov rdi, 0
syscall
section .bss
key resw 1
section .data
startmsg db 'Press a key', 10
sizestart equ $-startmsg
现在发生了两件事:
1) 它会自动在屏幕上打印按键(D:)
2) 当我按esc键时,它不会退出
它会自动在屏幕上打印按键
这是Linux中的默认设置(独立于编程语言):
- 键盘输入被打印到屏幕上
- 系统读取将等待,直到按下返回(回车)键
cmp bl,key
而不是:
cmp rbx,key