Асемблер
Tranquility
Новичок
4/24/2006, 7:20:20 AM
нужно написать прогу,только я ничего не понимаю...народ,хелп ми плиз...надо срочно...в начале мая сдавать...
нужна прога которая обеспечивает перевод введенного 10 речного числа в 16ричное и 2ичное в графическом режиме
а)четное число выводится синим цветом,не четное-красным.
б)вывод каждого числа осуществляется в окно с пояснительным комментарием соответствующего цвета.
все это нужно написать на асемблере
нужна прога которая обеспечивает перевод введенного 10 речного числа в 16ричное и 2ичное в графическом режиме
а)четное число выводится синим цветом,не четное-красным.
б)вывод каждого числа осуществляется в окно с пояснительным комментарием соответствующего цвета.
все это нужно написать на асемблере
AngeLR
Мастер
4/24/2006, 1:32:01 PM
тебе это надо то хоть на х86 ассемблере ?
и почему именно в графическом режиме ?
и почему именно в графическом режиме ?
DELETED
Акула пера
4/25/2006, 12:32:12 AM
(Tranquility @ 24.04.2006 - время: 03:20)нужно написать прогу,только я ничего не понимаю...народ,хелп ми плиз...надо срочно...в начале мая сдавать...
нужна прога которая обеспечивает перевод введенного 10 речного числа в 16ричное и 2ичное в графическом режиме
а)четное число выводится синим цветом,не четное-красным.
б)вывод каждого числа осуществляется в окно с пояснительным комментарием соответствующего цвета.
все это нужно написать на асемблере
Поддерживаю предыдущего оратора. Еще не понял как можно "обеспечить перевод системы счисления в графическом режиме"? Подробнее пожалуйста. Но учти, курсовики за тебя делать никто не будет. Зато сможем по мере сил указать направление движения, и помочь разобраться в сложных местах.
Вообще про перевод систем счисления очень подробно написано здесь, советую ознакомиться. Вполне возможно вопросов больше не возникнет.
нужна прога которая обеспечивает перевод введенного 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
как это сделать?
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>
че-то я не разбирусь
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