Форум программистов, компьютерный форум, киберфорум
Assembler: Windows/protected mode
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/25: Рейтинг темы: голосов - 25, средняя оценка - 4.80
5 / 5 / 4
Регистрация: 21.12.2014
Сообщений: 113

Assembler арифметические действия

18.02.2015, 19:18. Показов 5189. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
1. Написать программный код, выполняющий сложение следующих чисел: –31896 и +675.
2. Написать программный код, выполняющий умножение следующих чисел: –786 и -897.
3. Написать программный код, выполняющий деление следующих чисел: –32 и -16.
4. Написать программный код, увеличивающий значение величины 675 на 1.
5. Написать программный код, выполняющий сложение чисел 39 и 234, используя команду сложения с учетом флага переноса.
6. Написать программный код, уменьшающий значение величины 453 на 1.
7. Написать программный код, выполняющий вычитание величины 453 из величины 131 с заемом.
8. Используя в качестве шаблона пример в листинге 6, сложить величины 394 и 12, представленные в неупакованном формате.



Вычислить заданное целочисленное выражение, используя команды ассемблера. Вывод результата выполнить с помощью функции output из предлгаемого инструментария. Произвести анализ полученных результатов.
1. (a * b / 4 – 1 ) / (41 – b * a + c);
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.02.2015, 19:18
Ответы с готовыми решениями:

Арифметические действия в ассемблере
надо програма на ассемблере которая выполняет такие арифметические действия z= x*y/2+x/3-y/4

Структуры - арифметические действия с дробями
Представить обыкновенную дробь как структуру с полями "числитель" и "знаменатель" и реализовать арифметические операции с дробями. ...

Арифметические действия с двоично-десятичными числами
Не могу понять,как сделать правильно операции. Mov Ax,504h // перевел в двоичную,вышло 111111000 mov Bx,506h //вышло 111111010 add...

7
 Аватар для Alexandr_1982
191 / 90 / 33
Регистрация: 04.11.2013
Сообщений: 473
Записей в блоге: 4
19.03.2015, 19:04
1 задача MASM

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
.486                                    ; create 32 bit code
.model flat, stdcall                    ; 32 bit memory model
option casemap :none                    ; case sensitive
 
include \masm32\include\windows.inc     ; always first
include \masm32\include\gdi32.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
include \masm32\include\msvcrt.inc
includelib \masm32\lib\gdi32.lib
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\msvcrt.lib
 
.data
template db "%d", 0
MsgCaption      db "Iczelion's tutorial no.2",0     
 
.data?
d1 dd ?
d2 dd ?
d3 dd ?
buffer db 512 dup(?)
d5 dd ?
d6 dd ?
 
.code
start:
mov eax, -31896
add eax, 675
mov d3, eax
invoke wsprintf, ADDR buffer, ADDR template, d3
lea eax, buffer
invoke MessageBox, NULL, ADDR buffer, ADDR MsgCaption, MB_OK
 
end start
Добавлено через 21 минуту
Программа вычисления заданного выражения
Code
1
(a * b / 41 ) / (41 – b * a + c);

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
.486                                    ; create 32 bit code
.model flat, stdcall                    ; 32 bit memory model
option casemap :none                    ; case sensitive
 
include \masm32\include\windows.inc     ; always first
include \masm32\include\gdi32.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
include \masm32\include\msvcrt.inc
includelib \masm32\lib\gdi32.lib
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\msvcrt.lib
 
.data
template db "%d", 0
MsgCaption      db "Iczelion's tutorial no.2",0     
 
.data?
d3 dd ?
buffer db 512 dup(?)
a dd ?
b dd ?
c1 dd ?
 
.code
 
start:
mov eax, -2
mov c1, eax
 
mov eax, 4
mov a, eax
 
mov eax, 8
mov b, eax
 
mov eax, a
mul b
mov ebx, 4
div ebx
sub eax, 1
mov ebx, eax
 
mov ecx, 41
mov eax, b
mul a
sub ecx, eax
add ecx, c1
 
mov eax, ebx
div ecx
 
mov d3, eax
invoke wsprintf, ADDR buffer, ADDR template, d3
lea eax, buffer
invoke MessageBox, NULL, ADDR buffer, ADDR MsgCaption, MB_OK
 
end start
1
Terminator of naked apes
 Аватар для KyberMax
832 / 139 / 34
Регистрация: 13.02.2015
Сообщений: 328
20.03.2015, 19:44
Alexandr_1982, атличный тяпничный код, нопремер ;о)
1
Terminator of naked apes
 Аватар для KyberMax
832 / 139 / 34
Регистрация: 13.02.2015
Сообщений: 328
23.03.2015, 20:55
kolas1173, вычисление по формуле, работает в консоли, например ;о)
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
;
.386
.MODEL FLAT, STDCALL
OPTION CASEMAP: NONE
;
INCLUDE \Masm32\INCLUDE\Windows.INC
INCLUDE \Masm32\INCLUDE\Kernel32.INC
INCLUDELIB \Masm32\LIB\Kernel32.LIB
INCLUDE \Masm32\INCLUDE\User32.INC
INCLUDELIB \Masm32\LIB\User32.LIB
INCLUDE \Masm32\INCLUDE\Masm32.INC
INCLUDELIB \Masm32\LIB\Masm32.LIB
;
calcEqu     PROTO
getSignWord PROTO pSz:PSTR
decSd2Cons  PROTO ddSigned:Dword
wrConsole   PROTO pSz:PSTR
rdConsole   PROTO pBuf:PSTR, ndBufLen:Dword
getConsole  PROTO
;
CR          EQU   0Dh
LF          EQU   0Ah
;
.DATA
szAppName   CHAR  "Calculator of Equation"
szEqu       CHAR  " x= (a*b/4 - 1) / (41 - b*a + c)", CR, LF, 0
szOutOfRng  CHAR  " out of range", CR, LF, 0
szExit      CHAR  "  enter empty string to exit"
szCrLf      CHAR  CR, LF, 0
szA         CHAR  " a: ", 0
szB         CHAR  " b: ", 0
szC         CHAR  " c: ", 0
szX         CHAR  " x: ", 0
;
.DATA?
hConOut     HANDLE      ?
hConIn      HANDLE      ?
;
.CODE
START:
      INVOKE getConsole
      INVOKE wrConsole, Addr szAppName
      INVOKE calcEqu
      INVOKE ExitProcess, 0
;
calcEqu PROC Uses EBX EDI
; x= (a*b/4 - 1) / (41 - b*a + c)
LOCAL _a:Dword
LOCAL _b:Dword
LOCAL _c:Dword
      INVOKE wrConsole, Addr szExit
eqloop:
      INVOKE wrConsole, Addr szEqu
geta:
      INVOKE getSignWord, Addr szA
      JZ    exit
      MOV   _a, EAX
getb:
      INVOKE getSignWord, Addr szB
      JZ    geta
      MOV   _b, EAX
;
      INVOKE getSignWord, Addr szC
      JZ    getb
      MOV   _c, EAX
; Calc. first part of equation (a*b/4 - 1)
      MOV   EAX, _a
      IMUL  _b
      MOV   EBX, EAX                ; EBX = a*b
      SHR   EAX, 2                  ; EAX = EAX / 4
      DEC   EAX                     ; EAX = EAX - 1
      MOV   EDI, EAX                ; Save result of first past
; Calc. second part of equation (41 - b*a + c)
      MOV   EAX, 41                 ; EAX = 41
      SUB   EAX, EBX                ; EAX = EAX - EBX = 41 - a*b
      ADD   EAX, _c                 ; EAX = EAX + c = 41 - b*a + c
; Calc. result
      XCHG  EAX, EDI                ; Exchange EAX<->EDI
      CDQ                           ; Extend EAX->EDX:EAX
      IDIV  EDI
      MOV   EBX, EAX                ; Save in EBX
      INVOKE wrConsole, Addr szX
      INVOKE decSd2Cons, EBX
      INVOKE wrConsole, Addr szCrLf
      JMP   eqloop
exit:
      RET
calcEqu ENDP
;
getSignWord PROC Uses EBX psz:PSTR
; Return: EAX = signed dword in signed word range
LOCAL chbuf[16]:CHAR
      LEA   EBX, chbuf
gloop:
      INVOKE wrConsole, psz
      INVOKE rdConsole, EBX, Sizeof chbuf
      JZ    exit
      INVOKE atol, EBX
      MOV   EDX, EAX
      TEST  EDX, EDX
      JNS   @F
      NEG   EDX
@@:
      CMP   EDX, 32768
      CMC
      JNC   exit
      INVOKE wrConsole, Addr szOutOfRng
      JMP   gloop
exit:
      RET
getSignWord ENDP
;
szDecIntFrm CHAR  "%d", 0
decSd2Cons PROC decsd:Dword
LOCAL chbuf[16]: CHAR
      INVOKE wsprintf, Addr chbuf, Addr szDecIntFrm, decsd
      INVOKE wrConsole, Addr chbuf
      RET
decSd2Cons ENDP
;
wrConsole PROC psz:PSTR
LOCAL ndwritten: Dword
      INVOKE lstrlen, psz
      MOV   EDX, EAX
      INVOKE WriteConsole, hConOut, psz, EDX, Addr ndwritten, NULL
      RET
wrConsole ENDP
;
rdConsole PROC Uses EBX pstr:PSTR, ndbuflen:Dword
LOCAL ndread: Dword
      MOV   EBX, pstr
      INVOKE ReadConsole, hConIn, EBX, ndbuflen, Addr ndread, NULL
      MOV   EAX, ndread
      SUB   EAX, 2            ; Cut off CR LF
      MOV   [EBX+EAX], CHAR Ptr 0
      RET
rdConsole ENDP
;
getConsole PROC
      INVOKE GetStdHandle, STD_OUTPUT_HANDLE
      MOV   hConOut, EAX
      INVOKE GetStdHandle, STD_INPUT_HANDLE
      MOV   hConIn, EAX
      RET
getConsole ENDP
;
      END    START
;
Сборка (батничек, например ;о)

---------------->8 Кусать здесь ;о) 8<------------------

\Masm32\bin\Ml /c /coff /nologo CalcEq32.asm
if errorlevel 1 goto EXIT
\Masm32\bin\Link /SUBSYSTEM:CONSOLE /MERGE:.text=.code /LIBPATH:\Masm32\lib CalcEq32.obj
:EXIT

---------------->8 Кусать здесь ;о) 8<------------------

Кстати, прога универсальна: можно переделать под/добавить любую формулу, например ;о) Единственно, что нехорошо, так это процедурка конвертера из Masm32 библиотеки (которая не отлавливает переполнение и нецифровые символы) и консольный ввод (вывод на экран которого не ограничен размером буфера - в досе и то лучше (сам ими не пользуюсь - есть свои библиотеки, но здесь для краткости пришлось, например ;о)
Вложения
Тип файла: zip CalcEq32.zip (916 байт, 4 просмотров)
1
Terminator of naked apes
 Аватар для KyberMax
832 / 139 / 34
Регистрация: 13.02.2015
Сообщений: 328
23.03.2015, 21:35
Для отлавливания деления на ноль добавить в .CODE:
Assembler
1
2
3
4
5
6
7
; Calc. result
      TEST  EAX, EAX
      JNZ   do_xchg
      INVOKE wrConsole, Addr szDivBy0
      JMP   eqloop
do_xchg:
      XCHG  EAX, EDI                ; Exchange EAX<->EDI
и в .DATA
Assembler
1
szDivBy0    CHAR  "  dividing by zero", CR, LF, 0
Такие дела, например ;о)
1
5 / 5 / 4
Регистрация: 21.12.2014
Сообщений: 113
15.10.2015, 22:57  [ТС]
Спасибо, уже разобрался.)
0
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16371 / 7683 / 1080
Регистрация: 11.11.2010
Сообщений: 13,757
16.10.2015, 06:26
kolas1173,
KyberMax твоего спасибо с марта месяца ждал, вот, наверное, обрадуется
2
Terminator of naked apes
 Аватар для KyberMax
832 / 139 / 34
Регистрация: 13.02.2015
Сообщений: 328
17.10.2015, 17:15
kolas1173, только сейчас разобрался? А ты уверен? Ведь как сказано в Евангелии от Святого Лурки, изучение Ассемблера чаще всего кончается плохо для изучающего: ученик становится рабом Ассемблера, теряет волю, сходит с ума и, в лучшем случае, попадает в армию ;о)

Как, кстати, твоё психическое здоровье? Уж не провёл ли ты всё это время в маленькой психиатрической больничке своего большого города, например? ;о)
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.10.2015, 17:15
Помогаю со студенческими работами здесь

Написать программу, выполняющую арифметические действия
2. Написать программу, выполняющую арифметические действия: Желательно с пояснениями...

Арифметические действия над числами. Выбор номера действия. Перевод с Pascal
Арифметические действия над числами пронумерованы следующим образом: 1 — сложение, 2 — вычитание, 3 — умножение, 4 — деление. Дан номер...

7.7 Арифметические действия
Всем доброго дня! Может быть, кто-нибудь подскажет в чем дело. В модуле формы оператор: ВсегоРеализованоТовараБезНДС =...

Арифметические действия
Вычислить значение выражения: а) \chi + \frac{1}{3} + {\left(\chi + \frac{1}{3} \right)}^{2} б) In\left|2 - \frac{1}{{\chi }^{2}}...

Арифметические действия на C++
Подскажите , я новичок в этом , как выглядит код данного действия :


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru