2013-10-25 3 views
-1

다음 공식에서 시작하는 프로그램을 어셈블리 언어로 작성해야합니다. (yy + h + m) - (d + d), 여기서 변수는 바이트로 표시됩니다 h의 값만 128보다 큽니다.어셈블리 언어의 부호있는 및 부호없는 규칙

부호없는 규칙을 사용하는 프로그램과 서명 된 규칙을 사용하는 프로그램이 두 개 있어야하며 승수가 없기 때문에 이것이 무엇을 의미하는지 알 수 없습니다 imul 또는 idiv를 사용하는 부서 ...

나는 cbw 명령을 사용해야합니까? 그렇다면 어떻게해야합니까?

답변

0

이 계산을 수행하려면 모든 바이트 값을 word로 변환 한 다음 계산을 수행해야합니다. 결과가 바이트보다 커지기 때문입니다.

따라서 부호있는 및 부호없는 숫자의 경우 바이트 값을 단어 (2 바이트)로 확장하는 것은 상위 바이트의 내용이 규칙에 따라 다르므로 다릅니다. $ 8C $ 00 ($ 008c)

바이트는 경우 : 바이트 값은 부호없는 경우

는 워드 값의 상위 바이트는 두 바이트로 변환되는 예 $의 8C 위해 0으로 설정되어야 값이 한숨을 쉬면 상위 바이트를 바이트 값의 부호 비트 값으로 채워야합니다. 같은 예 : $ 8c는 $ 8f $ ff로 확장되어야합니다. cbw 명령어는 부호있는 변환을합니다. 그것은 다음과 같은 방법으로 모양 코드로

:

; unsigned 
    mov al, byte [SomeByteVariable] 
    mov ah, 0 
    add ax, 1234 ; here we have unsigned word value. 

; signed 
    mov al, byte [SomeByteVariable] 
    cbw 
    add ax, 1234 ; here we have signed word value 
+0

내가 생각하는 당신은 아니, 거기에'cbw' 줄까? 'cwd'는 dx : ax에서 word를 dword로 부호 확장합니다. –

+0

@FrankKotler - 네, 물론 손가락이 자동으로 입력됩니다. 또한, EAX. 왜,이 학교들은 여전히 ​​16 비트 프로그래밍을 가르치고 있습니까? 2013 년에! – johnfound

+0

감사합니다. 이것은 많은 도움이되었습니다. – user2920941

관련 문제