Асемблер

Tranquility
4/24/2006, 7:20:20 AM
нужно написать прогу,только я ничего не понимаю...народ,хелп ми плиз...надо срочно...в начале мая сдавать...
нужна прога которая обеспечивает перевод введенного 10 речного числа в 16ричное и 2ичное в графическом режиме
а)четное число выводится синим цветом,не четное-красным.
б)вывод каждого числа осуществляется в окно с пояснительным комментарием соответствующего цвета.

все это нужно написать на асемблере
AngeLR
4/24/2006, 1:32:01 PM
тебе это надо то хоть на х86 ассемблере ? smile.gif

и почему именно в графическом режиме ?
DELETED
4/25/2006, 12:32:12 AM
(Tranquility @ 24.04.2006 - время: 03:20)нужно написать прогу,только я ничего не понимаю...народ,хелп ми плиз...надо срочно...в начале мая сдавать...
нужна прога которая обеспечивает перевод введенного 10 речного числа в 16ричное и 2ичное в графическом режиме
а)четное число выводится синим цветом,не четное-красным.
б)вывод каждого числа осуществляется в окно с пояснительным комментарием соответствующего цвета.

все это нужно написать на асемблере
Поддерживаю предыдущего оратора. Еще не понял как можно "обеспечить перевод системы счисления в графическом режиме"? Подробнее пожалуйста. Но учти, курсовики за тебя делать никто не будет. Зато сможем по мере сил указать направление движения, и помочь разобраться в сложных местах.

Вообще про перевод систем счисления очень подробно написано здесь, советую ознакомиться. Вполне возможно вопросов больше не возникнет.
Tranquility
4/26/2006, 5:03:00 AM
к сожалению,с распознанием версии небольшие проблемки :) точно знаю,что там турбо асемблер :)

задание переписала так как написано было в документах препода,так что более точного обьяснения дать не смогу... :)

во,не надо за меня писать курсовик...главное помочь с направлением :) ведь самое интересное-это сам процесс и в итоге положительный результат :) с отличной отметкой в зачетке :))
Tranquility
4/26/2006, 5:18:22 AM
GregZ:"Вообще про перевод систем счисления очень подробно написано здесь, советую ознакомиться. Вполне возможно вопросов больше не возникнет."



кстати прикольненькая ссылочка на системы счисления :) и правда понятнее стало :)
Благодарю :))))
Tranquility
5/19/2006, 6:34:30 AM
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: указывает на конец строки

mov al, '$'
mov cs:,al ;Записываем в конец строки $ - признак конца строки
mov bl,
mov ax, offset Field

push ax
call Str2Num
pop bx ;Теперь в bx число

mov ax, ;В ax теперь a
mul bx ;Умножаем на x - в ах теперь a*x
mul bx ;Ещё раз умножаем на х - в ах теперь a*x*х

mov cx, ax ;В cx накапливается сумма

mov ax,
mul bx

add cx, ax

mov ax,

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:
mov dl, cl
xor dl, '-'
jnz cycle ;Если первый знак - минус, то
inc bx ;смещаем bx, чтобы проскачить минус
pop dx ;вытаскиваем 0
mov dx,1
push dx ;Кладём единицу - отрицательное

cycle:
mov cl, cs:
mov dl, cl

mov cl, cs:
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
5/26/2006, 4:03:22 AM
есть вот такая вот штука:

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
mov byte ptr ,al

mov dx,word ptr
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
mov byte ptr ,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
mov al,byte ptr
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
mov ah,09h
int 21h
pop cx
;output data come back through data's segment
ret
;=================================================
======
ascbin endp




но на нее выдается ошибка:

вот что оно мне выдает:
Microsoft Windows XP
(С) Корпорация Майкрософт, 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
5/30/2006, 4:40:33 AM
Can't locate file: bbb.asm - Не может определить местонахождение файла bbb.asm