assembler pomocy

0

Nie mam juz pomysłu jak inaczej szukac wyniku mnozenia i dzielenia, ktore ewidentnie mam zle

#include "stdafx.h"
#include <conio.h>
#include <iostream>

int main()
{
	char a = 4;
	char b = 5;
	char c = 8;
	char d = 29;
	char e = 3;
	char f = 2;
	char h = 8;
	char g = 4;

	_asm {
		xor ah, ah
		xor bh, bh
		mov ah, a
		mov bh, b
		add ah, bh
		mov a, ah

		xor al, al
		xor bl, bl
		mov al, c
		mov bl, d
		sub bl, al
		mov d, bl

		xor ch, ch
		xor dh, dh
		mov dh, e
		mov ch, f
		mul dh
		mov f, ch


		xor al, al
		xor bl, bl
		mov al, g
		mov bl, h
		div al
		mov h, bl

	}
	printf("h/g to %d\n", h);
	printf("e*f to %d\n", f);
	printf("d-c to %d\n", d);
	printf("a+b to %d\n", a);

	_getch();
	return 0;
}
0
rafal_gda napisał(a):

Nie mam juz pomysłu jak inaczej szukac wyniku mnozenia i dzielenia, ktore ewidentnie mam zle

hmm, bo ja wiem, może sprawdzić jak działają rozkazy mul i div?

https://web.itu.edu.tr/kesgin/mul06/intel/instr/mul.html
https://web.itu.edu.tr/kesgin/mul06/intel/instr/div.html

0

Nie bardzo rozumiem czemu używasz starszych bitów ax,bx,cx (ah,bh,ch) do wrzucania danych. Powinieneś użyć al,bl,cl,dl to raz. Natomiast co do mnożenia i dzielenia to generalnie w tych operacjach rejestr ax jest domyślny więc dla dzielenia dzielnik masz wrzucić do al (młodsze bity ax) natomiast dzielną do innego rejestru i wynik dostajesz w dx:ax co w tym przypadku oznacza że bierzesz go z al (bo nie przekraczasz 8 bitów w wyniku), mnożenie analogicznie ax * jakiś rejestr i wynik w dx:ax.

1 użytkowników online, w tym zalogowanych: 0, gości: 1