mov ax,0AFh
mov cx,0AFh
mul cx
를 들어 BX 및 CX
mov bx,Ah
mov cx,5h
mul cx
"???????"
을 곱하여 내 시도 곱하기 bx와 cx 나는 임시 레지스터를 사용해야한다고 생각합니다. 누구든지 저에게 어떻게 보여줄 수 있습니까?
mov ax,0AFh
mov cx,0AFh
mul cx
를 들어 BX 및 CX
mov bx,Ah
mov cx,5h
mul cx
"???????"
을 곱하여 내 시도 곱하기 bx와 cx 나는 임시 레지스터를 사용해야한다고 생각합니다. 누구든지 저에게 어떻게 보여줄 수 있습니까?
이 시도 보내기 당신이 멋진 수 있도록하려면,
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
의 결과를 찾아야합니다.
모든 형태의 mul/imul이 모든 결과를 산출합니다. http://www.felixcloutier.com/x86/MUL.html. 'mul r/m8'은 그것을 AX에 넣었지만, 나머지는 모두 [RE] DX에 넣었습니다. [RE] AX –
@PeterCordes는 설명에 감사드립니다. 그래서, 8 비트 이상으로 곱하면,'dx'는 항상 팀을 위해 하나를 얻습니다. –
@PeterCordes 해결되었습니다. –
'mov bx, Ah'에서 소스는 즉각적인 상수가 아니라 AH 레지스터입니다. 아마도 당신은'0Ah'을 의미했을까요? 또한, http://www.felixcloutier.com/x86/MUL.html에 대한 매뉴얼이나 당신이 기대하는 바를 따르지 않는 다른 지시 사항을 읽으십시오. –
@Shift_Left : 질문은 8086이지만, 'imul r16, r/m16'은 386에서만 소개되었습니다. 결과는 실제로 서명되거나 서명되지 않습니다. 전체 결과의 상위 절반 만 다릅니다. 두 개의 피연산자 IMUL은 서명 된 항목을 기반으로 플래그를 설정하지만 결과의 상반부가 필요하지 않은 경우 MUL이 필요하지 않습니다. 실제로 고대 하드웨어 (또는 emu8086)를 대상으로하지 않아도되는 경우 IMUL이 올바른 선택입니다. –
@PeterCordes 문맥이 완전히 다르기 때문에 제 의견을 삭제했습니다. 절대로 내가 39 년 전에 구입 한 선반에서 ** 8086 책 **을 꺼내 리라 생각하지 못했을 것입니다. –