Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2004.05.02;
Скачать: [xml.tar.bz2];

Вниз

Программка на ассемблере   Найти похожие ветки 

 
asm???   (2004-04-07 11:57) [0]

Как написать простую программку на ассемблере, допустим
Вводится число а
Вводится число б
потом они сладываются и выводится результат на экран.
Пожалуйста подскажите, в ассемблере дуб дубом, а надо срочно..


 
sniknik ©   (2004-04-07 12:24) [1]

срочно научится такому не получится, закажи комунибудь за деньги.


 
Vlad Oshin ©   (2004-04-07 12:27) [2]

http://subscribe.ru/archive/comp.prog.assembler/2000.html


 
Digitman ©   (2004-04-07 12:32) [3]

и все это ассемблерное действо, очевидно, должно происходить в опер.системе ХрюНикс)


 
Rouse_ ©   (2004-04-07 12:36) [4]

А что A := A + B; или Inc(A, B) уже неработает?
Обязательно на Асме?


 
syte_ser78 ©   (2004-04-07 12:44) [5]

чтото наподобие

mov ah, 1h
int 21h
mov dh, ah
mov ah, 1h
int 21h
add dh, ah
mov ah, 2h
int 21h


 
syte_ser78 ©   (2004-04-07 12:46) [6]

не, вобщето это кода символов пощитаются


 
}|{yk ©   (2004-04-07 13:25) [7]

ну так на асме же прикольно писать :) Помню программы на 1 кб получались считающие интегралы разных трансцедентных функций, причем тремя методами. На С такая же програмка занимала 50 Кб


 
Vitaly ©   (2004-04-07 13:53) [8]

Помню программы на 1 кб получались считающие интегралы разных трансцедентных функций, причем тремя методами. На С такая же програмка занимала 50 Кб

Это почему ж? :)


 
}|{yk ©   (2004-04-07 14:01) [9]

iostream много жрет. и math
в асме же у меня функция выводящая значение с вершины
стека на экран. А в С я юзал cout которому похрен что выводить
Потому эта универсальность cout оказалась обратно пропорциональна производительности


 
Мараканец ©   (2004-04-07 14:18) [10]

вроде в с компилером TASM были примеры прям точ в точ что тебе нужно....

а если сам хочешь то тут надо еще писать функцию наподобии IntToStr


 
wHammer ©   (2004-04-07 15:00) [11]

TASM: В самом простейшем случае примерно так:

; Умножение двух однознаковых чисел введенных с клавиатуры

DOSSEG

   .MODEL TINY
   .STACK 100h

DATASEG

   _A DB 1
   _B DB 1
   NewStr DB 0Dh,0Ah,"$"
   Itogo  DB "Total: $"

CODESEG
start:

    mov ax,@data
    mov ds,ax

 echolp:

    ; Ввод с клавиатуры первого числа
    mov    ah,1       ; функция DOS ввода с клавиатуры
    int    21h        ; получить следующую клавишу
    sub    al,30h     ; перевел его из символа в число
    push   ax         ; запоминаем ax (а там наше первое число) в стеке

    ; Вывод на экран пары перенос строки/возврат каретки
    mov    dx,offset NewStr
    mov    ah,09h
    int    21h

    ; Ввод с клавиатуры второго числа
    mov    ah,1       ; функция DOS ввода с клавиатуры
    int    21h        ; получить следующую клавишу
    sub    al,30h     ; перевел его из символа в число
    mov    _B,al      ; помещаем р-т в _B

    ; Вывод на экран пары перенос строки/возврат каретки
    mov    dx,offset NewStr
    mov    ah,09h
    int    21h

    pop    ax         ; восставливаем ax из стека
    mul    _B         ; перемножаем _A (находится в al) и _B

    aam               ; получаем десятичный эквивалент числа в ax
    or     ax,3030h   ; получаем символьный эквивалент числа в ax
    mov    _A,al      ; младший знак в _A
    mov    _B,ah      ; старший знак в _B

 EchoDn:
    ; Вывод исходного результата на экран
    mov    dx,offset Itogo
    mov    ah,09h
    int    21h        ; вывести на экран комментарий

    mov    dl,_B      ; поместить символ в DL
    mov    ah,2       ; функция DOS вывода на экран
    int    21h        ; вывести на экран символ

    mov    dl,_A      ; поместить символ в DL
    mov    ah,2       ; функция DOS вывода на экран
    int    21h        ; вывести на экран символ

    ; Завершение работы программы
    mov    ah,4ch     ; функция DOS завершения программы
    int    21h        ; завершить программу

end start


С наилучшими...


 
Vitaly ©   (2004-04-07 15:12) [12]

> }|{yk ©   (07.04.04 14:01) [9]

ты бы еще в форму выводил,
а потом жаловался на размер.


 
}|{yk ©   (2004-04-07 16:00) [13]

а чем прикажешь выводить как не cout???


 
syte_ser78 ©   (2004-04-07 16:36) [14]

CPRINTF


 
syte_ser78 ©   (2004-04-07 16:48) [15]

#include <conio.h>
void main()
{
cprintf("1");
}
10 370 байт

#include <stdio.h>
void main()
{
printf("1");
}
8 804 байт

#include <iostream.h>
void main()
{
cout>>"1";
}
23462 байта


 
syte_ser78 ©   (2004-04-07 16:51) [16]

cout>>"1"; = cout<<"1"; :)


 
}|{yk ©   (2004-04-07 17:10) [17]

Ню-ню.
А рассчеты где?
разница-то в 10 кб. Рассчеты интеграла заняли остальные 30 кб и не думаю что их можно как-то "оптимизировать". получим не 50 а 40 кб
одного порядка размеры :)


 
Vitaly ©   (2004-04-07 17:24) [18]

а как ты их на ассемблере-то вычислял?
и чем сложнее на С?


 
}|{yk ©   (2004-04-07 18:56) [19]

На С это 5 строчек
A степенных функций же на асме нету... и натуральных логарифмов (только двоичные)


 
asm???   (2004-04-07 22:04) [20]

>срочно научится такому не получится, закажи кому нибудь за деньги.
Мне надо было это через час, какой заказ, какие деньги :)))

>А что A := A + B; или Inc(A, B) уже неработает?
Обязательно на Асме?
Обязательно!!!Если бы на делфе, то просто :)))

>syte_ser78 ©   (07.04.04 12:44) [5]
С символами я и сделал, но если бы я сделал с переменными, тогда получил бы "4", в лучшем случае.. :((

>вроде в с компилером TASM были примеры прям точ в точ что тебе нужно....

Примеров у меня не было, у меня было только: Tasm.exe, TLink.exe, TD.exe и все :((

>wHammer ©   (07.04.04 15:00) [11]
Уже не надо, но для себя, т.е. для своего внутреннего удовлетворения попробую :)
А вообще я сделал несколько другое, отличное от вопроса:

;*******************FindNumber.asm*****************************;
;****** Program "FindNuber" **********************************;
;****** Нужно просто угадать цифру :)*************************;
;****** 07.04.2004 г.*****************************************;
;**************************************************************;

masm

model small

.stack 100h

.data ;сегмент данных
Message_input db "Введите число от 0 до 9: $"
message_press_enter db 13,10,"Нажмите "ENTER", для выхода",13,10,"$"
message_Ok db 13,10,"Вы угадали, это цифра 4 ",13,10,"$"
message_error_min db 13,10,"Вы не угадали, Ваша цифра меньше загаданной, попробуйте еще раз!",13,10,"$"
message_error_max db 13,10,"Вы не угадали, Ваша цифра больше загаданной, попробуйте еще раз!",13,10,"$"

.code ;сегмент данных
main:   ;Вход в программу
mov ax, @data ;@data через регистр ax в
mov ds, ax ;регистр ds
jmp input

input:  ;******************************************************;
mov ax, 0 ;Чистим ax
mov dx,offset message_input ;В dx сообщение message_input
 mov ah,09h ;Выводим сообщение message_input
int 21h
;******************************************************;
xor ax,ax ;Очищаем ax
mov ah,1h ;Считываем введенную цифру
int 21h
cmp al,"4" ;Сравнивеам введенную цифру с загаданной цифрой - "4"
jl error_min ;Если меньше
jg error_max ;Если больше
je ok  ;Если равно, то идем на метку Ок
;jnz error ;error <- это гон :))

error_min: ;***************************************************;
xor ax,ax
mov dx,offset message_error_min ;В dx сообщение  message_error_min
mov ah,09h ;Сообщение на экран
int 21h
jmp input ;На метку input, все заново...

error_max: ;***************************************************;
xor ax,ax       ;Чистим регистр  ax
mov dx,offset message_error_max  ;В dx сообщение  message_error_max
mov ah,09h      ;Выводим сообщение
int 21h
jmp input       ;опять вводим сивол.

ok:     ;******************************************************;
xor ax,ax ;Очищаем регистр ax
mov dx,offset message_Ok ;В dx сообщение message_ok
mov ah,09h ;Выводим сообщение
int 21h
jmp exit ;Идем на выход

exit:   ;******************************************************;
xor ax,ax       ;Очищаем ax
mov dx,offset message_press_enter   ;В dx сообщение message_press_enter
mov ah,09h      ;Выводим сообщение
int 21h
mov ah,01h      ;Ждем ввода символа или нажатия Enter
int 21h
mov ax, 4c00h ;Выход
int 21h
;**************************************************************;
end main

З.Ы. Хотя на самом деле даже не знаю, что получил, смотреть не хотел, думал потом в зачетке гляну, а они зачетки для сверки забрали :((, вот сейчас сижу гадаю, толи "3", толи "4", плохо когда не знаешь :( !!!
Ну все равно всем спасибо, но вот если бы чуть, чуть по раньше.....  :)


 
asm???   (2004-04-07 22:10) [21]

< .code ;сегмент данных >
сегмент кода, "ошыпся" :))



Страницы: 1 вся ветка

Форум: "Потрепаться";
Текущий архив: 2004.05.02;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.037 c
3-1081347600
начинаю-щий
2004-04-07 18:20
2004.05.02
Уникальное значение поля


1-1081839242
Vani
2004-04-13 10:54
2004.05.02
Как передать параметр моему проекту в exe


4-1078684563
Volunteer
2004-03-07 21:36
2004.05.02
Как отслеживать нажатие клавиш из Win (XP) ?


7-1079364823
Pul
2004-03-15 18:33
2004.05.02
Как отследить запуск и завершение работы DOS-приложения


14-1081833297
Vlad Oshin
2004-04-13 09:14
2004.05.02
Не поможите найти драйвер для AIC7895p(SCSI) под Win2000?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский