Инструкции типа mov [110h], 80h
и add [si], 7Fh
неоднозначны, потому что ассемблер не знает, какого размера вы хотите, чтобы они имели. Вы хотите обработать байтов (1 байт) или хотите иметь дело с словами (2 байта)?
Видимо emu8086 выбирает размер байта по умолчанию!
Байт по адресу 110h был заполнен на 80h, позже поднялся на 7Fh, что привело к FFh, но затем вы начали читать целое слово по адресу 110h. Вы получили правильную сумму в AL
, а AH
получил любой мусор в памяти по адресу 111h .
Лучше всегда указывайте нужный размер:
слова
ORG 100h
mov word ptr [0110h], 0080h
mov si, 0110h
add word ptr [si], 007Fh
mov ax, [si] >>>> AX=01FFh AH=01h AL=FFh
байт
ORG 100h
mov byte ptr [0110h], 80h
mov si, 0110h
add byte ptr [si], 7Fh
mov ax, [si] >>>> AX=??FFh AH=??h AL=FFh
Возможно, использование mov al, [si]
было бы более уместным в этом случае.
Обратите внимание на длину программы.
В зависимости от версии эта маленькая программа имеет 13 или 14 байтов. Это означает, что он не попадает в память по адресу 110h. Если бы это было так, инструкции могли бы повредить программу и, возможно, привести к сбою компьютера.
Вы можете хранить номера в другом месте, чтобы быть в безопасности, например, адрес 1000h, оставляя больше места для экспериментов с набором инструкций ...