Форум программистов, компьютерный форум, киберфорум
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/18: Рейтинг темы: голосов - 18, средняя оценка - 4.72
0 / 0 / 0
Регистрация: 26.06.2019
Сообщений: 9
1

Что означают определённые зарезервированные слова в ассемблере?

27.06.2019, 01:21. Показов 3316. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброй ночи. Буду признателен, если вы поможете мне разобраться с зарезервированными словами в 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
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
.386
 
.model flat, stdcall
option casemap: none
 
include windows.inc
include kernel32.inc
include user32.inc
include masm32.inc
 
includelib masm32.lib
includelib kernel32.lib
includelib user32.lib
 
.data
msg db 0Dh, 0Ah, 'Insert the number N > 1:', 0Dh, 0Ah, 0
msgOutput db 0Dh, 0Ah, 'nth member of the Fibonacci = ',0
aszPressEnter db 0Dh, 0Ah, 0Dh, 0Ah, "Press ENTER to exit", 0
aszInteger db '%d', 0
 
;переменная типа byte которую записывается наше число
number byte 32 dup (0)
 
;для преобразование введенного числа
sss dd 0
ddd dd 0
 
.data?
stdin DWORD ?
stdout DWORD ?
cWritten DWORD ?
cRead DWORD ?
 
hConsoleOutput HANDLE ?
hConsoleInput HANDLE ?
Buffer db 1024 dup(?)
BufLen dd ?
 
.code
 
getNumbers:
;получение описателей ввода и вывода консоли
invoke GetStdHandle, STD_INPUT_HANDLE
mov stdin, EAX
invoke GetStdHandle, STD_OUTPUT_HANDLE
mov stdout, EAX
 
invoke ReadConsoleA, stdin, ADDR number, sizeof number, ADDR cRead, 0
;в number содержиться введенное число (тип - строка)
invoke atodw, offset number
;почему-то при использовании atodw (преобразование из ascii в число) число получается умноженным на 100 + 2428
;испраляем
mov sss, EAX
add sss, -2428 ;отнимаем 2428
mov EAX, sss
mov ddd, 100
div ddd ;делим на 100
mov sss, EAX ;число тут остаеться
ret 12
 
showNthNumberFibonacci:
invoke wsprintf, ADDR number, ADDR aszInteger, ebx ;формируем число для вывода
invoke WriteConsoleA, stdout, ADDR number,\
sizeof number, ADDR cWritten, 0
ret 12
 
fib proc
;Аргумент функции передается через регистр EAX, а
;значение возвращается через регистр EBX:
; EBX=F(N) - число Фибоначчи с номером N (EAX=N)
cmp eax,1 ; if(N > 1) перейти к f
ja short f
mov ebx,1
retn
;нерекурсивная вевть
f:
push eax ;сохраняем eax
dec eax ;eax = N - 1
call fib
push ebx ;сахраняем ebx=f(N-1)
dec eax ;eax=f(N-2)
call fib
pop eax ;eax=f(n-1)
add ebx,eax ;ebx=f(N)=f(n-2)+f(n-1)
pop eax ;востанавливаем исходное значение в eax
ret
fib endp
 
exit:
;ожидание нажания ENTER
invoke WriteConsole, hConsoleOutput, ADDR aszPressEnter,\
LENGTHOF aszPressEnter - 1, ADDR BufLen, NULL
invoke ReadConsole, hConsoleInput, ADDR Buffer,\
LENGTHOF Buffer, ADDR BufLen, NULL
;закрытие консоли, после нажания ENTER
invoke ExitProcess, 0
ret 12
 
start:
;получение описателей ввода и вывода консоли
invoke GetStdHandle, STD_INPUT_HANDLE
mov hConsoleInput, eax
invoke GetStdHandle, STD_OUTPUT_HANDLE
mov hConsoleOutput, eax
 
invoke WriteConsole, hConsoleOutput, ADDR msg,\
LENGTHOF msg - 1, ADDR BufLen, NULL
call getNumbers ;вызоваем ф-ию для ввода числа с клавиатуры
mov eax,sss ;загружаем в регистр наше число
call fib ;вызываем функцию для подсчета н-го числа последовательности Фибоначчи
 
invoke WriteConsole, hConsoleOutput, ADDR msgOutput,\
LENGTHOF msgOutput - 1, ADDR BufLen, NULL
call showNthNumberFibonacci ;выводим н-ый член последовательности Фибоначчи
call exit
 
 
end start
Что означает тот же invoke или конструкция:
Assembler
1
2
3
4
invoke WriteConsole, hConsoleOutput, ADDR aszPressEnter,\
LENGTHOF aszPressEnter - 1, ADDR BufLen, NULL
invoke ReadConsole, hConsoleInput, ADDR Buffer,\
LENGTHOF Buffer, ADDR BufLen, NULL
как это правильно гуглить?
большое спасибо, а то уж очень хочется ознакомиться.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.06.2019, 01:21
Ответы с готовыми решениями:

Кто разбирается в ассемблере и строении ELF файлов? Что означают байты перед сегментом кода?
Здравия всем! Пишу трансплайер своего ЯПа на fasm, на данный момент работаю с компиляцией под...

Что означают слова программиста
Нашел на каком - то сайте.

Что означают слова INPUT,THEN и.д
Что означают слова INPUT,THEN и.д

Что означают сии слова в СЕО
дискриптион, кейворд. Как связаны ключевые слова сеотекста, с этими терминами?

3
Ушел с форума
Автор FAQ
16279 / 7604 / 1065
Регистрация: 11.11.2010
Сообщений: 13,617
27.06.2019, 05:49 2
Цитата Сообщение от machineprogress Посмотреть сообщение
Что означает тот же invoke или конструкция:
Assembler
1
2
3
4
invoke WriteConsole, hConsoleOutput, ADDR aszPressEnter,\
LENGTHOF aszPressEnter - 1, ADDR BufLen, NULL
invoke ReadConsole, hConsoleInput, ADDR Buffer,\
LENGTHOF Buffer, ADDR BufLen, NULL
как это правильно гуглить?
Создание консольных приложений в 64-разрядной Windows Seven
1
6770 / 2739 / 384
Регистрация: 17.02.2013
Сообщений: 4,047
27.06.2019, 11:24 3
Что означает тот же invoke или конструкция:
invoke это не зарезервированное слово, а макрос, который был написан чтобы избавить программиста от рутинной работы прописывать грядки push-ей с заталкиванием в стек аргументов перед вызовом функции (обычно функций Windows-API у которых типично толпы аргументов).

invoke name, par1, par2, par3, par4, par5
если опустить детали, как макрос раскрывается в
push par5
push par4
push par3
push par2
push par1
call name
и потом уже ассемблер это компилирует.

Добавлено через 4 минуты
как это правильно гуглить?
Берешь первый аргумент у invoke , например WriteConsole и пишешь в поисковой строке приставляя API , например
WriteConsole API
и в вывалившем результате поиска смотришь MSDN ( msdn.microsoft.com ) или Microsoft Docs ( docs.microsoft.com ) и вот там исчерпывающее описание данной функции Windows-API на английском.
2
3406 / 1825 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
27.06.2019, 20:44 4
machineprogress,
не MSDN, но на русском

Цитата Сообщение от Ethereal Посмотреть сообщение
invoke это не зарезервированное слово, а макрос, который был написан чтобы избавить программиста от рутинной работы прописывать грядки push-ей с заталкиванием в стек аргументов перед вызовом функции
В TASM(2+, нужно будет ещё в 1.0 проверить ) - CALL - уже был макросом. С аргументами - макрос, без - команда процессора. И без всяких PROTO.
1
27.06.2019, 20:44
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.06.2019, 20:44
Помогаю со студенческими работами здесь

[Basics] Что означают слова до начала ввода команды?
sssit@JavaTpoint:~$ pwd Что значат sssit@JavaTpoint:~$?

Что означают ключевые слова default, delete и зачем они нужны
Собственно сабж. Часто встречаю что методу можно присвоить какое то значение, например virtual...

Зарезервированные слова в Delphi
как сделать проверку, что все зарезервированные слова типа (var, function, begin, end и т.д.)...

Перечислить по алфавиту все зарезервированные слова используемые в файле
Необходимо перечислить по алфавиту все зарезервированные слова, используемые в файле, и указать...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru