2011-12-26 19:10:39 Yakoot1 нужно написать прогу, где пользователь вводит 2 шестнадцатиричных числа , а программа должна их сложить, вывести на экран результат, и установить четные биты этого числа вознагражу) | ||||
2011-12-26 19:58:51 БелДрагМеталл милиард) | ||||
2011-12-27 01:13:05 Вечный Yakoot1 аськостук | ||||
2011-12-27 01:43:44 БелДрагМеталл Вечный и что не лень вспоминать и разбирать код в нем?) я то знаю, но очееень дорого стоит) | ||||
2011-12-27 01:45:49 yashchar Знатоки все тут на уровне одного семестра программирования Разбирать код в задаче такого "масштаба" - это сутки, конечно, надо, не меньше | ||||
2011-12-27 01:47:05 БелДрагМеталл yashchar намного меньшеЮ идинственное там мануал прерываний смотреть) а так TASM простой Это не асемблер мотороловских микрокотроллеров) | ||||
2011-12-27 02:09:26 yashchar БелДрагМеталл Ты иронию не узрел в моих словах как я вижу? | ||||
2011-12-27 07:10:12 jokermanx Yakoot1 Самому писать лень, собственно нашел в нете, вроде как должно работать Прога читает два десятчных числа с клавы, слаживает, и выводит на экран. /*Данная часть собственно просто декларация переменных, резервирования места под необходимые блоки данных, ее впринципе можеш заменить*/ .model small .stack .data var1 db ? .code .startup /* Собственно сам код, прокоментирую что делает каждая линия*/ mov ah,01h;готовимся к чтению от клавы int 21h;читаем с клавы, получаем номер клавиши в таблице sub al,30h;resto 30H (48Dec) от номера отнимаем позицию цифры 0 mov var1,al ;сохраняем номер var1 mov ah,01h ; снова готовимся к чтению int 21h ; считываем второй номер sub al,30h;resto 30H (48Dec) add al,var1 ; realizo la suma de los dos valores mov dl,al;pongo en dl el numero a imprimir add dl,30h ; agrego 30 (48Dec) para obtener el caracter mov ah,02h;funcion para imprimir un caracter en pantalla int 21h .exit end Ну меня тут напали, с утра закончу коментировать. Для того чтоб складывать числа в 16й системе, нужно просто проверять или число меньше 10 или больше, и если больше то отнимать придется не позицию 0 а позицию буквы А "и установить четные биты этого числа " Этой части я вообще не понял. | ||||
2011-12-27 07:13:06 jokermanx
Вспомнил, что А идет сразу после 9, так что можно сразу 16е номера считать. | ||||
2011-12-27 07:14:45 jokermanx Чето меня голого долго убить не могут.
Вот это если обьясниш, то утром допишу что еще можно делать. | ||||
2011-12-27 07:16:08 jokermanx
Глянул таблицу ascii, не все таки а не идет после 9 | ||||
2011-12-27 09:32:41 Yakoot1 а я не знаю чо там, подруга попросила, спрошу, если она сама не сделала еще) | ||||
2011-12-27 11:39:40 БелДрагМеталл jokermanx ну ему случайно не другие надо прерывания у него же 16 битное число) | ||||
2011-12-27 12:14:34 jokermanx БелДрагМеталл
Я так понял что это числа от 0 до F Ну будут вводить либо 0-9 либо A-F А значит, нужно будет проверить или то что ввели находится в этих интервалах, и если находится то произвести необходимые операции. Когда узнает то что я не понимаю, попробую зделать полностью пример. | ||||
2011-12-27 12:50:21 БелДрагМеталл тогда сразу ищи готовые пролцедура для считывания 10 числе с клавы) | ||||
2011-12-27 14:15:59 Yakoot1 jokermanx там есть код data segment para public 'data'; message1 db 0ah,0dh,'Vvedite first chislo $' message2 db 0ah,0dh,'Vvedite second chislo $' message3 db 0ah,0dh,'Vv first chislo: $' message4 db 0ah,0dh,'Vv second chislo: $' a db 0 b db 0 c db 0 data ends stk segment stack db 256 dup ('?'); stk ends code segment para public 'code'; main proc; assume cs:code, dsata, ss:stk mov ax, data; mov ds, ax; mov ah, 9 mov dx, offset message1 int 21h; xor ax,ax; mov ah,1h; int 21h; mov dl,al; sub dl,30h; cmp dl,9h; jle M1; sub dl,7h; M1: mov cl,4h; shl dl,cl; int 21h; sub al,30h; cmp al,9h; jle M2 ; sub al,7h; M2: add dl,al; mov a,dl; mov dx, offset message2 mov ah, 9 int 21h; xor ax,ax; mov ah,1h; int 21h; mov dl,al; sub dl,30h; cmp dl,9h; jle M3; sub dl,7h; M3: mov cl,4h; shl dl,cl; int 21h; sub al,30h; cmp al,9h; jle M4 ; sub al,7h; M4: add dl,al; mov b,dl; xor ax,ax mov al,a add al,b or al,01010101b mov c,al mov ah, 9 mov dx, offset message3 int 21h; mov cx,16; xor bx,bx; mov bl,c; M5: xor dx,dx; sal bx,1; adc dl,30h; mov ah,02; int 21h; loop m5; mov ax, 4c00h; int 21h; main endp; code ends; end main; установка четных битов - установка единичек в четных позициях.. прога эта работает правильно, но там в начале 8 лишних знаков, надо либо их вообще убрать, либо в них тоже устанавливать четные биты | ||||
2011-12-27 14:46:11 БелДрагМеталл sal bx,1; такую команду незнаю) | ||||
2011-12-28 08:00:04 jokermanx
Вроде как число в регистре б перемещается на один бит влево, не затрагивая знак, в данном случае на один бит, тоесть просто умножается на 2. Просмотрел пример, ничего особо не понял, ребята коментируйте что делаете в каждой линии, ну или хотя бы длоками.
80( на мя опять нап, позжее прокоментю | ||||
2011-12-28 10:20:15 БелДрагМеталл Ну и конечно при раоботе с ассемблером единственный разумный подход это использовать имулятор, и просматривать результат каждой команды, а так асма это набор простых команд) | ||||
2011-12-28 14:47:39 jokermanx
Ну это при работе с асамблером, при каждой ошибке, система будет становится раком, поэтому нужно стараться просто коментировать код, и понимать что далеш | ||||