It depends on what functionality you need.
For a shift to the right for example, there's SHR (unsigned) and there's SAR (signed).
For multiplication, there's MUL (unsigned) and there's IMUL (signed).
For division, there's DIV (unsigned) and there's IDIV (signed).
When loading a smaller type (byte or word) into a 32 bit register, there's MOVZX (zero extended / unsigned) and there's MOVSX (sign extended / signed).
So to work with unsigned variables, you use different opcodes compared to the ones you use for signed variables.
Code:
Procedure AddSignedByteToLong(long.l, byte.b)
!mov eax, [p.v_long]
!movsx ecx, byte [p.v_byte]
!add eax, ecx
ProcedureReturn
EndProcedure
Procedure AddUnsignedByteToLong(long.l, byte.b)
!mov eax, [p.v_long]
!movzx ecx, byte [p.v_byte]
!add eax, ecx
ProcedureReturn
EndProcedure
Debug AddSignedByteToLong(1000, $11)
Debug AddSignedByteToLong(1000, $ee)
Debug AddUnsignedByteToLong(1000, $11)
Debug AddUnsignedByteToLong(1000, $ee)