Zero/Sign Extension of Integers
Zero/Sign extension of integers mainly deals with the problems caused by the restriction of instruction: Both operands must be the same size.
|
Zero Extension of an Integer
|
|
Source (8 bits) |
Destination (16 bits) |
1 0 0 1 1 0 0 1 |
0 0 0 0 0 0 0 0 1 0 0 1 1 0 0 1 |
|
Sign Extension of an Integer
|
|
Source (8 bits) |
Destination (16 bits) |
1 0 0 1 1 0 0 1 |
1 1 1 1 1 1 1 1 1 0 0 1 1 0 0 1 |
Copying Smaller Values to Larger Ones
The following three examples show the problems of copying smaller values to larger ones.
-
The example on the left:
Both operands must be the same size.
-
The example in the middle:
It is able to solve the problem if the variable
var is an unsigned integer.
-
The example on the right:
However, this shows if the variable
var is negative, the method is not working.
EAX = WORD |
AX = WORD |
AX = SWORD |
.data
var WORD 100h
.code
mov eax, var
call WriteHex
|
.data
var WORD 100h
.code
mov eax, 0
mov ax, var
call WriteHex
|
.data
var SWORD 0F1F0h
; F1F0h = -3600
.code
mov eax, 0
mov ax, var
call WriteHex
|
|
Output |
Output |
Output |
“I’m not arguing, I’m just explaining why I’m right.”
― Unknown
|