2016-09-13 1 views
0

크기에 따라 값을 곱하는 것에 대한 설명서를 훑어 보았습니다. 바이트 용 파일은 다소 쉽기 때문에 나 자신을 혼동 할 필요가 없습니다. 나를 혼란스럽게하는 것은 피연산자가 단어/더블 단어 인 경우 제품을 가져 오는 것입니다. 예를 들어DX : AX/EDX : EAX에서 값을 가져올 수 있습니까?

:

;code for scanning values here 
    ;code for converting them to numbers 

    mov ax, word[num] ;suppose num is a word-type value 

    mov bx, 45 

    mul bx 

    mov num, ??? ;??? represents the register where should I fetch the product from 

나는이 비슷한 문제가 있었다 수 있음을 알고,하지만 난 정말 깊이있는 설명을 필요로했다. 고맙습니다.

답변

3

mul 명령은 16 비트 피연산자에 대해 32 비트 결과를 제공합니다. ax은 결과의 하위 word을 보유하고 dx은 상위 word을 보유합니다. 당신이 resut는 당신이 높은 부분을 생략 할 수 있습니다 (dx)을 65535 초과하지 않도록 당신의 숫자가 충분히 항상 작은 것을 알고있는 경우에, 그러나

result dd 0 

. . . 
mul bx 
mov [result], ax 
mov [result + 2], dx 

: 그래서, 당신은 결과를 저장하기 위해 dword 변수를 필요 항상 0이므로 16 비트 변수를 사용하여 결과를 저장합니다.

관련 문제