MaterStudiorum.ru - домашняя страничка студента.
Минимум рекламы - максимум информации.


Авиация и космонавтика
Административное право
Арбитражный процесс
Архитектура
Астрология
Астрономия
Банковское дело
Безопасность жизнедеятельности
Биографии
Биология
Биология и химия
Биржевое дело
Ботаника и сельское хоз-во
Бухгалтерский учет и аудит
Валютные отношения
Ветеринария
Военная кафедра
География
Геодезия
Геология
Геополитика
Государство и право
Гражданское право и процесс
Делопроизводство
Деньги и кредит
Естествознание
Журналистика
Зоология
Издательское дело и полиграфия
Инвестиции
Иностранный язык
Информатика
Информатика, программирование
Исторические личности
История
История техники
Кибернетика
Коммуникации и связь
Компьютерные науки
Косметология
Краткое содержание произведений
Криминалистика
Криминология
Криптология
Кулинария
Культура и искусство
Культурология
Литература и русский язык
Литература(зарубежная)
Логика
Логистика
Маркетинг
Математика
Медицина, здоровье
Медицинские науки
Международное публичное право
Международное частное право
Международные отношения
Менеджмент
Металлургия
Москвоведение
Музыка
Муниципальное право
Налоги, налогообложение
Наука и техника
Начертательная геометрия
Новейшая история, политология
Оккультизм и уфология
Остальные рефераты
Педагогика
Полиграфия
Политология
Право
Право, юриспруденция
Предпринимательство
Промышленность, производство
Психология
Психология, педагогика
Радиоэлектроника
Разное
Реклама
Религия и мифология
Риторика
Сексология
Социология
Статистика
Страхование
Строительные науки
Строительство
Схемотехника
Таможенная система
Теория государства и права
Теория организации
Теплотехника
Технология
Товароведение
Транспорт
Трудовое право
Туризм
Уголовное право и процесс
Управление
Управленческие науки
Физика
Физкультура и спорт
Философия
Финансовые науки
Финансы
Фотография
Химия
Хозяйственное право
Цифровые устройства
Экологическое право
Экология
Экономика
Экономико-математическое моделирование
Экономическая география
Экономическая теория
Эргономика
Этика
Юриспруденция
Языковедение
Языкознание, филология
    Начало -> Информатика, программирование -> Машинно-зависимая и машинно-независимая оптимизация кода ассемблера

Название:Машинно-зависимая и машинно-независимая оптимизация кода ассемблера
Просмотров:220
Раздел:Информатика, программирование
Ссылка:none(0 KB)
Описание: Машинно-зависимая и машинно-независимая оптимизация кода ассемблера 1. Постановка задачи Лабораторная работа №3: Машинно-зависимая и машинно-независимая оптимизация кода ассе

Часть полного текста документа:

Машинно-зависимая и машинно-независимая оптимизация кода ассемблера


1. Постановка задачи

Лабораторная работа №3: Машинно-зависимая и машинно-независимая оптимизация кода ассемблера.

На языке PASCAL написана следующая программа, предназначенная для определения нечетных чисел находящихся в массиве чисел:

var

res, i: integer;

begin

res:=0;

for i:=1 to 10 do

if i mod 2 <> 0 then

begin

res:=i;

writeln (res);

end;

end.

2. Оптимизация программы

Листинг программы, полученной с помощью программы ALTER, для последующей оптимизации (подчеркнуты строки, измененные в процессе оптимизации):

Turbo Assembler Version 4.1         12/12/08 00:18:57        Page 1

11. ASM

1       0000                    .Model Small

2       0000                    .Stack 100h

3       0000                    .Data

4       0000 FF*(??)                __bufrw    db    255 dup (?)

5_________________________;_res_____ dw_____?

6_________________________;_i_____ dw_____?

Удалить строки 5 и 6

7       00FF                    .Code

8       0000                    Main proc

9       0000 B8 0000s             mov ax,@data

10     0003 8E D8                  mov ds, ax

11                                  ; Присвоить        переменной _res

12__________; mov _res, 0_____; Занести в_____переменную _res_____0

Строку 12 заменить на mov ax, 0

13     0005 B8 0000                                 

14                                  ; Начало цикла FOR №1

15                                  ; Присвоить        переменной _i

16____________________; mov _i, 1_____; Занести в_____переменную _i 1

17____________________; mov bx,_i; Записать в BX _i

Строки 16, 17 заменить на mov bx, 1

18     0008 BB 0001                                

19     000B B9 000A    mov cx, 10                   ; Занести в cx 10

20     000E EB 01                  jmp $+3              ; Перейти на 3 байта вперед

21     0010                    for_b_1:

22     0010 43               inc bx                  ; Инкремент        BX

23__________; push bx_______________; Записать BX в стек

24_______________; push cx_______________; Записать CX в стек

Строки 23, 24 заменить на push bx cx

25     0011 53 51                            

26_____; mov _i, bx__________; Записать в переменную _i BX

Удалить строку 26

27                                  ; Обработка        условия      №1

28                                  ; Подготовка левой части условия

29                                           ; mov ax,_i          ; Занести в AX переменную _i

30     0013 8B C3                                     mov ax, bx

31     0015 53               push bx

32     0016 BB 0002              mov bx, 2           ; Занести в BX 2

33     0019 33 D2                   xor dx, dx           ; Обнуляем DX

34     001B F7 F3                   div bx                 ; Деление без знака

35     001D 92              xchg ax, dx                  ; Поменять значение    AX и BX

36     001E 8B D8                  mov bx, ax                   ; Записать в bx ax

37                                  ; Подготовка правой   части условия

38     0020 BA 0000              mov dx, 0           ; Занести в dx 0

39     0023 3B DA                 cmp bx, dx                   ; Сравнить BX c DX

40     0025 5B               pop bx

41     0026 74 0F          je      else_1

42                                  ; Присвоить        переменной _res

43__________; mov ax,_i__________; Занести в_____AX переменную _i

Заменить на строку mov ax, bx

44     0028 8B C3                                    

45_____; mov _res, ax_____; Занести в_____переменную _res_____AX

Удалить строку 45

46                                  ; Обработка        процедуры WRITE

47__________; mov ax,_res_____; Занести в_____AX переменную _res

Удалить строку 45

48     002A E8 0014              call sl_itoa ; Вызвать функцию преобразования

49     002D B4 02                  mov ah, 2           ; Загрузить          в AH номер функции

50     002F B2 0D                  mov dl, 13          ; Выводимый      символ

51     0031 CD 21                  int 21h                ; Вызвать прерывание DOS

52     0033 B2 0A                  mov dl, 10          ; Выводимый      символ

53     0035 CD 21                  int 21h                ; Вызвать прерывание DOS

54     0037                    else_1:

55                                  ; Переход если не выполнилось условие №1

56__________; pop cx__________; Вернуть из стека в CX

57_______________; pop bx__________; Вернуть из стека в BX

Заменить на строку pop cx bx

Turbo Assembler Version 4.1         12/12/08 00:18:57        Page 2

11.ASM

58     0037 59 5B                                     

59     0039 3B D9                  cmp bx, cx          ; Сравнить BX и CX

60     003B 75 D3                  jne for_b_1         ; Переход если не равно

61                                  ; Конец цикла FOR №1

62     003D B4 4C                  mov ah, 4ch

63     003F CD 21                  int 21h

64     0041                    endp

65     0041                    sl_itoa       proc

66     0041 50 53 51 52                   push ax     bx cx dx

67     0045 3D 0000                        cmp ax, 0

68     0048 7D 0A                           jge Doit

69     004A 50                        push ax

70     004B B2 2D                           mov dl, '-'

71     004D B4 02                            mov ah, 2

72     004F CD 21                           int 21h

73     0051 58                         pop ax

74     0052 F7 D8                            neg ax

75     0054 E8 0011               DoIt:          call puti2

76     0057 5A 59 5B 58                  pop dx      cx bx ax

77     005B C3                       ret

78     005C                    sl_itoa       endp

79

80     005C                    sl_utoa      proc

81     005C 50 53 51 52                  push ax     bx cx dx

82     0060 E8 0005                         call PutI2

83     0063 5A 59 5B 58                  pop dx      cx bx ax

84     0067 C3                        ret

85     0068                    sl_utoa      endp

86

87     0068                    Puti2         proc

88     0068 BB 000A                       mov bx, 10

89     006B 33 D2                            xor dx, dx

90     006D F7 F3                            div bx

91     006F 0B C0                            or     ax, ax

92     0071 74 05                    jz      Done

93     0073 52                         push dx

94     0074 E8 FFF1                        call Puti2

95     0077 5A                        pop dx

96     0078                    Done:

97     0078 80 CA 30                       or     dl, '0'

98     007B B4 02                            mov ah, 2

99     007D CD 21                           int 21h

100   007F C3                        ret

101   0080                    PutI2         endp

102

103                                end Main

Turbo Assembler Version 4.1         12/12/08 00:18:57        Page 3

Symbol Table

Symbol Name                         Type          Value

?? DATE                                Text «12/12/08»

?? FILENAME                       Text «11  »

?? TIME                                 Text «00:18:56»

?? VERSION                          Number 040A

@32BIT                                 Text 0

@CODE                                 Text _TEXT

@CODESIZE                         Text 0

@CPU                                    Text 0101H

@CURSEG                                      Text _TEXT

@DATA                                 Text DGROUP

@DATASIZE                         Text 0

@FILENAME                        Text 11

@INTERFACE                      Text 000H

@MODEL                              Text 2

@STACK                               Text DGROUP

@WORDSIZE                        Text 2

DOIT                                      Near _TEXT:0054

DONE                                    Near _TEXT:0078

ELSE_1                                  Near _TEXT:0037

FOR_B_1                               Near _TEXT:0010

MAIN                                     Near _TEXT:0000

PUTI2                                    Near _TEXT:0068

SL_ITOA                               Near _TEXT:0041

SL_UTOA                              Near _TEXT:005C

__BUFRW                             Byte DGROUP:0000

Groups & Segments               Bit Size Align Combine Class

DGROUP                               Group

STACK                                  16 0100 Para      Stack         STACK

_DATA                                  16 00FF Word    Public DATA

_TEXT                                   16 0080 Word    Public CODE


3. ............




 
     

Вечно с вами © MaterStudiorum.ru