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

Вычисление выражения - разобрать код

11.12.2012, 20:56. Показов 609. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вот код проги на С++:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream.h>
using namespace std;
 
int main():
 
   double Total=0;
 
   for (i=0;i<6000;i++)
      for (j=0;j<6000;j++)
    for (k=0;k<6000;k++)
    {Total=i+9*5-6/3+17*5-36/36+21*3-63/7+3*3-255/15+30/6-3*17;}
 
cout << Total;
system("pause");
return 0;}
А вот на ассемблере:
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
.model small
.data
Total dw 0
i dw 0
j dw 0
k dw 0
 
 
.code
start:
    Mov Ax,@DATA
    Mov Ds,Ax
 
    
    mov Ax,60000
    mov i,Ax
    
    
 M1: 
     Mov Ax,60000
     Mov j,Ax
     dec i
     cmp i,0
     jne M2
     jmp MK
 
 M2:
     Mov Ax,60000
     Mov k,Ax
     dec j
     cmp j,0
     jne M3
    je M1
 
 M3:
   
    dec k
    cmp k,0
    je M2
 
    Mov Total,15    ;Total=15
    Mov Al,5    ;Al=5
    Mov Bl,9    ;Bl=9
    IMul Bl     ;Ax=45
    Add Total, Ax   ;Total=60
    
    Mov Ax,6    ;Ax=6
    Mov Bl,3    ;Bl=3
    IDiv Bl     ;Al=2
    Sub Total,Ax    ;Total=53
    
    Mov Al,5    ;Al=5
    Mov Bl,17   ;Bl=17
    IMul Bl     ;Ax=85
    Add Total, Ax   ;Total=138
    
    Mov Ax,36   ;Ax=36
    Mov Bl,36   ;Bl36
    IDiv Bl     ;Al=1
    Sub Total,Ax    ;Total=137
    
    Mov Al,3    ;Al=21
    Mov Bl,21   ;Bl=21
    IMul Bl     ;Ax=63
    Add Total, Ax   ;Total=200
    
    Mov Ax,63   ;Ax=63
    Mov Bl,7    ;Bl=7
    IDiv Bl     ;Al=9
    Sub Total,Ax    ;Total=191
    
    Mov Al,3    ;Al=3
    Mov Bl,3    ;Bl=3
    IMul Bl     ;Ax=9
    Add Total,Ax    ;Total=200
    
    Mov Ax,255  ;Ax=255
    Mov Bl,15   ;Bl=15
    IDiv Bl     ;Al=17
    Sub Total,Ax    ;Total=183
    
    Mov Ax,30   ;Ax=30
    Mov Bl,6    ;Bl=6
    IDiv Bl     ;Al=5
    Add Total,Ax    ;Total=178
    
    Mov Al,17   ;Al=18
    Mov Bl,3    ;Bl=3
    IMul Bl     ;Ax=51
    Sub Total, Ax   ;Total=127
 
    jmp M3
 
MK:
.exit 0
end start
Почему в total записываем значение 15, когда в формуле сумма с переменной i?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.12.2012, 20:56
Ответы с готовыми решениями:

Разобрать приведенный код
Добрый день, товарищи программисты! Пытаюсь разобрать ассемблерный код. Наткнулся на такие...

Помогите разобрать код
Ребята, вообщем есть следующий код: CSEG segment assume cs:CSEG, ds:CSEG, es:CSEG, ss:CSEG org...

Вычисление выражения: подробно разобрать код
Напишите что делает каждая программа по строчно хотябы одну все не прошу var x,y:integer; begin...

Проверьте код на вычисление выражения
Доброго времени суток! Помогите, пожалуйста, разобраться. Даны числа A=1, B=0, D=0. Вычислить...

5
Клюг
7674 / 3189 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
11.12.2012, 21:16 2
Собственно, выражовывание 9*5-6/3+17*5-36/36+21*3-63/7+3*3-255/15+30/6-3*17 = 127, посему сюшный компилятор выдаёт следующее:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
; {
; 
; for (i=0;i<6000;i++)
    mov         dword ptr FLAT:i,0 
L$1:
    cmp         dword ptr FLAT:i,1770H 
    jge         L$2 
 
; //for (j=0;j<6000;j++)
; //for (k=0;k<6000;k++)
; {Total=i+9*5-6/3+17*5-36/36+21*3-63/7+3*3-255/15+30/6-3*17;}
    mov         eax,dword ptr FLAT:i 
    add         eax,7fH   ; 127.
    mov         dword ptr -8[ebp],eax 
    fild        dword ptr -8[ebp] 
    fstp        qword ptr FLAT:Total 
    inc         dword ptr FLAT:i 
    jmp         L$1
0
Ушел с форума
Автор FAQ
16279 / 7604 / 1065
Регистрация: 11.11.2010
Сообщений: 13,617
12.12.2012, 10:59 3
ioane,
  • вот это константа 15*3-81/9+7*9-39/13+12*5-28/7+9*8-121/11+16*5-12/3=289, которая будет вычислена еще во время компоновки программы
  • переменные k и j нигде кроме как в счетчике цикла не используются
  • все вычисления оптимизирующий компилятор на ассемблере сведет к result=5999+289=6288
И где тут вложенные циклы?
0
59 / 59 / 54
Регистрация: 19.02.2012
Сообщений: 262
12.12.2012, 11:13  [ТС] 4
я понимаю, что переменные к и j не используются в цикле. я их еще не включил туда. просто я хотел понять: правильно ли я описал циклы, а то все никак понять не могу?
0
Ушел с форума
Автор FAQ
16279 / 7604 / 1065
Регистрация: 11.11.2010
Сообщений: 13,617
12.12.2012, 11:33 5
ioane, ну, если чисто гипотетически, то код на С
C
1
2
3
4
for (i=0;i<6000;i++)
      for (j=0;j<6000;j++)
    for (k=0;k<6000;k++)
    {function(i, j, k);}
будет выглядеть на ассемблере примерно так
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 mov ebx,0
a1: mov esi,0
a2: mov edi,0
a3: push ebx
     push esi
     push edi
     call function
     inc edi
     cmp edi,6000
     jb a3
     inc esi
     cmp esi,6000
     jb a2
     inc ebx
     cmp ebx,6000
     jb a1
0
Akognir
12.12.2012, 21:12 6
Mikl___, здравствуйте. Как с Вами можно связаться? Напишите мне на почту пожалуйста [email]
12.12.2012, 21:12
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.12.2012, 21:12
Помогаю со студенческими работами здесь

Вычисление суммы выражения - исправить код
Вариант 11. Не могу понять, как правильно задать всё это, чтобы вычитало, постоянно ошибки какие-то...

Неверное вычисление выражения: проверьте код на наличие ошибок
program z1; var y,x,z: integer; begin writeln ('x '); readln (x); writeln ('x '); readln (y);...

Разобрать код и создать приложение использующее этот код
ПОМОГИТЕ ПОЖАЛУЙСТА Option Explicit Private Sub Form_DragDrop(Source As Control, x As Single,...

Новичок. Прошу "бывалых" разобрать код подетально, код писал сам (рабочий)
Этот код моя первая самостоятельная работа. Писал его опираясь на уроки из интернета. Однако там...


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

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