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

Страницы работы

Содержание работы

Лабораторная работа № 1.

Цель: изучить основы программирования на языке Assembler.

Задача: Исследовать программы первой части работы и написать программу, позволяющую осуществлять ввод с клавиатуры двоичных чисел и их вычитание.

Ход выполнения лабораторной работы.

Исследование программ:

1.   

Дизассемблированный код программы (Turbo Debugger)

Приложение на языке С++

b:

cs:0291 push

cs:0292 mov

cs:0294 push

cs:0295 push

cs:0296 mov

#LABA1#4

cs:0299 mov

cs:029C jmp

#LABA1#7

cs:029E mov

cs:02A0 imul

cs:02A2 mov

cs:02A4 add

cs:02A6 add

cs:02A9 mov

#LABA1#8

cs:02AB dec

#LABA1#5

cs:02AC or

cs:02AE jg

#LABA1#10

cs:02B0 mov

cs:02B2 jmp

#LABA1#11

cs:02B4 pop

cs:02B5 pop

cs:02B6 pop

cs:02B7 ret

bp

bp, sp

si

di

di,[bp+4]

si,000A

#LABA1#5 (02AC)

ax, si

si

dx, di

dx, ax

dx, FFFD

di, dx

si

si, si

#LABA1#7 (029E)

ax, di

#LABA1#11 (02B4)

di

si

bp

int b(int j)

{

int i;

i = 10;

j = j + i * i - 3;

i --;

while ( i > 0)

{

return j ;

}

int b ( int j ) {  int i ;  i = 10;  while ( i > 0)  {  j = j + i * i - 3;  i --;  }  return j ; }


2.   

Дизассемблированный код программы (Turbo Debugger)

Приложение на языке С++

f2:

cs:0291 push

cs:0292 mov

cs:0294 sub

cs:0297 push

cs:0298 mov

#LABA2#5

cs:029B or

cs:029D jne

cs:029F mov

cs:02A2 jmp

#LABA2#6

cs:02A4 mov

cs:02A6 shl

cs:02A8 mov

#LABA2#7

cs:02AB mov

cs:02AE jmp

#LABA2#8

cs:02B0 pop

cs:02B1 mov

cs:02B3 pop

cs:02B4 ret

bp

bp, sp

sp, 0002

si

si, [bp+4]

si, si

#LABA2#6 (02A4)

ax, 0030

#LABA2#8 (02B0)

ax, [si]

ax, 1

[bp-02], ax

ax, [bp-02]

02A2

si

sp, bp

bp

int f2(int *x)

{

int j;

if (x == NULL)

return 48;

j = *x * 2;

return j ;

}

int f2(int *x) {  int j;  if (x == NULL) return 48;  j = *x * 2;  return j; }

в случае если по адресу x, хранится 0x0, то код возврата будет 48 и j вычисляться не будет.

3.   

#include <stdlib.h> #include <stdio.h> int a(int i, int j); int b(int i, int j); int b(int i, int j) {  if (j <= 0) return i+1;  return a(i, j-1)+1; }

int a(int i, int j) {  if (i <= 0) return j+1;  return b(i-1, j)+b(i-1, j-1); }

int main(int argc, char **argv) {  int i;  if (argc != 3)   return 1;  i = a(atoi(argv[1]), atoi(argv[2]));

 return 0; }

Дизассемблированный код программы (Turbo Debugger)

Приложение на языке С++

b:

int b(int i, int j)  

cs:0291 push

bp

{  

cs:0292 mov

bp, sp

cs:0294 push

si

cs:0295 push

di

cs:0296 mov

si, [bp+04]

cs:0299 mov

di, [bp+06]

#LABA3#7

cs:029C or

di, di

if (j <= 0)

cs:029E jg

#LABA3#8 (02A5)

cs:02A0 mov

ax, si

cs:02A2 inc

ax

return i+1;

cs:02A3 jmp

#LABA3#9 (02B1)

#LABA3#8

cs:02A5 mov

ax, di

return a(i, j-1)+1;

cs:02A7 dec

ax

}

cs:02A8 push

ax

cs:02A9 push

si

cs:02AA call

a

cs:02AD pop

cx

cs:02AE pop

cx

cs:02AF jmp

02A2

#LABA3#9

cs:02B1 pop

di

cs:02B2 mov

si

cs:02B3 pop

bp

cs:02B4 ret

a:

cs:02B5 push

bp

int a(int i, int j)

cs:02B6 mov

bp, sp

{

cs:02B8 push

si

cs:02B9 push

di

cs:02BA mov

si, [bp+04]

cs:02BD mov

di, [bp+06]

#LABA3#13

cs:02C0 or

si, si

if (i <= 0)

cs:02C2 jg

#LABA3#14 (02C9)

cs:02C4 mov

ax, si

cs:02C6 inc

ax

return j+1;

cs:02C7 jmp

#LABA3#15 (02E8)

#LABA3#14

cs:02C9 push

di,

return b(i-1, j)+b(i-1, j-1);

cs:02CA mov

ax, si

cs:02CC dec

ax

cs:02CD push

ax

cs:02CE call

b

Похожие материалы

Информация о работе

Тип:
Отчеты по лабораторным работам
Размер файла:
248 Kb
Скачали:
0