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

Ваш аккаунт

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

Последние темы форума

Показать новые сообщения »

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

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

Assembler. Решить простую задачу

93K
29 мая 2014 года
user322
1 / / 29.05.2014
Решить пример s=a*b/2-k+a/2-b. a, b и k вводятся с клавиатуры. Вывести s. Программа должна быть похожей на эту:

Код:
; Template for console application
.586

.MODEL flat, stdcall

OPTION CASEMAP:NONE

Include kernel32.inc
Include masm32.inc
IncludeLib kernel32.lib
IncludeLib masm32.lib

.CONST
MsgExit DB 13,10,"Press Enter to Exit",0AH,0DH,0
; 0AH,0DH возврат каретки и перевод строки

.DATA
B   SWORD   -6
D   SWORD   11
X   SWORD   ?
fX  SWORD   0 ; старшее слово результата
Zapros  DB  13,10,'Input A',13,10,0
Result  DB  'Result='
ResStr  DB  16 DUP (' '),0

.DATA?
A   SWORD   ?
fA  SWORD   ? ; старшее слово переменной A
Buffer  DB  10 DUP (?)
inbuf   DB  100 DUP (?)

.CODE
Start:
    Invoke StdOut,ADDR Zapros
    Invoke StdIn,ADDR Buffer, LengthOf Buffer
    Invoke StripLF,ADDR Buffer
; Преобразование в SDWORD
    Invoke atol,ADDR Buffer ;результат в EAX
; PTR - модификатор типа, который показывает как нужно трактовать данные по заданному адресу
    mov DWORD PTR A,EAX
;Вычисления
    mov CX,D
    add CX,8; CX:=D+8
    mov BX,B
    dec BX ; BX:=B-1
    mov AX,A
    add AX,D; AX:=A+D
    imul BX     ;DX:AX:=(A+D)*(B-1) умножение на слово
            ;хранящееся в AX
    idiv CX     ; AX:=(DX:AX):CX
    mov X,AX

;Преобразование
    Invoke dwtoa,X,ADDR ResStr
; Вывод
    Invoke StdOut,ADDR Result
    XOR EAX,EAX
    Invoke StdOut,ADDR MsgExit
    Invoke StdIn,ADDR inbuf,LengthOf inbuf

    Invoke ExitProcess,0
End Start

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог