That is perfect. I have updated it, and added movzx for lower than 386:
; SMART.INC--
;8086
if ((@cpu and 0xFF) eq 1)
option renamekeyword: <shl>=@@shl
shl macro reg, val
ifidni <val>, <cl>
@@shl reg, val
else
repeat val
@@shl reg, 1
endm
endif
endm
option renamekeyword: <shr>=@@shr
shr macro reg, val
ifidni <val>, <cl>
@@shr reg, val
else
repeat val
@@shr reg, 1
endm
endif
endm
option renamekeyword: <sal>=@@sal
sal macro reg, val
ifidni <val>, <cl>
@@sal reg, val
else
repeat val
@@sal reg, 1
endm
endif
endm
option renamekeyword: <sar>=@@sar
sar macro reg, val
ifidni <val>, <cl>
@@sar reg, val
else
repeat val
@@sar reg, 1
endm
endif
endm
option renamekeyword: <rol>=@@rol
rol macro reg, val
ifidni <val>, <cl>
@@rol reg, val
else
repeat val
@@rol reg, 1
endm
endif
endm
option renamekeyword: <ror>=@@ror
ror macro reg, val
ifidni <val>, <cl>
@@ror reg, val
else
repeat val
@@ror reg, 1
endm
endif
endm
option renamekeyword: <rcl>=@@rcl
rcl macro reg, val
ifidni <val>, <cl>
@@rcl reg, val
else
repeat val
@@rcl reg, 1
endm
endif
endm
option renamekeyword: <rcr>=@@rcr
rcr macro reg, val
ifidni <val>, <cl>
@@rcr reg, val
else
repeat val
@@rcr reg, 1
endm
endif
endm
endif
;Lower than 386
if ((@cpu and 0xFF) lt 1000b)
option renamekeyword: <movzx>=@@movzx
movzx macro reg, val
ifidni <reg>, <ax>
xor ah, ah
mov al, val
elseifidni <reg>, <bx>
xor bh, bh
mov bl, val
elseifidni <reg>, <cx>
xor ch, ch
mov cl, val
elseifidni <reg>, <dx>
xor dh, dh
mov dl, val
endif
endm
endif