Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.12.2013, 21:31   #1
Nadia Trofimova
 
Регистрация: 23.10.2013
Сообщений: 4
По умолчанию Умножение модуля на число

Возможно моя проблема может показаться пустяковой, но я никак не могу с ней справиться!
Есть программа.
Код:
#include "stdafx.h"
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
	signed char a = 6;
	signed char x = -9;

	short y1;
	signed char y2;
	signed char y, rez;

	__asm{
		//y1
		mov al, x
			mov cl,a
			cmp al, 1
			JGE M2 // если x>=1

M1:
		neg al //|x|
			js M1
			add al, 8
			cbw
			mov y1, ax
			JMP M3 //безусловный переход

M2:
		neg cl // |a|
			js M2
			mov bl,2
			imul bl
			mov y1,cx

M3:

		//y2

		xor eax, eax
			xor ebx, ebx

			mov al, x
			cmp al, a
			je M4 //x=a 
			jg M5 // если x>a
			jl M5 // если x<a

M4 :
		mov y2, 3

			jmp M6

M5 :
		add cl, 1
			mov y2, cl
M6:

		//y=y1 mod y2
		mov ax, y1
			mov bl, y2
			DIV BL // Делимое в AX
			mov rez, AL
			mov y, AH

	}

	printf("y1=%u\n", y1);
	printf("y2=%u\n", y2);
	printf("y=y1/y2=%u\n", rez);
	printf("y=y1 mod y2=%u\n", y);

	return 0;
}
Жирным шрифтом выделена проблемная её часть. Нужно |a| умножить на 2.
Помогите(



________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE]
(это кнопочка на панели форматирования с решёточкой #)
Не забывайте об этом!

Модератор.

Последний раз редактировалось Serge_Bliznykov; 02.12.2013 в 22:49.
Nadia Trofimova вне форума Ответить с цитированием
Старый 03.12.2013, 12:00   #2
x128
Форумчанин
 
Регистрация: 03.02.2010
Сообщений: 178
По умолчанию

Код запутанный, судя по всему есть логические ошибки... Я так и не понял, что и на что ты хотел умножить.
Что касается "Нужно |a| умножить на 2":
Код:
//al = -127..127
//al = |al| * 2
cbw
xor  al, ah
sub  al, ah
shl  al, 1
x128 вне форума Ответить с цитированием
Старый 03.12.2013, 16:10   #3
Nadia Trofimova
 
Регистрация: 23.10.2013
Сообщений: 4
По умолчанию

А через neg и imul нельзя никак?)
Nadia Trofimova вне форума Ответить с цитированием
Старый 03.12.2013, 17:51   #4
x128
Форумчанин
 
Регистрация: 03.02.2010
Сообщений: 178
По умолчанию

можно:
Код:
//al = -128..127
//ax = |al| * 2
cbw
imul  ax, ax, 2
or  ax, ax
jns  done
neg  ax
done:
...
Твой код и так это делает... Как я писал ранее, проблема в логике.
Если моя телепатия не подводит, попробуй изменить
Цитата:
Код:
mov bl,2
imul bl
mov y1,cx
на

Код:
imul  cx, cx, 2
mov  y1, cx

Последний раз редактировалось x128; 03.12.2013 в 18:00.
x128 вне форума Ответить с цитированием
Старый 04.12.2013, 20:23   #5
Nadia Trofimova
 
Регистрация: 23.10.2013
Сообщений: 4
По умолчанию

Спасибо вам)
Nadia Trofimova вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дано трехзначное число. Если в сумме его цифр присутствует число 7,то число записать в зеркальном виде ( Паскаль ) Эля777 Помощь студентам 5 22.04.2013 23:23
Умножение матриц между собой так и на число. PROkaZZZniK Помощь студентам 11 10.06.2012 22:16
EXCEl умножение матрицы на число tsap Microsoft Office Excel 3 30.03.2012 13:08
Умножение на одно число m837 Microsoft Office Excel 1 18.05.2011 20:35
Умножение массива на число (Java) Folly Помощь студентам 4 14.03.2009 11:35