Проверка бит кода введенного с клавиатуры символа - 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
Объяснение кода листинга программы
- Переменная
al
содержит байт, который был введен с клавиатуры. - Выполняется проверка бита 7 (самый старший) переменной
al
. Если он установлен, то происходит переход к меткеinvert
. - Выполняется проверка бита 4 (5-й бит от старшего) переменной
al
. Если он установлен, то происходит переход к меткеinvert
. - Если ни одна из предыдущих проверок не вызвала переход, то происходит выполнение кода между метками
invert
иend
. - Код между метками
invert
иend
не представлен в данном коде. - Если переменная
al
содержит 0, то происходит переход к меткеend
. - Код между метками
end
иnext
не представлен в данном коде. - Выполняется проверка бита 6 (6-й бит от старшего) переменной
al
. Если он установлен, то происходит переход к меткеnext
. - Выполняется проверка бита 2 (3-й бит от старшего) переменной
al
. Если он установлен, то происходит переход к меткеnext
. - Если ни одна из предыдущих проверок не вызвала переход, то происходит выполнение кода между метками
next
иend
. - Код между метками
next
иend
не представлен в данном коде. - Если переменная
al
содержит 0, то происходит переход к меткеend
. - Код между метками
end
иstart
не представлен в данном коде. - Переменная
al
содержит байт, который был введен с клавиатуры. - Выполняется проверка бита 1 (2-й бит от старшего) переменной
al
. Если он установлен, то происходит переход к меткеstart
. - Выполняется проверка бита 3 (4-й бит от старшего) переменной
al
. Если он установлен, то происходит переход к меткеstart
. - Если ни одна из предыдущих проверок не вызвала переход, то происходит выполнение кода между метками
start
иend
. - Код между метками
start
иend
не представлен в данном коде. - Переменная
al
содержит байт, который был введен с клавиатуры. - Код не представлен в данном коде.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д