Вопрос № 43302: Здравствуйте! Еще один вопрос:
Ввести с клавиатуры произвольный русский (и только русский ) символ. ...Вопрос № 43315: Уважаемые эксперты!
Помогите сдать сессию!
Мне срочно нужна программа на ассемблере, которая бы складывала шестнадцатиразрядные двоичные числа, а результат выдавала в десятичной форме, т.е. (bin+bin)-->dec.
..Вопрос № 43382: Тут возникли проблемы с программами по ассемблеру
Собственно вот 2 штуки
1. Определить, содержит ли байт данных в кодовом сегменте в разрядах 6-2 двоичную комбинацию 11010. Если да, то сформировать код в регистре ВН следующим образо...Вопрос № 43412: privet, u menya zada4ka:
napisat' prozeduru "sum". polu4aet adress ofseta na4ala matrizu iz 10 znakovuh 4isel, razmerom byte. prozedura vozvras4aet v "ax" summu^2 vseh 4isel matrizu.
stack:
sp ukazuvaet na adress vozvr...
Вопрос № 43.302
Здравствуйте! Еще один вопрос:
Ввести с клавиатуры произвольный русский (и только русский ) символ.
Отправлен: 17.05.2006, 09:58
Вопрос задал: Iluha (статус: 1-ый класс)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 2)
Я правильно понял? Проблема в знании кода русского символа?
Если так, то берите соответствующую кодировку и сравнивайте введённый символ с соответствующим диапазоном. Например через cmp, или sub, или or, или xor, и т.д...:)
Выбор богатый...;-)
И ещё прошу обратить внимание, что это не "чистый" (мню scan-code) код клавиши, а уже обработанный интерфейсом, находящимся между Вами и контроллером клавиатуры. Поэтому если Вы получаете "сырые" коды (например от порта 60h), то Вам необходимо их предварительно обработать.
Удачи.
--------- Стучитесь! И Вас откопают...
Ответ отправил: Sergijj (статус: 3-ий класс)
Ответ отправлен: 17.05.2006, 18:16
Вопрос № 43.315
Уважаемые эксперты!
Помогите сдать сессию!
Мне срочно нужна программа на ассемблере, которая бы складывала шестнадцатиразрядные двоичные числа, а результат выдавала в десятичной форме, т.е. (bin+bin)-->dec.
Отправлен: 17.05.2006, 12:02
Вопрос задал: Kostolom (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 3)
Отвечает: Пан Павел Константинович
Здравствуйте, Kostolom!
Вот алгоритм, МНЕ он НЕ! нравиться но не чего другого в голову пока не пришло, радует тот факт что он работает!
CSEG segment
assume cs:CSEG,ds:CSEG,ss:CSEG,es:CSEG
org 100h
Begin:
;=============================================
;Инициализация регистров.
mov ax,00010010b ;a = 18
mov bx,00100101b ;b = 37
;=============================================
;Сложение a = а + b.
add ax,bx ;a = a + b
;=============================================
;Преобразование 16-го числа в 10-ое.
mov ah,09h
lea dx,ADD_R
int 21h
;=============================================
;Выход.
ret ;exit
;=============================================
;Буфер для десятичного числа.
ADD_R db 6 dup('$')
CSEG ends
end Begin
С, Уважением MnEm0n!C.
--------- Hello Worlds
Ответ отправил: Пан Павел Константинович (статус: 8-ой класс)
Ответ отправлен: 18.05.2006, 01:23 Оценка за ответ: 3 Комментарий оценки: Не совем то что надо. Нужно превод из 2-ой в десятичную, но всё равно спаибо
Вопрос № 43.382
Тут возникли проблемы с программами по ассемблеру
Собственно вот 2 штуки
1. Определить, содержит ли байт данных в кодовом сегменте в разрядах 6-2 двоичную комбинацию 11010. Если да, то сформировать код в регистре ВН следующим образом : сумма тетрад исходного байта, если значение старшейй тетрады больше младшей, разность тетрад в противном случае.
Если полученный в ВН код меньше 40, инвертировать его.
2. В области кодового сегмента размещен массив двухбайтных данных. Данные, значения которых находятся в интервале от -20 до 20 заменить на противоположные по знаку и в однобайтном формате записать в другую область.
Все проги односегментные, т.к. потом надо делать .сом
Приложение:
Отправлен: 17.05.2006, 19:07
Вопрос задал: NooKeRRR (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Ayl
Здравствуйте, NooKeRRR!
1. Замеченные ошибки:
а) после сравнения управление передается на метку M2, хотя логично бы на M4 (т.к. значение регистра BH в этом случае не определено).
б) перед меткой M3 нужно вставить переход на метку M2 (т.к. после того, как значение в регистре BH сформировано, его не нужно изменять согласно второго условия).
2. А что не нравиться во второй программе? Там вроде бы все правильно. Только при обращениях типа
cmp cs:[mass+SI], -20
надо ставить прямое указание на размер данных:
cmp word ptr cs:[mass+SI], -20
Но я бы написал по-другому (см. Приложение).
Приложение:
--------- Трудное - то, что можно сделать немедленно. Невозможное - то, для выполнения чего требуется немного больше времени
Ответ отправил: Ayl (статус: Академик) Россия, Санкт-Петербург ICQ: 5163321 ---- Ответ отправлен: 18.05.2006, 14:07
Вопрос № 43.412
privet, u menya zada4ka:
napisat' prozeduru "sum". polu4aet adress ofseta na4ala matrizu iz 10 znakovuh 4isel, razmerom byte. prozedura vozvras4aet v "ax" summu^2 vseh 4isel matrizu.
stack:
sp ukazuvaet na adress vozvrata
adress ofset matizu
.......
dlya matrizu (sistema s osnovaniem 10)
1,15,-128,34,127,0,0,-17,78,12
polu4im summu:
1+225+16384+1156+16129+0+0+289+6084+144=40412
napisat tolko prozeduru.
est-li perepolnenie vo vremya vupolneniya ?
putalsya perevesti doslovno, ne znau na skolko udalos'.
spasibo zaranee.
alex
Отправлен: 18.05.2006, 00:42
Вопрос задал: Borbon1 (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 1)
Отвечает: Пан Павел Константинович
Здравствуйте, Borbon1!
;=============================================
;Процедура суммирования и возведения результата в квадрат.
Sum_prc proc
;=============================================
;Работа со стеком для извлечиния OFFSET Matrix.
pop ax
pop si
push ax
;=============================================
;Инициализация.
mov cx,0ah
xor bx,bx
xor ax,ax
xor dx,dx
;=============================================
;Последовательное считвание и сложение элементов матрицы.
@1:
mov dl,[si+bx]
add ax,dx
inc bx
loop @@1
cbw
;=============================================
;ax = сумме всех элементов матрицы.
imul ax ;sum ^ 2
;ax = ax ^ 2 (ax = ax * ax)
;=============================================
ret ;exit
Sum_prc endp
;=============================================
Matrix db 1, 6
db 2, 7
db 3, 8
db 4, 9
db 5, 10
;=============================================
CSEG ends
end Begin
С, Уважением MnEm0n!C.
--------- Hello Worlds
Ответ отправил: Пан Павел Константинович (статус: 8-ой класс)
Ответ отправлен: 18.05.2006, 02:58
Отвечает: Ayl
Здравствуйте, Borbon1!
Отвечу на вопрос и приведу код для получения суммы квадратов элементов матрицы (из примера вроде бы нужна она, а не квадрат суммы элементов).
Максимальная сумма квадратов получится в случае, когда все элементы будут равны -128. Тогда S=10*(-128)^2=10*16384=163840. То есть для представления суммы квадратов 16-тиразрядного беззнакового числа может и не хватить (163840>65535). То есть при заданных условиях возможно переполнение. Либо нужно использовать для возврата двойное слово.
В Приложении код процедуры. Для выхода можешь использовать один из двух вариантов:
1. Возврат двойного слова в регистрах dx:ax без переполнения
2. Проверка переполнения и возврат результата в регистре ax при отсутствии переполнения (флаг переноса (CF) сброшен) и установку флага CF при обнаружении переполнения (значение регистра ax некорректно).
Приложение:
--------- Трудное - то, что можно сделать немедленно. Невозможное - то, для выполнения чего требуется немного больше времени
Ответ отправил: Ayl (статус: Академик) Россия, Санкт-Петербург ICQ: 5163321 ---- Ответ отправлен: 18.05.2006, 14:49