Tranquility | ||
нужно написать прогу,только я ничего не понимаю...народ,хелп ми плиз...надо срочно...в начале мая сдавать... нужна прога которая обеспечивает перевод введенного 10 речного числа в 16ричное и 2ичное в графическом режиме а)четное число выводится синим цветом,не четное-красным. б)вывод каждого числа осуществляется в окно с пояснительным комментарием соответствующего цвета. все это нужно написать на асемблере |
||
AngeLR | ||
тебе это надо то хоть на х86 ассемблере ? ![]() и почему именно в графическом режиме ? |
||
GregZ | ||
Поддерживаю предыдущего оратора. Еще не понял как можно "обеспечить перевод системы счисления в графическом режиме"? Подробнее пожалуйста. Но учти, курсовики за тебя делать никто не будет. Зато сможем по мере сил указать направление движения, и помочь разобраться в сложных местах. Вообще про перевод систем счисления очень подробно написано здесь, советую ознакомиться. Вполне возможно вопросов больше не возникнет. |
||
Tranquility | ||
к сожалению,с распознанием версии небольшие проблемки :) точно знаю,что там турбо асемблер :) задание переписала так как написано было в документах препода,так что более точного обьяснения дать не смогу... :) во,не надо за меня писать курсовик...главное помочь с направлением :) ведь самое интересное-это сам процесс и в итоге положительный результат :) с отличной отметкой в зачетке :)) |
||
Tranquility | ||
GregZ:"Вообще про перевод систем счисления очень подробно написано здесь, советую ознакомиться. Вполне возможно вопросов больше не возникнет." кстати прикольненькая ссылочка на системы счисления :) и правда понятнее стало :) Благодарю :)))) |
||
Tranquility | ||
sta segment stack db 256 dup(?) sta ends dan segment num dw ? dan ends cod segment assume cs:cod,ds:dan,ss:sta beg: mov ax, dan ;загружаем начало сегмента данных mov ds,ax ;в регистр dx ; очистка экрана mov ax,0600h mov bh,15 mov cx,00h mov dx,184fh int 10h ;------------------------- ;установка позиции курсора mov dx,0000h mov bh,00h mov ah,02h int 10h ;------------------------- ;ввод числа mov si,10 ;работаем с десятичной нотацией mov di,0 @aa: ; вводим число до нажатия клавиши "ВВОД" mov ah,01h int 21h cmp al,13 ; проверяем нажатие клавиши "ВВОД" jz a1 ; если клавиша нажата, то переходим на конец ; обработки ввода числа ; иначе выполняем следующие 8 пунктов sub al,'0' ; из кода ASCII получаем цифру xor ah,ah ; теперь значение ах равно значению al mov cx,ax ; копируем ах в сх mov ax,di ;записываем в ах введенное до текущей цифры число mul si ;умножаем его на 10, переходя тем самым в текущий ;разряд add ax,cx ;добавляем к числу текущую цифру mov di,ax ;сохраняем текущее число в di jmp @aa ; переходим на обработку следующего разряда a1: mov num,di ; сохраняем окончательное значение введенного числа ; в переменной "num" ;-------------------------- ;функция 3*x*x + 2*x + 1 mov ax,03d ;В ax значение 3 mul num ;Умножаем 3 на x - в ах теперь 3*x mul num ;Ещё раз умножаем на х - в ах теперь 3*x*х mov cx, ax ;В cx накапливается сумма (сейчас здесь 3*x*x) mov ax, 02d ;В ax значение 2 mul num ;Умножаем 2 на x - в ах теперь 2*x add cx, ax ;теперь в cx 3*x*x + 2*x add cx, 01d ;В cx - весь результат , функция 3*x*x + 2*x + 1 ;-------------------------- ;установка позиции курсора mov dx,0100h ; dh-номер строки, dl-номер столбца mov bh,0h ; номер страницы mov ah,02h ; установка положения курсора int 10h ;-------------------------- ;вывод числа mov si,10 mov ax,cx mov cx,0 a: mov dx,0 div si add dx,'0' push dx inc cx cmp ax,0 jnz a aa: pop dx mov ah,02h int 21h loop aa ;---------------------------- mov ah,01h ; организация точки останова int 21h ; (программа прекращает выполнение кода до нажатия любой клавиши) mov ah,4Ch ; обработка окончания int 21h ; программы cod ends end beg вот в эту штуку нужно вставит вот это CSEG segment org 100h Begin: mov ah,3fh ;Запрос на ввод mov bx,00 ;Номер для клавиатуры mov cx,20 ;Максимум байт для ввода lea dx,Field ;Адрес области ввода int 21h ;Вызов DOS ;В ax - количество введённых символов + 2 mov bx, offset Field ;Берём указатель на начало строки add bx, ax ;Прибавляем количество введённых символов sub bx, 2 ;Вычитаем 2. Теперь cs:[bx] указывает на конец строки mov al, '$' mov cs:[bx],al ;Записываем в конец строки $ - признак конца строки mov bl, [Field] mov ax, offset Field push ax call Str2Num pop bx ;Теперь в bx число mov ax, [constA] ;В ax теперь a mul bx ;Умножаем на x - в ах теперь a*x mul bx ;Ещё раз умножаем на х - в ах теперь a*x*х mov cx, ax ;В cx накапливается сумма mov ax, [constB] mul bx add cx, ax mov ax, [constC] add cx, ax ;В cx результат mov cl,0000b ; Последние 3 нуля значит погасить всё. call change_LEDs ; Гасим ; Проверка на ноль mov ax, cx and ax, 255 jz z ; Проверка на положит. значение mov ax, cx and ax, 128 jz p ; Отрицательное jmp n z: mov cl,0100b call change_LEDs mov dx, offset Zero jmp print n: mov cl,0010b call change_LEDs mov dx, offset Negative jmp print p: mov cl,0001b call change_LEDs mov dx, offset Positive jmp print print: mov ah,9 int 21h int 20h Str2Num proc ;Берёт строку из стека и кладёт туда число pop ax ;Сохраняем адрес возрата pop bx ;bx указывает на текущий символ. Его мы будем двигать push ax ;Это чтобы вернуться xor ax, ax ;В ax будет накапливаться число xor cx,cx ;В cx - текущая цифра xor dx,dx push dx ;Если в стеке 0 - число положительное ;В начале считаем, что оно положительное mov cl, cs:[bx] mov dl, cl xor dl, '-' jnz cycle ;Если первый знак - минус, то inc bx ;смещаем bx, чтобы проскачить минус pop dx ;вытаскиваем 0 mov dx,1 push dx ;Кладём единицу - отрицательное cycle: mov cl, cs:[bx] mov dl, cl mov cl, cs:[bx] xor dl, '$' jz done ;Если текущий символ - $, то проверка свалит флаг 0 и мы выйдем sub cl, 48 mov dx, ax mov al,10 mul dx add ax, cx inc bx jmp cycle done: pop dx ;Берём из стека число (0 - полож, 1 - отриц) xor dx,0 jz ok ;Если ноль, то всё ОК mov dx,0 ;Иначе меняем знак sub dx,ax mov ax,dx ok: pop bx ;Сохраняем дрес возврата push ax ;Кладём в стек число push bx ;Кладём адрес возрата ret ;Возвращаемся по нему Str2Num endp change_LEDs proc near call wait_KBin ; ожидание возможности посылки команды mov al,0EDh out 60h,al ; команда клавиатуры EDh call wait_KBin ; ожидание возможности посылки команды mov al,cl out 60h,al ; новое состояние светодиодов ret change_LEDs endp ; процедура wait_KBin ; ожидание возможности ввода команды для клавиатуры wait_KBin proc near in al,64h ; прочитать слово состояния test al,0010b ; бит 1 равен 1? jnz wait_KBin ; если нет - ждать, ret ; если да - выйти wait_KBin endp Negative db 'Negative$' Positive db 'Positive$' Zero db 'Zero$' Field db 20 dup (0) constA dw 1 constB dw 5 constC dw 6 CSEG ends end Begin как это сделать? |
||
Tranquility | ||
есть вот такая вот штука: msgInputAddr dw ?;Это указатели на MinusAddr dw ?;соответствующие msgStringGivedAddr dw ?;данные result_bin dw 0 ascbin proc ;================================================= ========= ;transmitting of the input addresses through data's segment ascbin_begin: push cx mov al,0 mov si,word ptr [MinusAddr] mov byte ptr [si],al mov dx,word ptr [msgInputAddr] mov ah,09h int 21h mov ax,0 push ax ReadNextSymbol: wait_any_key_0: mov ah,06h mov dl,0ffh int 21h jz wait_any_key_0 cmp al,2Dh jne Symbol_not_equal_Minus mov al,1 mov si,word ptr [MinusAddr] mov byte ptr [si],al mov ah,06h mov dl,2Dh int 21h wait_any_key_n0: mov ah,06h mov dl,0ffh int 21h jz wait_any_key_n0 Symbol_not_equal_Minus: cmp al,30h jl NotDigitSymbol cmp al,39h jg NotDigitSymbol2 ;DigitSymbol mov ah,06h mov dl,al int 21h sub al,30h ;DecimalDigit mov bl,al mov bh,0 pop ax mov dl,10 mov dh,0 mul dx add ax,bx push ax jmp ReadNextSymbol NotDigitSymbol2: mov dl,7 mov ah,06h int 21h jmp ReadNextSymbol NotDigitSymbol: nop pop dx mov si,word ptr [MinusAddr] mov al,byte ptr [si] cmp al,0 je SignZeroNot ;sign = 1 ;converting in additional code mov ax,dx not ax ;inversion add ax,1 ;+1 or ax,8000h ;sign't bit mov dx,ax SignZeroNot: mov result_bin,dx mov dx,word ptr [msgStringGivedAddr] mov ah,09h int 21h pop cx ;output data come back through data's segment ret ;================================================= ====== ascbin endp но на нее выдается ошибка: вот что оно мне выдает: Microsoft Windows XP [Версия 5.1.2600] (С) Корпорация Майкрософт, 1985-2001. C:\Documents and Settings\Алина>cd\ C:\>cd aaa C:\aaa>tasm bbb.asm Turbo Assembler Version 4.1 Copyright © 1988, 1996 Borland International Assembling file: bbb.asm **Fatal** Command line: Can't locate file: bbb.asm Error messages: 1 Warning messages: None Passes: 1 Remaining memory: 454k C:\aaa> че-то я не разбирусь |
||
Roman | ||
Can't locate file: bbb.asm - Не может определить местонахождение файла bbb.asm |