Встроенный ассемблер. Проверка деления на 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
Объяснение кода листинга программы
TEST EBX, EBX
- Эта инструкция выполняет проверку на ноль содержимого регистра EBX. Если регистр EBX равен нулю, то выполняется переход к меткеdiv_by_0
.JZ div_by_0
- Если результат предыдущей инструкции был истинным (то есть регистр EBX равен нулю), то выполняется переход к меткеdiv_by_0
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д