Проверка бит кода введенного с клавиатуры символа - Assembler

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

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

Всем привет, помогите пожалуйста разобраться с асм, вот само задание: Составить программу, предусматривающую: *Запрос фамилии пользователя и ввод ее с клавиатуры *Вывод фамилии на дисплей *Ввод символа с клавиатуры Если 3 бит кода введенного с клавиатуры символа равен 1 или 2 бит равен 0, протестировать 7 бит M и вывести соответствующее сообщение; иначе инвертировать 0, 3 и 4 биты кода и вывести на дисплей символ, соответствующий измененному коду. Нужно только подправить данный код (скорректировать в соответствии с условием):
model small
include lib\io.asm
.stack 100h
.data
d db 25
m db 6
y db 96
a db 20
lastname db 23 dup(?)
lastnamePromt   db 10,13, 'Input your lastname: ', '$'
lastnameOut     db 10,13, 'Your lastname is: ', '$'
symbolPromt     db 10,13, 'Input symbol: ', '$'
symbolOut       db 10,13, 'Changed symbol: ', '$'
bitOut          db 10,13, 'Bit #7 of the M variable is: ', '$'
.code
start:
mov ax, @data
mov ds, ax
mov dx, offset lastnamePromt
mov ah, 9h
int 21h
;Ввод фамилии
mov lastname,21
mov lastname+1,20 
mov dx,offset lastname
mov ah,10 ;ввод 10 в ah
int 21h
mov dx, offset lastnameOut
mov ah, 9h
int 21h
lea dx, lastname+2
mov ah, 9h
int 21h
;Ввод символа с клавиатуры
mov dx, offset symbolPromt
mov ah, 9h
int 21h
mov ah, 1h;ввод символа
int 21h
;Проверяем 3 бит
test al, 00000100b 
js invert ;Если равно 1, то переход на метку 
 
mov ah, 1h
int 21h
 
test al, 00000010b 
jns invert ;Если равно 0, то переход на метку 
test m, 01000000b ; 7 бит M
mov dx, offset symbolOut
mov ah, 9h
int 21h
jmp finish
;Метка инвертации
invert:
mov dx, offset bitOut
mov al, 9h
int 21h
mov dl, cl
mov ah, 02h 
int 21h
xor al, 00011001b ; Инвертация 0,3 и 4 бита в единицы
mov cl, al
mov dx, offset symbolOut
mov ah, 9h
int 21h
mov dl, cl
mov ah, 2h
int 21h
jmp finish
output:
mov dx,offset bitOut
mov al,9h
int 21h
mov dl,cl
mov ah,02h
int 21h
finish:
mov ah,4ch
int 21h
end start
Увы и ах, но из всей учебной программы очень и очень трудно даётся лишь ассемблер((

Решение задачи: «Проверка бит кода введенного с клавиатуры символа»

textual
Листинг программы
test al, 00001000b 
jne invert
test al, 00000100b 
je invert

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

  1. Переменная al содержит байт, который был введен с клавиатуры.
  2. Выполняется проверка бита 7 (самый старший) переменной al. Если он установлен, то происходит переход к метке invert.
  3. Выполняется проверка бита 4 (5-й бит от старшего) переменной al. Если он установлен, то происходит переход к метке invert.
  4. Если ни одна из предыдущих проверок не вызвала переход, то происходит выполнение кода между метками invert и end.
  5. Код между метками invert и end не представлен в данном коде.
  6. Если переменная al содержит 0, то происходит переход к метке end.
  7. Код между метками end и next не представлен в данном коде.
  8. Выполняется проверка бита 6 (6-й бит от старшего) переменной al. Если он установлен, то происходит переход к метке next.
  9. Выполняется проверка бита 2 (3-й бит от старшего) переменной al. Если он установлен, то происходит переход к метке next.
  10. Если ни одна из предыдущих проверок не вызвала переход, то происходит выполнение кода между метками next и end.
  11. Код между метками next и end не представлен в данном коде.
  12. Если переменная al содержит 0, то происходит переход к метке end.
  13. Код между метками end и start не представлен в данном коде.
  14. Переменная al содержит байт, который был введен с клавиатуры.
  15. Выполняется проверка бита 1 (2-й бит от старшего) переменной al. Если он установлен, то происходит переход к метке start.
  16. Выполняется проверка бита 3 (4-й бит от старшего) переменной al. Если он установлен, то происходит переход к метке start.
  17. Если ни одна из предыдущих проверок не вызвала переход, то происходит выполнение кода между метками start и end.
  18. Код между метками start и end не представлен в данном коде.
  19. Переменная al содержит байт, который был введен с клавиатуры.
  20. Код не представлен в данном коде.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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