Встроенный ассемблер. Проверка деления на 0 - Assembler

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

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

Здравствуйте.Никак не получается в этой программе на ассемблере написать проверки деления на ноль и переполнение.Пожалуйста,если не трудно,то нужна ваша помощь,заранее благодарна. P.s. проверить нужно выражение (a/4 -1)
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <tchar.h>
#include <list>
using namespace std;
 
int f(int a, int c, int d) {
 
    _asm{
 
        mov eax, a
            mov ecx, c
            mov edx, d
            ; mov ebx, b
 
            mov ebx, 4
 
            ; готовимся к делению
            cdq; eax == > edx:eax
            idiv ebx; < eax >= a / 4
            dec eax; < eax >= a / 4 - 1
            push eax; в стеке a / 4 - 1
 
             mov eax, 2; < eax >= 2
             imul eax,ecx; < eax >= 2 * c
sub eax,edx;<eax>=2*c-d
add eax,23;<eax>=2*c-d+23
 
;готовимся к делению
pop ebx;<eax>=a/4-1
cdq ;eax ==><edx:eax>=2*c-d+23
idiv ebx;<eax>=(2*c-d+23)/(a/4-1)
}
 
}

int _tmain(int argc, _TCHAR* argv[])
{ int a,c,d;
cin>>a>>c>>d;
 
cout<<f(a,c,d)<<endl;
system("pause");
return 0;
 
}

Решение задачи: «Встроенный ассемблер. Проверка деления на 0»

textual
Листинг программы
      TEST  EBX, EBX
      JZ    div_by_0

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

  1. TEST EBX, EBX - Эта инструкция выполняет проверку на ноль содержимого регистра EBX. Если регистр EBX равен нулю, то выполняется переход к метке div_by_0.
  2. JZ div_by_0 - Если результат предыдущей инструкции был истинным (то есть регистр EBX равен нулю), то выполняется переход к метке div_by_0.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

8   голосов , оценка 4.5 из 5