Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер
Регистрация

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

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Ответ
 
Опции темы
Старый 19.01.2013, 22:07   #1
brawn
Новичок
Джуниор
 
Регистрация: 19.01.2013
Сообщений: 1
Восклицание Решить пример на Assembler

Пример: (2*a+3*b)/(a-b)

PHP код:
;Инструкции процессора Pentium
.586P

;Плоская модель памятисоглашение о вызовах в стиле С
.MODEL FLAT,C

;Сегмент данных
DATA SEGMENT

PUBLIC axbz    ;переменныедоступные для внешних модулей

a DW 
?            ;Объявление переменных
x DW 
?
b DB ?
z DB ?
DATA ENDS

;Сегмент кода
CODE SEGMENT

PUBLIC mov_16        ;функциядоступная для внешних модулей

mov_16 PROC        
;определение функции
    MOV AX
,a
    MOV BL
,b
    MOV x
,AX
    MOV z
,BL
    RET
mov_16 ENDP

CODE ENDS
END 
brawn вне форума   Ответить с цитированием
Старый 23.01.2013, 11:31   #2
dim-lo
 
Регистрация: 22.11.2010
Сообщений: 5
По умолчанию

Могу решить на masm32.... с тасмом не работал...
dim-lo вне форума   Ответить с цитированием
Старый 23.01.2013, 13:54   #3
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,155
По умолчанию

brawn
Код:
.286
.model small
.data
a DW 236            ;Объявление переменных 
x DW ? 
b DW 478
.code
start:   mov ax,@data
   mov ds,ax
   mov ax,a; ax=a
   add ax,b; ax=a+b
   shl ax,1; ax=2*a+2*b
   add ax,b; ax=2*a+3*b
   mov cx,a
   sub cx,b; cx=a - b
   cwd
   div cx; ax= (2*a+3*b)/(a-b)
   mov x,ax
   mov ah,4Ch
   int 21h
Mikl___ вне форума   Ответить с цитированием
Старый 25.01.2013, 21:55   #4
dim-lo
 
Регистрация: 22.11.2010
Сообщений: 5
По умолчанию

а чото у меня не вышло решить на masm32.... команда div не срабатывает.... что не так делаю?
;Листинг программы:
.386
.model flat,stdcall
option casemap:none
include C:\masm32\INCLUDE\WINDOWS.INC
include C:\masm32\INCLUDE\KERNEL32.INC
include C:\masm32\INCLUDE\USER32.INC
include C:\masm32\INCLUDE\ADVAPI32.INC

includelib C:\masm32\lib\comctl32.lib
includelib C:\masm32\lib\user32.lib
includelib C:\masm32\lib\gdi32.lib
includelib C:\masm32\lib\kernel32.lib
includelib C:\masm32\lib\user32.lib
includelib C:\masm32\lib\advapi32.lib
;###
;data
;----
.DATA

HINST DWORD 0
FOR_PLUS DD ?
FOR_MINUS DWORD ?
a DW ?
x DW ?
b DB ?
z DB ?
t DW ?
w DW ?

String_SHABLON DB "Равнения (2*a+3*b)/(a-b) = %2x, если a =2, b = 1 ",0
String_CONTENER DB 256 dup (0)
;################################## ##
;code
;-----
.CODE
START:

;-------------
SUB ax , ax ; обнуление регистра
SUB bx , bx ; обнуление регистра
SUB cx , cx ; обнуление регистра
SUB dx , dx ; обнуление регистра

mov dword ptr a , 2 ; заносим в переменную "а" число 2
add ax, a ; проводим операцию добавления
mov byte ptr b , 1 ; заносим в переменную "b" число 1
add bl, b ; проводим операцию добавления
sub ax, bx ; проводим операцию вычисления
mov t, ax ; заносим у переменную t значение с регистра ax

xor ax, ax ; обнуление регистра
xor bx, bx ; обнуление регистра

mov ax , 2
mul dword ptr [a] ; проводим операцию умножения

mov bl , 3
mul byte ptr [b] ; проводим операцию умножения
add ax, bx
mov dx, t
div dx ; вот она не срабатывает ...... вопрос почему? убрал ее и все работает но без деление....HELP
mov w, ax
;------------------------------------------------------------------
invoke wsprintf,\
addr String_CONTENER ,\ ; буфер
addr String_SHABLON , \ ; формат
w ;
;-----------------------------------------------------------------
invoke MessageBox , 0 , addr String_CONTENER ,\
addr String_SHABLON ,\ ; вывод сообщения на экран....
0
;------------------------------------------------------------------
EXIT:
invoke ExitProcess , 0


END START

Последний раз редактировалось dim-lo; 25.01.2013 в 22:07.
dim-lo вне форума   Ответить с цитированием
Старый 25.01.2013, 23:07   #5
kventin_zhuk
БНТУ ФИТР
Форумчанин
 
Аватар для kventin_zhuk
 
Регистрация: 20.05.2012
Сообщений: 315
По умолчанию

Cмените регистр DX на другой. При делении слова на слово целая часть заносится в AX, а остаток в DX, а вы на DX делите. Также нужно чтобы при делении в DX было < 10 - иначе будет опять переполнение деления.
С++(console/builder/WinAPI/Linux), C#, Pascal, Delphi, Asm, Prolog.
< ----- Контакты
kventin_zhuk@live.com

Последний раз редактировалось kventin_zhuk; 25.01.2013 в 23:11.
kventin_zhuk вне форума   Ответить с цитированием
Старый 04.02.2013, 22:56   #6
dim-lo
 
Регистрация: 22.11.2010
Сообщений: 5
Сообщение

;так точно, спасибо, совсем вылетело из головы, спасибо, изменил концовку:

mov bl , 3
mul byte ptr [b] ; проводим операцию умножения
add ax, bx

SUB bx , bx ; обнулением регистры
SUB cx , cx
SUB dx , dx


mov bx, t
div bx
; проводим операцию деления
mov w, ax ; переводим с регистра в переменную и на дальнейший вывод....

Последний раз редактировалось dim-lo; 04.02.2013 в 22:59.
dim-lo вне форума   Ответить с цитированием
Ответ
Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Пример с использованием переходов(Assembler) C1keu Помощь студентам 0 13.12.2010 14:37
[C++] Как решить пример ? Divoha Помощь студентам 6 27.06.2009 19:44
Решить пример Divoha Общие вопросы C/C++ 9 27.06.2009 16:11