источник и пункт назначения должны иметь одинаковый размер (8086) - PullRequest
0 голосов
/ 29 декабря 2018

Я предполагаю, что источник и назначение в инструкции MOV должны иметь одинаковый размер, и когда я пишу эти инструкции:

.data
var dw 0
.code
mov al,56h
mov var,al

Я получаю ошибку, что операнды не соответствуют 16-битному адресу и 8-битовый регистр, но в этом состоянии я не получаю никакой ошибки, но все же, var 32-битный (двойное слово), а ax 16-битный, так почему я не получаю никаких ошибок?

.data
var dd 0
.code
mov ax,56h
mov var,ax

Iиспользую эму 8086.

1 Ответ

0 голосов
/ 31 декабря 2018

8086 использует до 16 битных регистров.Когда вы попытались присвоить 16-битное значение 32-битной переменной, emu8086 предполагает, что ваша переменная является 16-битной.

Другие ассемблеры, использующие тот же синтаксис (MASM и TASM), требуют явного переопределения размера word ptr, еслиВы хотите хранить только младшее слово именованного местоположения, которое вы определили как dword.например, mov word ptr [var], ax.

Для emu8086 это необходимо только при сохранении одного байта в переменной слова.

Поведение MASM / TASM более соответствует разрешению имени символа подразумевать размер, когдасохранение немедленного, например, mov var, 1 подразумевает word ptr, если вы определили его с помощью dw, даже если в инструкции нет регистров для указания размера.

...