Ввод даных АСМ!Срочно!
Пользователи, просматривающие топик: none
|
Зашли как: Guest
|
Имя |
Сообщение |
<< Старые топики Новые топики >> |
|
|
Ввод даных АСМ!Срочно! - 2008-12-19 22:17:24.610000
|
|
|
xaxa89
Сообщений: 287
Оценки: 0
Присоединился: 2008-05-18 00:30:38.240000
|
Сразу к делу!Нужно сделать лабу на завтра, как говорится вся ночь в переди!=) Само задание пока не важно да и там проблем не должно…пока… не возникало… Смысл в том что нужно ввести массив целых чисел со знаком с клавиатуры. Препод сказал с помощбю прерывания int21. Сюда пишу само собой не для того что б за меня все сделали! Немного разобрался… функция 0ah! Как с ней работать я разобрался, НО если скажем мне нужно ввести -123 то в памяти оно займет 4 байта, знак и цифры как символы по 1 байту…а мне получается нужно что оно все записывалось ну SWORD к примеру З.Ы. Юзаю масм, Если важно задача:"Подсчитать кол-во отрицательных елементов на парных позициях масива из 10 елементов". Обьясните как ввести эти гребаные цифры!!! ПЛИЗ Кажется поднял панику раньше времени…=(
input_loop:
mov ah,01h ; ввод символа
int 21h
cmp al,0dh ; если enter
je chislo ; то занести число в массив
cmp al,20h ; если пробел
je chislo ; то занести число в массив
sub al,30h ; вычитаем '0'
mov cl,al ; сохраняем цифру в cl
mov ax,dx ; в ax - введенное число
mul c10 ; умножаем на 10
xor ch,ch
add ax,cx ; добавляем цифру из al
mov dx,ax ; число снова в dx
jmp input_loop
=( всерано ничего не выходит!!!Блин люди скажите хоть в каком направлении искать!!!
|
|
|
RE: Ввод даных АСМ!Срочно! - 2008-12-20 17:45:12.893333
|
|
|
xaxa89
Сообщений: 287
Оценки: 0
Присоединился: 2008-05-18 00:30:38.240000
|
Вообщем сделал если кому интересно или еще чего…
;Подсчет колва отрицательных елементов на парных позициях
CSEG segment
org 100h
_beg:
COUNTER SBYTE ? ;Наш счетчик
MAS SBYTE 10 DUP(0) ;Оглашаем инициализированый масив, заполненый нулями
mov bx,00h ;обнуляем индексный регистр.
mov cx,0ah ;цикл 10 раз прогнать.
mov COUNTER,00h
CYCL:
MOV ah,01h ;читаем символ.
INT 21h ;прервались.
CMP al,2Dh ;проверяем не минус ли мы ввели.
JZ minus
sub al,30h ;конвертация в цифру.
jmp finish ;прыгаем дальше работать.
minus:
mov ah,01h ;нам нужно еще один прочитать если минус
int 21h ;прервались
sub al,30h ;конвертация
neg al ;сделали отрицательным
finish:
mov MAS[bx],al ;Записываем в масив введеное значение из регисра al
add bx,1 ;увеличиваем значение индексного регистра
loop CYCL ;лупаемся
mov cx,05h ;цикл 5 раз прогнать.
mov COUNTER,0
mov bx,0 ;обнуляем индексный регистр.
CYCL2:
cmp MAS[bx],0 ;сравниваем с нулем флажок SF(Флаг знака) поднят
JS negat
jmp fin2
negat:
inc COUNTER ;увеличиваєм значение счетчика на 1
fin2:
add bx,2
loop CYCL2 ;лупаемся
mov ah,02h ;подготовка и вызов функции 02h прерывания 21h
mov dl,3Eh ;для вывода символа с кодом 3Eh что обозначает ">"
int 21h ;прервались=)
add COUNTER,30h ;Преобразовуем число в строчное значение для вывода
mov ah,02h ;загружаем номер функции
mov dl,COUNTER ;Значение символа для вывода
int 21h ;прервались=)
MOV ah,4Ch ;Bye-Bye
INT 21h
CSEG ends
end _beg
|
|
|
|
|