Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.11.2012, 16:23   #1
mary1010
Пользователь
 
Регистрация: 16.09.2012
Сообщений: 14
Восклицание assembler условный оператор

Задали написать программку на ассемблере и паскале....со вторым справилась, а в асме не знаю даже с чего начать...
Задание: Определить попадает ли точка с заданными координатами в 1 или 3 четверть. Ответ сообщение.

Код:
Program z1;
uses crt;
var
a,b:integer;
begin
writeln ('enter a and b');
read(a); read(b);
if (a>0) and (b>0) then writeln('point belongs to 1 quarter')
else if (a<0) and (b<0) then  writeln('point belongs to 3 quarter')
else writeln('point doesnt belong neither to 1 quarter nor to 3');
readln;
readln;
end.
mary1010 вне форума Ответить с цитированием
Старый 17.11.2012, 21:43   #2
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Если согласны пользоваться сборщиком MASM (есть ещё FASM, TASM и т.д.), то предлагаю начать в таком порядке:
- начните читать книгу Крупника "Изучаем ассемблер"
- из начала книги вы узнаете, где скачать инструментарий и как им пользоваться
- если появятся проблемы в ходе решения задачи, то пишите здесь, вам помогут
8Observer8 вне форума Ответить с цитированием
Старый 19.11.2012, 22:01   #3
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Написал вашу программу в отладчике Ollydbg, правда не хватает ввода/вывода.

Вывод д.б. в строках, где комментарии:


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

sum.asm
Код:
.386                                                          ; инструкции для процессора 386-го
.model flat, stdcall                                          ; flat - плоская модель памяти
option casemap:none                                           ; stdcall - перед вызовом функции аргументы заталкиваются, начиная с правого

include c:\masm32\include\windows.inc                         ; в этом файле хранится константа NULL
include c:\masm32\include\kernel32.inc                        ; в этом файле (объявление) прототип функции ExitProcess
include c:\masm32\include\user32.inc                          ; в этом файле (объявление) прототип функции wsprintf
include c:\masm32\include\masm32.inc                          ; в этом файле (объявление) прототип функции atol

includelib c:\masm32\lib\kernel32.lib                         ; в этом файле машинный код функции ExitProcess
includelib c:\masm32\lib\user32.lib                           ; в этом файле машинный код функции wsprintf
includelib c:\masm32\lib\masm32.lib                           ; в этом файле машинный код функции atol

.const
BSIZE       equ   100                                         ; размер буфера для символьных данных

.data                                                         ; секция переменных (действует до любой следующей секции)
linefmt     db    "result = %d", 0
val_1       dd    0                                           ; первое слагаемое
val_2       dd    0                                           ; второе слагаемое
sum         dd    0                                           ; сумма

.data?                                                        ; секция неинициализированных переменных (действует до любой следующей секции)
buf         db    BSIZE dup(?)
stdout      dd    ?                                           ; переменная для хранения handle'a стандартного вывода
cWritten    dd    ?                                           ; переменная для хранения числа выведенных в консоль символов
stdin       dd    ?
cRead       dd    ?
.code                                                         ; начинается секция кода
start:
    invoke GetStdHandle, STD_INPUT_HANDLE                     ; получаем handle стандартного вывода в консоль
    mov stdin, eax                                            ;

    invoke ReadConsole, stdin, ADDR buf, \                    ; считываем первое слагаемое из консоли
                        BSIZE, ADDR cRead, NULL               ;
    mov eax, offset buf                                       ;
    add eax, cRead                                            ;
    sub eax, 2                                                ;
    mov byte ptr [eax], 0                                     ;

    invoke atol, addr buf                                     ; переводим содержимое символьного буфера в число
    mov val_1, eax                                            ; сохраняем первое слагаемое


    invoke ReadConsole, stdin, ADDR buf, \                    ; считываем первое слагаемое из консоли
                        BSIZE, ADDR cRead, NULL               ;
    mov eax, offset buf                                       ;
    add eax, cRead                                            ;
    sub eax, 2                                                ;
    mov byte ptr [eax], 0                                     ;

    invoke atol, addr buf                                     ; переводим содержимое символьного буфера в число
    mov val_2, eax                                            ; сохраняем второе слагаемое


    mov eax, val_1                                            ; подсчёт суммы
    add eax, val_2                                            ;                
    mov sum, eax                                              ;


    invoke wsprintf, addr buf, addr linefmt, sum              ; преобразуем число в символьный массив


    invoke GetStdHandle, STD_OUTPUT_HANDLE                    ; получаем handle стандартного вывода в консоль
    mov stdout, eax                                           ;

    invoke WriteConsole, stdout, addr buf, \                  ; выводим содержимое буфера buf на экран
                         sizeof buf, addr cWritten, NULL      ; 
    invoke ExitProcess, 0                                     ; завершаем процесс
end start                                                     ; заканчивается секция кода

Последний раз редактировалось 8Observer8; 19.11.2012 в 22:08.
8Observer8 вне форума Ответить с цитированием
Старый 19.11.2012, 22:06   #4
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

amake.bat
Цитата:
ml /c /coff "%1.asm"
link /SUBSYSTEM:CONSOLE "%1.obj"
P.S. Теперь вы сможете всё соединить вместе.
8Observer8 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Условный оператор,оператор цикла и массив Klark73 Microsoft Office Excel 1 19.12.2011 17:09
Условный оператор. Оператор выбора. евгенийзууу Паскаль, Turbo Pascal, PascalABC.NET 3 05.12.2011 14:37
Оператор выбора или условный оператор[Перенесено из JavaSE] merhaba1992 Помощь студентам 1 20.01.2011 17:06
Условный оператор. Оператор выбора. Pascal Сержuk Помощь студентам 4 17.11.2010 12:50