원시 모드에서 문자를 읽는 프로그램이 있습니다. 즉, 입력 된 모든 문자는 버퍼링되는 대신 즉시 읽혀집니다.YASM 또는 NASM 어셈블리에서 백 스페이스 수행
백 스페이스 수행 방법을 알고 싶습니다. 즉, Backspace 키를 누르면 왼쪽의 문자가 삭제되고 커서가 한 곳 왼쪽으로 이동합니다.
공백 문자 뒤에 백 스페이스 문자를 출력 해 보았습니다. 이렇게하면 왼쪽에있는 문자가 삭제되지만 어떤 이유로 든 커서가 두 개의 공백을 두 칸 이동합니다.
나는 자체적으로 백스 페이스 문자를 출력 해 보았습니다. 그러면 커서가 한 칸 왼쪽으로 이동하지만 문자는 삭제되지 않습니다.
내 어셈블러는 YASM이고 64 비트 Linux를 사용하고 있습니다. 다음은 관련 코드입니다.
먼저, 여기에 내가 문자 출력에 사용하는 기능입니다 :
printchar:
mov [buf], al ; Backup whatever was in al.
; buf is declared as resb 1 in section .bss
mov edx, 1
mov ecx, buf
mov ebx, 1
mov eax, 4
int 0x80
mov al, [buf] ; restore char that was previously in al
ret
다음 코드는 백 스페이스를 인쇄합니다. 일반 백 스페이스처럼 커서를 한 곳 왼쪽으로 이동하지 않습니다.
mov al, 0x08 ; ASCII for Backspace
call printchar
이 코드는 백 스페이스 다음에 공백을 인쇄합니다. 커서를 단지 두 개가 아닌 오른쪽으로 두 칸 이동합니다.
mov al, 0x08 ; ASCII for Backspace
call printchar
mov al, 0x20 ; ASCII for Space
call printchar
Len은 백 스페이스를 인쇄하고 스페이스와 백 스페이스를 차례로 제안합니다.
mov al, 0x08 ; ASCII for Backspace
call printchar
mov al, 0x20 ; ASCII for Space
call printchar
mov al, 0x08 ; ASCII for Backspace
call printchar
내가 앞서 언급 한 바와 같이, 나는 원시 모드에서 문자를 읽어하고, 유의하시기 바랍니다 :이 작동하는 것 같다. 미리 감사드립니다!
좋아, 어떻게 그런 생각을하지 않을만큼 바보 같습니까 !! :) 고마워. 그런데 백 스페이스 뒤에 공백을 출력하면 왜 커서가 두 개가 아닌 공백으로 이동하게됩니까? 이것은 "실제"ASCII Backspace가 커서를 움직이지 않는다는 것을 의미합니까? – InvalidBrainException
@Terribad : 그건 아주 이상 해요! 나는 답을 말할 때 어떻게 든 그 단락을 훑어 보았다. 그러나 나의 유일한 생각은 어쩌면 어떤 다른 결과물이 그 과정을 어떻게 든 혼란스럽게 만들었다는 것이다. 내 제안 솔루션이 작동하지 않는 경우, 문제를 나타내는 코드를 제공 할 수 있다면 문제가 해결 될 때까지 해킹을 시도해 볼 수 있습니다. :) – Ashe
하지만 효과가 있습니다! 원래 코드를 몇 가지 코드로 업데이트합니다. – InvalidBrainException