Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.02;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.026 c
8-1075968210
SH
2004-02-05 11:03
2004.05.02
Чёрнобелый Jpeg


3-1081324066
Julia_
2004-04-07 11:47
2004.05.02
Table has meny users


1-1082100085
ZDDR
2004-04-16 11:21
2004.05.02
Locker


3-1081189645
leonidus
2004-04-05 22:27
2004.05.02
Проблема с кодировкой DBF


3-1081149365
Brain Force
2004-04-05 11:16
2004.05.02
Форма для добавления поля в DBGrid(Eh)