2016-10-01 5 views
0
내가 BX 및 CX를 곱하여 싶습니다,하지만 난처럼 작동 나던은 도끼를 사용

곱 BX 및 CX [ASM 8086]

mov ax,0AFh 
mov cx,0AFh 
mul cx 

를 들어 BX 및 CX

mov bx,Ah 
mov cx,5h 
mul cx 
"???????" 

을 곱하여 내 시도 곱하기 bx와 cx 나는 임시 레지스터를 사용해야한다고 생각합니다. 누구든지 저에게 어떻게 보여줄 수 있습니까?

+1

'mov bx, Ah'에서 소스는 즉각적인 상수가 아니라 AH 레지스터입니다. 아마도 당신은'0Ah'을 의미했을까요? 또한, http://www.felixcloutier.com/x86/MUL.html에 대한 매뉴얼이나 당신이 기대하는 바를 따르지 않는 다른 지시 사항을 읽으십시오. –

+0

@Shift_Left : 질문은 8086이지만, 'imul r16, r/m16'은 386에서만 소개되었습니다. 결과는 실제로 서명되거나 서명되지 않습니다. 전체 결과의 상위 절반 만 다릅니다. 두 개의 피연산자 IMUL은 서명 된 항목을 기반으로 플래그를 설정하지만 결과의 상반부가 필요하지 않은 경우 MUL이 필요하지 않습니다. 실제로 고대 하드웨어 (또는 emu8086)를 대상으로하지 않아도되는 경우 IMUL이 올바른 선택입니다. –

+0

@PeterCordes 문맥이 완전히 다르기 때문에 제 의견을 삭제했습니다. 절대로 내가 39 년 전에 구입 한 선반에서 ** 8086 책 **을 꺼내 리라 생각하지 못했을 것입니다. –

답변

0

이 시도 보내기 당신이 멋진 수 있도록하려면,

mov bx, 0Ah 
mov cx, 5h 
push ax 
mov ax, bx 
mul cx 
mov bx, ax 
pop ax 
;at this point, ax is unchanged, result is in bx. 

을 또는이 시도 :

mov bx, 0Ah 
mov cx, 5h 
xchg ax, bx 
mul cx 
xchg ax, bx 
;at this point, ax is unchanged, result is in bx. 

그러나, 16 비트 레지스터에 의해 곱셈 dx:ax에 그 결과를 떠나 . 예제가 작은 숫자를 곱하기 때문에 전체 결과가 16 비트 레지스터에 들어갈 수 있기 때문에 이것은 별 문제가되지 않습니다. 그러나 dx 레지스터는이 코드 조각에 의해 지워지고 나중에 큰 숫자를 곱하면 dx:bx의 결과를 찾아야합니다.

+1

모든 형태의 mul/imul이 모든 결과를 산출합니다. http://www.felixcloutier.com/x86/MUL.html. 'mul r/m8'은 그것을 AX에 넣었지만, 나머지는 모두 [RE] DX에 넣었습니다. [RE] AX –

+0

@PeterCordes는 설명에 감사드립니다. 그래서, 8 비트 이상으로 곱하면,'dx'는 항상 팀을 위해 하나를 얻습니다. –

+0

@PeterCordes 해결되었습니다. –