Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 08.04.2015
Сообщений: 10
1

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

16.01.2017, 16:24. Показов 1714. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет, помогите пожалуйста разобраться с асм, вот само задание:
Составить программу, предусматривающую:
*Запрос фамилии пользователя и ввод ее с клавиатуры
*Вывод фамилии на дисплей
*Ввод символа с клавиатуры
Если 3 бит кода введенного с клавиатуры символа равен 1 или 2 бит равен 0, протестировать 7 бит M и вывести соответствующее сообщение; иначе инвертировать 0, 3 и 4 биты кода и вывести на дисплей символ, соответствующий измененному коду.

Нужно только подправить данный код (скорректировать в соответствии с условием):
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
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
Увы и ах, но из всей учебной программы очень и очень трудно даётся лишь ассемблер((
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.01.2017, 16:24
Ответы с готовыми решениями:

Написать программу для определения кода символа, введенного с клавиатуры
Написать программу для определения кода символа, введенного с клавиатуры

Получение символа, введенного с клавиатуры
Ребят, вот такой вопрос. Нужно реализовать ввод текста с клавиатуры. Как получить нажатый символ (с...

Проверка введённого символа
В общем такая промблемка: написал программу, но если вместо чисел вводишь букву или ещё что то, то...

Проверка введённого символа
Запросить букву, если она русская, то вывести русский алфавит, если латинская то английский. ...

2
Прощай, Мир!
1672 / 830 / 253
Регистрация: 26.05.2012
Сообщений: 3,056
16.01.2017, 20:56 2
Лучший ответ Сообщение было отмечено Pliman как решение

Решение

Цитата Сообщение от Pliman Посмотреть сообщение
Если 3 бит кода введенного с клавиатуры символа равен 1 или 2 бит равен 0
Цитата Сообщение от Pliman Посмотреть сообщение
test al, 00000100b
js invert ;Если равно 1, то переход на метку
Цитата Сообщение от Pliman Посмотреть сообщение
test al, 00000010b
jns invert ;Если равно 0, то переход на метку
во-первых, индексация бит идет с нуля.
во-вторых, проверка на флаг знака не годится. в данных случаях он всегда будет сброшен
Assembler
1
2
3
4
test al, 00001000b 
jne invert
test al, 00000100b 
je invert
Добавлено через 41 минуту
Цитата Сообщение от Pliman Посмотреть сообщение
test m, 01000000b ; 7 бит M
тоже самое, что и выше сказанное про индексацию. еще здесь вообще нет никакой проверки, а должна быть
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
test m, 10000000b
je label2
 
label1:
;вывод сообщения 1
 
jmp next
 
label2:
;вывод сообщения 2
 
next:
Добавлено через 4 минуты
Цитата Сообщение от Pliman Посмотреть сообщение
mov lastname+1,20
в этот байт число (длина введенной строки) должно поместиться автоматически после того как полностью будет введена строка. удалить

Добавлено через 2 минуты
Цитата Сообщение от Pliman Посмотреть сообщение
mov ah, 1h;ввод символа
int 21h
Цитата Сообщение от Pliman Посмотреть сообщение
mov ah, 1h
int 21h
зачем два раза вводить символ?

Добавлено через 21 минуту
пока это переделывай.. а дальше посмотрим..
2
Эксперт Hardware
Эксперт Hardware
6103 / 2347 / 390
Регистрация: 29.07.2014
Сообщений: 3,108
Записей в блоге: 4
18.01.2017, 19:16 3
Цитата Сообщение от Pliman Посмотреть сообщение
Если 3 бит кода введенного с клавиатуры символа равен 1 или 2 бит равен 0
маску применяй. Укажи, какие биты нужны и проверяй:
OR взодит, AND сбрасывает
0
18.01.2017, 19:16
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.01.2017, 19:16
Помогаю со студенческими работами здесь

Ввод символа с клавиатуры, вывод на экран символа и его кода в десятичной записи
Доброе время суток. Нужно написать программу на ассемблере, которая осуществляет ввод символа с...

Проверка введенного символа в TextBox
Пишу программу, надо что бы можно было вводить в TextBox числа. Но фишка в том что они могут быть...

Вывод введенного пользователем с клавиатуры символа на экран
Добрый день. Нуждаюсь в помощи\совете, есть такая задача: Написать программу, которая выводит на...

Поиск количества символа введенного с клавиатуры в массиве
Задача такая: массив 4на5 заполнен рандомно, отдельно вывести нечетные столбцы в строку и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru