Найдите ошибку - Assembler

Узнай цену своей работы

Формулировка задачи:

#include "stdafx.h"
#include <iostream>
#pragma hdrstop
 
using namespace std;
int a,b,c,e; // создаем переменные a,b,c,e
 
int _tmain(int argc, _TCHAR* argv[])
{ 
char letter='A';
char stop='Z';
start:
__asm
{
mov ah, letter
mov al, stop
 
cmp ah, al
jle print
jmp exit
}
print:
cout<<letter;
letter++;
cout<<"";
goto start;
exit:
cout<<"r";
 
return 0;
}

Решение задачи: «Найдите ошибку»

textual
Листинг программы
#include <stdio.h>
#include <conio.h>
 
int a,b,c,e; // создаем переменные a,b,c,e
 
void main(int argc, char* argv[])
{ 
char letter='A';
char stop='Z';
__asm
{
start:  mov al, letter
    mov ah, stop
 
    cmp al, ah
    ja  exit
    push    eax
    call    putch
    add esp,4
    inc letter
    jmp start
exit:
}
puts("\n\r");
}

Объяснение кода листинга программы

  1. В этом коде используются переменные a, b, c и e, но они нигде не используются. Убедитесь, что все переменные, объявленные в коде, используются.
  2. В коде есть два сегмента: код и данные. Убедитесь, что все переменные и функции находятся в правильном сегменте.
  3. Код использует регистры al и ah. Убедитесь, что эти регистры используются правильно.
  4. Код использует инструкцию cmp для сравнения двух символов. Убедитесь, что это сравнение имеет смысл в контексте задачи.
  5. Код использует инструкцию jmp для перехода к метке start. Убедитесь, что это переход имеет смысл в контексте задачи.
  6. Код вызывает функцию putch. Убедитесь, что эта функция используется правильно.
  7. Код добавляет 4 к значению esp. Убедитесь, что это изменение имеет смысл в контексте задачи.
  8. Код использует инструкцию inc для увеличения значения letter. Убедитесь, что это увеличение имеет смысл в контексте задачи.
  9. Код использует функцию puts для вывода строки. Убедитесь, что эта функция используется правильно.
  10. Код использует инструкцию jmp для перехода к метке start. Убедитесь, что это переход имеет смысл в контексте задачи.
  11. Код использует инструкцию push для сохранения значения eax. Убедитесь, что это сохранение имеет смысл в контексте задачи.
  12. Код вызывает функцию call для вызова функции putch. Убедитесь, что эта функция вызывается правильно.
  13. Код использует инструкцию add для сложения значения esp и 4. Убедитесь, что это сложение имеет смысл в контексте задачи.
  14. Код использует инструкцию inc для увеличения значения letter. Убедитесь, что это увеличение имеет смысл в контексте задачи.
  15. Код использует инструкцию jmp для перехода к метке start. Убедитесь, что это переход имеет смысл в контексте задачи.
  16. Код использует инструкцию jmp для перехода к метке exit. Убедитесь, что это переход имеет смысл в контексте задачи.
  17. Код использует инструкцию call для вызова функции puts. Убедитесь, что эта функция вызывается правильно.
  18. Код использует инструкцию puts для вывода строки. Убедитесь, что эта функция используется правильно.
  19. Код использует инструкцию puts для вывода строки. Убедитесь, что эта функция используется правильно.
  20. Код использует инструкцию ret для возврата из функции main. Убедитесь, что этот возврат имеет смысл в контексте задачи.

Оцени полезность:

15   голосов , оценка 4.133 из 5
Похожие ответы