Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 30.01.2015
Сообщений: 32
1

Объясните задачку

08.06.2015, 12:57. Показов 1186. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
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
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
;  Фирма "Сахарок" продала M тонн сахара по цене 12 руб./кг
;и получила прибыль, равную N%.
;Какую прибыль в рублях получила данная фирма?
 
format PE GUI 4.0   ;специальный формат исполнимых файлов для Windows — формат PE (Portable Executable)
entry start
 
include '\win32a.inc'   ; подключаем библиотеку win32a.inc (необходимо указать точный путь к файлу win32a.inc)
;include 'INCLUDE\win32a.inc'
ID_NACHAL      = 101    ;  дескриптор для строки ввода закупленного сахара
ID_PROCENT    = 102    ;  дескриптор для строки ввода испорченного сахара
 
section '.data' data readable writeable       ; блок описания используемых в программе данных
 
  nachal  rb 10     ; зарезервируем 10 байт для ввода начального сахара
  procent rb 10     ; зарезервируем 10 байт для ввода процента прибыли
  caption db 'Ответ',0    ;заголовок для окна с ответом
  message db 'Прибыль в рублях   ',0 ; шаблон текста ответа
  sys   dd 10  ; переменная для перевода из цифрового формата в текстовый в десятичной системе счисления
  sto   dd 10 ; переменная для умножения на 10
  vvv   dd 1200
section '.code' code readable executable    ; блок описания кода программы
 
  start:
    xor  eax,eax      ;ЕАХ=0
    invoke  DialogBoxParam,eax,37,HWND_DESKTOP,DialogProc,0  ;открываем окно используя процедуру DialogProc
    or  eax,eax       
    jz  exit         
    lea esi, [nachal] 
    call    StrToInt      
    mov ebx, eax      
    lea esi, [procent] 
    call    StrToInt      
    mul [vvv]        
    mul ebx       
    mov ebx, eax     
    lea esi, [message+17] ;ESI=адрес строки message+17 (для вывода результата в шаблон ответа)
    call  IntToStr        ;вызов процедуры перевода целого числа из регистра EAX в строку по адресу из регистра ESI
    invoke  MessageBox,HWND_DESKTOP,message,caption,MB_OK ;api функция вывода сообщения на экран
  exit:
    invoke  ExitProcess,0  ; api функция для завершения программы
 
proc IntToStr; eax - число, esi - адрес строки для вывода
 
pushad
mov ebx,10
xor ecx,ecx
;------ загоняем в стек, начиная с младших разрядов
start1:
cmp eax,0
je end1
xor edx,edx
div ebx
or dl,30h
push edx
inc ecx
jmp start1
end1:
;------ читаем из стека в буфер
start3:
cmp ecx,0
je end3
pop eax
mov [esi],al
inc esi
dec ecx
jmp start3
end3:
popad
return
endp
;********************************************************************************************
proc StrToInt ;(esi-строка):eax-число,esi-остаток строки,ecx-прочитано цифр enter
 
xor eax,eax ; Результат
xor ecx,ecx ; Счетчик числа символов
;mov [sys],10 ; Определяет систему счисления
.l:
mul [sys]
;or edx,edx
;jnz .exit
; считываем символ из строки
movzx edx,byte [esi]
sub dl,30h
jc .err
cmp dl,9h
; если dl меньше 9h, то переход дальше
jle .next
sub dl,7h
.next:
cmp dl,byte [sys]
jnc .err
add eax,edx
jc .err2
; Увеличиваем ecx (число символов на единицу)
inc ecx
; Смещаем указатель на следующий символ
inc esi
; Повторяем все со следующим символом
jmp .l
.err2:
sub eax,edx
.err:
xor edx,edx
.exit:
div [sys]
return
endp
proc DialogProc,hwnddlg,msg,wparam,lparam
    push    ebx esi edi
    cmp [msg],WM_INITDIALOG
    je  processed
    cmp [msg],WM_COMMAND
    je  wmcommand
    cmp [msg],WM_CLOSE
    je  wmclose
    xor eax,eax
    jmp finish
 wmcommand:
    cmp [wparam],BN_CLICKED shl 16 + IDCANCEL
    je  wmclose
    cmp [wparam],BN_CLICKED shl 16 + IDOK
    jne processed
    invoke  GetDlgItemText,[hwnddlg],ID_NACHAL ,nachal,3     ; api функция получения 3-х байт текста в переменную zakupl из объекта имеющего идентификатор ID_ZAKUPL
    invoke  GetDlgItemText,[hwnddlg],ID_PROCENT,procent,3   ; api функция получения 3-х байт текста в переменную isporch из объекта имеющего идентификатор ID_ISPORCH
topmost_ok:
    invoke  EndDialog,[hwnddlg],1  ; api функция завершения диалога с введенными аргументами из формы (параметр 1)
    jmp processed
  wmclose:
    invoke  EndDialog,[hwnddlg],0  ; api функция аварийного завершения диалога нажатием на кнопку cancel (параметр 0)
  processed:
    mov eax,1
  finish:
    pop edi esi ebx
    return
endp
 
section '.idata' import data readable writeable
 
  library kernel,'KERNEL32.DLL',\
      user,'USER32.DLL'
 
  import kernel,\
     GetModuleHandle,'GetModuleHandleA',\
     ExitProcess,'ExitProcess'
 
  import user,\
     DialogBoxParam,'DialogBoxParamA',\
     CheckRadioButton,'CheckRadioButton',\
     GetDlgItemText,'GetDlgItemTextA',\
     IsDlgButtonChecked,'IsDlgButtonChecked',\
     MessageBox,'MessageBoxA',\
     EndDialog,'EndDialog'
 
section '.rsrc' resource data readable
 
  directory RT_DIALOG,dialogs
 
  resource dialogs,\
      37,LANG_RUSSIAN,demonstration    \
 
  dialog demonstration,'Laboratornay rabota 1',70,70,190,100,WS_CAPTION           ; задаем заголовок и размеры окна приложения
    dialogitem 'STATIC','Kol-vo nachalnogo sahara:',1,10,10,170,8,WS_VISIBLE        ; задаем заголовок строки ее координаты, устанавливаем атрибут "видимая"
    dialogitem 'EDIT','',ID_NACHAL,110,9,15,13,WS_VISIBLE+WS_BORDER+WS_TABSTOP       ;
    dialogitem 'STATIC','procent pribili :',1,10,40,170,8,WS_VISIBLE        ;
    dialogitem 'EDIT','',ID_PROCENT,110,39,15,13,WS_VISIBLE+WS_BORDER+WS_TABSTOP      ;
    dialogitem 'BUTTON','OK',IDOK,85,75,45,15,WS_VISIBLE+WS_TABSTOP+BS_DEFPUSHBUTTON  ;
    dialogitem 'BUTTON','C&ancel',IDCANCEL,135,75,45,15,WS_VISIBLE+WS_TABSTOP         ;
  enddialog
можете пояснить комментариями что происходит от start: до exit:
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.06.2015, 12:57
Ответы с готовыми решениями:

Объясните пожалуйста как сделать задачку на ассемблере, покажите как все это делается, я не могу разобраться!
Пусть дан текстовый файл. Создайте новый, заменив в тексте исходного файла слова "тысячелистник" на...

Написать задачку на асемблере
В текстовом файле первой строкой записаны значения N и M, где N и M - однозначные числа....

Объясните задачку
const n=8; var p:array of integer; \\ размер массива i,j,k,t:integer; begin for i:=1 to n do...

Решить задачку
Добрейшего вам денечка, уважаемые! Поможите порешать:

0
08.06.2015, 12:57
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.06.2015, 12:57
Помогаю со студенческими работами здесь

Взгляните на задачку С++
С клавиатуры последовательно вводятся числа типа short. Составить программу, которая выводит...

Исправить задачку
Здравствуйте, уважаемые пользователи! Пожалуйста подкорректируйте решение. Задача такова: "Получить...

Задачку на Python
Помогите справиться с задачей. $

Решить задачку
Когда встречаю эпсилон возникают проблемы, не пойму что это и как мудрить , знаю что надо...


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

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