Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Ассемблер

17K
14 мая 2006 года
Tranquility
7 / / 14.05.2006
нужно написать прогу,только я ничего не понимаю...народ,хелп ми плиз...надо срочно...

нужна прога которая обеспечивает перевод введенного 10 речного числа в 16ричное и 2ичное в графическом режиме
а)четное число выводится синим цветом,не четное-красным.
б)вывод каждого числа осуществляется в окно с пояснительным комментарием соответствующего цвета.

все это нужно написать на асемблере
5.3K
14 мая 2006 года
r000n_m
177 / / 26.02.2006
Разные цвета - это все фигня. А вот про какое окно говоришь? Писать надо под DOS или винду?
17K
15 мая 2006 года
Tranquility
7 / / 14.05.2006
окно,это я так понимаю что-то вроде формы на которой есть куда вводить числа,где можно увидеть результат,ну и наверно в ней должно быть место,где выводятся коментарии
17K
23 мая 2006 года
Tranquility
7 / / 14.05.2006
ой,я те наврала по поводу окна...а подо что писать легче?
5.3K
24 мая 2006 года
r000n_m
177 / / 26.02.2006
Обычно учебные программы пишут под DOS.
Кстати, сколько цифр должно быть в введенном числе?
17K
25 мая 2006 года
Tranquility
7 / / 14.05.2006
ну сказано из десятеричного переводить
242
25 мая 2006 года
Оlga
2.2K / / 04.02.2006
Цитата:
Originally posted by r000n_m
Обычно учебные программы пишут под DOS.
Кстати, сколько цифр должно быть в введенном числе?



в том асм-е что я учила :) числа считывали в строках. все мелочи не помню, при вызове интерапта, который считывает строку, я ему адресс памяти
куда ее грузить + максимальный ее размер, в результате получаем введеную строку по указанному адресу + первый байт памяти отведенный
на сохранение числа строки содержал ее размер(максимум 255 символов)

5.3K
25 мая 2006 года
r000n_m
177 / / 26.02.2006
Цитата:
Originally posted by OlgaKr
в том асм-е что я учила :)


Просто если длина 3-4 десятичных цифры, то алгоритм упрощается.

Вот функция ввода

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

17K
25 мая 2006 года
Tranquility
7 / / 14.05.2006
ух ты,здорово!!!
этот текст проги то что мне надо?
не сочтите меня по уши деревянной,но это,по идее,забивается в комп через командную строку,а как это сделать?

вот что оно мне выдает:
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 (c) 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>
5.3K
26 мая 2006 года
r000n_m
177 / / 26.02.2006
Цитата:
Originally posted by Tranquility
нужна прога которая обеспечивает... в графическом режиме


Обязательно в графическом? Может текстовой цветной пойдет? (там наработки есть)

P.S. Это не прога целиком, а только лишь функция ввода...

17K
29 мая 2006 года
Tranquility
7 / / 14.05.2006
сегодня видела как она должна выглядеть...
представь черный экран,на нем написано "введите число"
под этой строчкой начерчено окошко,в которое вводить,далее ниже написано "шестнадцатиричное" ниже окошко,где высвечивается оно,а еще ниже "двоичное" по той же схеме с окошком.
вот.
17K
29 мая 2006 года
Tranquility
7 / / 14.05.2006
вот примерно так выглядело
5.3K
02 июня 2006 года
r000n_m
177 / / 26.02.2006
Tranquility, извини за долгое ожидание. Никак не получается использовать графический режим средствами BIOS. Делаю все по доке, а прога у меня зависает.

Если запускать не из-под Винды, то можно сделать с BIOS'ом

Так что сделал в стандартном текстовом. Могу в цветной текстовой перевести, в 16 цветов.

А с графикой, похоже придется сложнее. Скачал доков по EGA,VGA,SVGA, сижу, мозгую

stacksegment segment para stack 'stack'
dw 10h dup(?)
stacksegment ends

datasegment segment para public 'data'
;---------------- declarations of the variables -----------
msgInput db 'Input DEC',13,10,24h
msgStringGived db 13,10,'Ok',13,10,24h

result dw ?

Minus db 0
msgInputAddr dw ?
msgStringGivedAddr dw ?
MinusAddr dw ?

HEX_string db 'HEX: '
out_ db 4 dup(0),13,10,24h
BIN_string db 'BIN: '
out_2 db 16 dup(0),13,10,24h
;----------------------------------------------------------
datasegment ends

codesegment segment para public 'code'

assume cs:codesegment, ds:datasegment, ss:stacksegment

start:
mov ax,datasegment
mov ds,ax

mov ax,offset Minus
mov MinusAddr,ax

mov ax,offset msgInput
mov msgInputAddr,ax
mov ax,offset msgStringGived
mov msgStringGivedAddr,ax
call ascbin

mov bx,3
mov si,0
fill_out:
mov al,byte ptr [result+si]
inc si
mov cl,al
and al,0Fh
or al,30h
cmp al,39h
jbe next
add al,7
next:
mov byte ptr [out_+bx],al
dec bx
mov al,cl
and al,0F0h
shr al,4
or al,30h
cmp al,39h
jbe next_2
add al,7
next_2:
mov byte ptr [out_+bx],al
dec bx
cmp bx,0
jnl fill_out


mov dx,offset HEX_string
mov ah,09h
int 21h

mov bx,1
mov si,15

calc_:
mov ax,result
test ax,bx
jz zero_
mov dl,1
mov byte ptr[out_2+si],dl
zero_:
mov dl,30h
add byte ptr[out_2+si],dl

dec si
shl bx,1
cmp bx,0
jne calc_

mov dx,offset BIN_string
mov ah,09h
int 21h

;-------- exit ----
mov ax,4c00h
int 21h
;------------------


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,dx ;lo byte from DX

mov dx,word ptr [msgStringGivedAddr]
mov ah,09h
int 21h
pop cx
;output data come back through data's segment
ret
;=======================================================
ascbin endp


codesegment ends

end start
5.3K
02 июня 2006 года
r000n_m
177 / / 26.02.2006
Теперь текстовой цветной режим

stacksegment segment para stack 'stack'
dw 10h dup(?)
stacksegment ends

;colors
dark_blue = 1
green = 2
blue = 3
red = 4
bgBlue = 16
bgGreen = 32
bgLightBlue = 48
bgRed = 64

datasegment segment para public 'data'
;---------------- declarations of the variables -----------
msgInput db 'Input DEC',13,10,24h
msgStringGived db 'Ok',13,10,24h

result dw ?

Minus db 0
msgInputAddr dw ?
msgStringGivedAddr dw ?
MinusAddr dw ?

HEX_string db 'HEX: '
out_ db 4 dup(0),13,10,24h
BIN_string db 'BIN: '
out_2 db 16 dup(0),13,10,24h

video_out__temp dw 0
curr_sym db 0
;----------------------------------------------------------
datasegment ends

codesegment segment para public 'code'

assume cs:codesegment, ds:datasegment, ss:stacksegment

start:
mov ax,datasegment
mov ds,ax
mov ax,0B800h
mov es,ax

call VIDEOMEM_CLEAR

mov ax,offset Minus
mov MinusAddr,ax

mov ax,offset msgInput
mov msgInputAddr,ax
mov ax,offset msgStringGived
mov msgStringGivedAddr,ax
call ascbin

mov bx,3
mov si,0
fill_out:
mov al,byte ptr [result+si]
inc si
mov cl,al
and al,0Fh
or al,30h
cmp al,39h
jbe next
add al,7
next:
mov byte ptr [out_+bx],al
dec bx
mov al,cl
and al,0F0h
shr al,4
or al,30h
cmp al,39h
jbe next_2
add al,7
next_2:
mov byte ptr [out_+bx],al
dec bx
cmp bx,0
jnl fill_out


mov al,green
mov bx,offset HEX_string
call VIDEO_OUT_STRING

mov bx,1
mov si,15

calc_:
mov ax,result
test ax,bx
jz zero_
mov dl,1
mov byte ptr[out_2+si],dl
zero_:
mov dl,30h
add byte ptr[out_2+si],dl

dec si
shl bx,1
cmp bx,0
jne calc_

mov al,green
mov bx,offset BIN_string
call VIDEO_OUT_STRING

;-------- exit ----
mov ax,4c00h
int 21h
;------------------


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 bx,word ptr [msgInputAddr]
mov al,green
call VIDEO_OUT_STRING

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,08h
int 21h
jz wait_any_key_n0
Symbol_not_equal_Minus:
cmp al,30h
jl NotDigitSymbol
cmp al,39h
jg NotDigitSymbol2
;DigitSymbol
mov curr_sym,al
mov bx,offset curr_sym
mov al,green
call VIDEO_OUT_SYMBOL
mov al,curr_sym

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,dx ;lo byte from DX

mov di,video_out__temp
add di,160
mov ax,di
mov bl,160
div bl
xor ah,ah
mul bl
;in ax - rounded di (begin of the string)
mov di,ax
mov video_out__temp,di

mov bx,word ptr [msgStringGivedAddr]
mov al,green
call VIDEO_OUT_STRING
pop cx
;output data come back through data's segment
ret
;=======================================================
ascbin endp

VIDEO_OUT_STRING proc
mov di,video_out__temp
mov si,bx
label_video_out:
movsb
stosb
cmp byte ptr [si],13
jne no_13
;13
add di,160 ;80 symbols
inc si
no_13:
cmp byte ptr [si],10
jne no_10
;10
push ax
push bx
mov ax,di
mov bl,160
div bl
xor ah,ah
mul bl
;in ax - rounded di (begin of the string)
mov di,ax
pop bx
pop ax
inc si
no_10:
cmp byte ptr [si],24h ;'$'?
jne label_video_out
mov video_out__temp,di
ret
endp

VIDEO_OUT_SYMBOL proc
mov di,video_out__temp
mov si,bx
movsb
stosb
mov video_out__temp,di
ret
endp

VIDEOMEM_CLEAR proc
mov di,0
mov cx,4000
rep stosb
ret
endp

codesegment ends

end start
5.3K
02 июня 2006 года
r000n_m
177 / / 26.02.2006
Скриншот 2-го случая
5.3K
02 июня 2006 года
r000n_m
177 / / 26.02.2006
Текстовой цветной с распознаванием четных/нечетных

stacksegment segment para stack 'stack'
dw 10h dup(?)
stacksegment ends

;colors
dark_blue = 1
green = 2
blue = 3
red = 4
bgBlue = 16
bgGreen = 32
bgLightBlue = 48
bgRed = 64

datasegment segment para public 'data'
;---------------- declarations of the variables -----------
msgInput db 'Input DEC',13,10,24h
msgStringGived db 'Ok',13,10,24h

result dw ?

Minus db 0
msgInputAddr dw ?
msgStringGivedAddr dw ?
MinusAddr dw ?

HEX_string db 'HEX: '
out_ db 4 dup(0),13,10,24h
BIN_string db 'BIN: '
out_2 db 16 dup(0),13,10,24h

video_out__temp dw 0
curr_sym db 0

color db 0
;----------------------------------------------------------
datasegment ends

codesegment segment para public 'code'

assume cs:codesegment, ds:datasegment, ss:stacksegment

start:
mov ax,datasegment
mov ds,ax
mov ax,0B800h
mov es,ax

call VIDEOMEM_CLEAR

mov ax,offset Minus
mov MinusAddr,ax

mov ax,offset msgInput
mov msgInputAddr,ax
mov ax,offset msgStringGived
mov msgStringGivedAddr,ax
call ascbin

mov ax,result
test ax,1
jnz not_parity
;parity
mov color,blue
jmp after_par
not_parity:
mov color,red
after_par:

mov bx,3
mov si,0
fill_out:
mov al,byte ptr [result+si]
inc si
mov cl,al
and al,0Fh
or al,30h
cmp al,39h
jbe next
add al,7
next:
mov byte ptr [out_+bx],al
dec bx
mov al,cl
and al,0F0h
shr al,4
or al,30h
cmp al,39h
jbe next_2
add al,7
next_2:
mov byte ptr [out_+bx],al
dec bx
cmp bx,0
jnl fill_out


mov al,color
mov bx,offset HEX_string
call VIDEO_OUT_STRING

mov bx,1
mov si,15

calc_:
mov ax,result
test ax,bx
jz zero_
mov dl,1
mov byte ptr[out_2+si],dl
zero_:
mov dl,30h
add byte ptr[out_2+si],dl

dec si
shl bx,1
cmp bx,0
jne calc_

mov al,color
mov bx,offset BIN_string
call VIDEO_OUT_STRING

;-------- exit ----
mov ax,4c00h
int 21h
;------------------


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 bx,word ptr [msgInputAddr]
mov al,green
call VIDEO_OUT_STRING

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,08h
int 21h
jz wait_any_key_n0
Symbol_not_equal_Minus:
cmp al,30h
jl NotDigitSymbol
cmp al,39h
jg NotDigitSymbol2
;DigitSymbol
mov curr_sym,al
mov bx,offset curr_sym
mov al,green
call VIDEO_OUT_SYMBOL
mov al,curr_sym

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,dx ;lo byte from DX

mov di,video_out__temp
add di,160
mov ax,di
mov bl,160
div bl
xor ah,ah
mul bl
;in ax - rounded di (begin of the string)
mov di,ax
mov video_out__temp,di

mov bx,word ptr [msgStringGivedAddr]
mov al,green
call VIDEO_OUT_STRING
pop cx
;output data come back through data's segment
ret
;=======================================================
ascbin endp

VIDEO_OUT_STRING proc
mov di,video_out__temp
mov si,bx
label_video_out:
movsb
stosb
cmp byte ptr [si],13
jne no_13
;13
add di,160 ;80 symbols
inc si
no_13:
cmp byte ptr [si],10
jne no_10
;10
push ax
push bx
mov ax,di
mov bl,160
div bl
xor ah,ah
mul bl
;in ax - rounded di (begin of the string)
mov di,ax
pop bx
pop ax
inc si
no_10:
cmp byte ptr [si],24h ;'$'?
jne label_video_out
mov video_out__temp,di
ret
endp

VIDEO_OUT_SYMBOL proc
mov di,video_out__temp
mov si,bx
movsb
stosb
mov video_out__temp,di
ret
endp

VIDEOMEM_CLEAR proc
mov di,0
mov cx,4000
rep stosb
ret
endp

codesegment ends

end start
5.3K
02 июня 2006 года
r000n_m
177 / / 26.02.2006
Скриншотик
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог