Подмена вывода - Assembler

Узнай цену своей работы

Формулировка задачи:

model tiny
jumps                   ; для генерации <длинных> переходов 
segm segment para public 'code' 
assume cs:segm,ds:segm 
org 100h 
 
start:  MOV AH, 1       ;АН = 1
        INT 21h     ;вызываем функцию DOS 01h
        CMP ah, 11h ;если AL = 21h, то была нажата клавиша w
        JZ  fTxt    ;тогда переходим к метке w
        JMP btnTxt      ;иначе переходим к метке btnTxt
        ;CMP AH, 2Eh ;если AL = 2Eh, то была нажата клавиша c
        ;JZ  cTxt       ;тогда переходим к метке c
        ;JMP btnTxt     ;иначе переходим к метке btnTxt
        ;CMP AH, 11h    ;если AL = 11h, то была нажата клавиша w
        ;JZ  wtxt       ;тогда переходим к метке w
        ;JMP btnTxt     ;иначе переходим к метке btnTxt        
btnTxt: MOV bx, offset btn
        JMP OutTxt      ;переход к метке OutTxt
fTxt:   MOV bx, offset STR_F
        JMP OutTxt
wTxt:   MOV bx, offset STR_W
        JMP OutTxt  
cTxt:   MOV bx, offset STR_C
        JMP OutTxt
OutTxt: MOV ah, 09h     ;выводим сообщение о нажатой клавише          
        MOV dx, bx
        INT 21h       
btnEsc: RET         ;завершение программы
 
STR_C DB 'cprintf $'
STR_W DB 'WHILE $'
STR_F DB 'FOR $'    
F1 DB ' sumbol F1$'
btn DB  ' 123456$'
 
      END start
В чем ошибка? на любую клавишу выдает 123456. те в метку другую даже не заходит...

Решение задачи: «Подмена вывода»

textual
Листинг программы
mov ah,05
int 16h

Объяснение кода листинга программы

  1. ah - это регистр сегмента аккумулятора (AH), который используется для хранения данных и кодов, выполняемых процессором. Значение 05 в данном случае указывает на выполнение команды чтения данных с порта ввода/вывода (IN).
  2. int 16h - это команда прерывания, которая вызывает обработчик прерывания номер 16 (в данном случае используется стандартный обработчик прерываний BIOS).

Оцени полезность:

15   голосов , оценка 4 из 5
Похожие ответы