Проблема
Обнаружение вопроса ASM Замена скан-кодов символами ASCII и использование его ответа (немного изменен для обработки специальных символов не как ASCII, а для перемещения определенного значения в буфер). Мне удалось получить отдельные символы с клавиатуры, как Можно ли объединить в одну полную строку?
Попытка
Процедура # 1 в следующем разделе работает и правильно выводит ввод, пока он не перехватит нажатие клавиши Enter
Но когда stosb
добавляется , он прекращает это делать (процедура # 2) даже до вывода первого символа
# 1
gets:
.repeat:
call keyboard
cmp byte[switch], 0x020 ; buffer named above being checked for Enter value
je .end
jmp .repeat
.end:
ret
# 2
gets_modified:
mov di, buffer
.repeat:
call keyboard
cmp byte[switch], 0x020 ; buffer named above being checked for Enter value
stosb
je .end
jmp .repeat
.end:
ret
Ожидаемый результат: Строка в буфере
Фактический результат: Нет
EDIT:
Процедура клавиатура запрашивается в комментариях
keydown: db 0x1E, 'a',0x30, 'b',0x2E, 'c',0x20, 'd',0x12, 'e',0x21, 'f',0x22, 'g',0x23, 'h',0x17, 'i',0x24, 'j',0x25, 'k',0x26, 'l',0x32, 'm',0x31, 'n',0x18, 'o',0x19, 'p',0x10, 'q',0x13, 'r',0x1F, 's',0x14, 't',0x16, 'u',0x2F, 'v',0x11, 'w',0x2D, 'x',0x15, 'y',0x2C, 'z',0x0B, '0',0x02, '1',0x03, '2',0x04, '3',0x05, '4',0x06, '5',0x07, '6',0x08, '7',0x09, '8',0x0A, '9',0x29, '~',0x0C, '-',0x0D, '=',0x2B, '\',0x1A, '[',0x1B, ']',0x27, '\59',0x28, '\39',0x33, ',',0x34, '.',0x35, '/'
keyup: db 0x9E, 'a', 0xB0, 'b', 0xAE, 'c', 0xA0, 'd', 0x92, 'e', 0xA1, 'f', 0xA2, 'g', 0xA3, 'h', 0x97, 'i', 0xA4, 'j', 0xA5, 'k', 0xA6, 'l', 0xB2, 'm', 0xB1, 'n', 0x98, 'o', 0x99, 'p', 0x90, 'q', 0x93, 'r', 0x9F, 's', 0x94, 't', 0x96, 'u', 0xAF, 'v', 0x91, 'w', 0xAD, 'x', 0x95, 'y', 0xAC, 'z', 0x8B, '0', 0x82, '1', 0x83, '2', 0x84, '3', 0x85, '4', 0x86, '5', 0x87, '6', 0x88, '7', 0x89, '8', 0x8A, '9', 0x89, '~', 0x8C, '-', 0x82, '=', 0xAB, '\', 0x9A, '[', 0x9B, ']', 0xA7, '\59', 0xA8, '\39', 0xB3, ',', 0xB4, '.', 0xB5, '/'
switch: db 0
keyboard:
cli
in al, 0x64
test al, 1
jz return
test al, 0x20
jnz return
in al, 0x60
cmp cl, 0
je keypress
jmp keyrelease
keyrelease:
mov cl, 0
sti
ret
keypress:
mov cl, 1
cmp al, 1Ch
je .ent
call convert
mov ah, 0x0E
int 0x10
jmp .end
.ent:
mov byte[switch], 0x020
.end:
sti
ret
convert:
mov bx, 0
.LOOP:
cmp al, [keydown+bx]
je .conv
add bx, 2
jmp .LOOP
.conv:
mov al, [keydown+bx+1]
ret
return:
ret
В основном он был скопирован, но, похоже, имеет правильное значение и вряд ли является причиной проблемы