Вопрос о прибавляет ASM 8086

Я изучаю ASM 8086 теоретически на highschool. (который означает, что я изучаю ASM 8086 на ноутбуке и никогда не добирался для выполнения его по компьютеру).

И я не понимаю - что произойдет, если я сделаю это:

MOV AL, F2h
ADD AL, 20h

Что сделает компьютер? (каково будет значение AL, AX, CF, ZF?)

и что произойдет, если я сделаю это:

MOV AH,F2h
ADD AH,20h

Спасибо!!

6
задан starblue 5 May 2010 в 20:23
поделиться

4 ответа

MOV AL, F2h

Помещает значение 0xF2 в регистр AL (аккумулятор).

ADD AL, 20h

Добавляет значение 0x20 к значению, содержащемуся в регистре AL.

AL будет равно 0xF2 + 0x20. Но AL - 8-битный регистр, поэтому значение будет 0x12, а не 0x112.

То же самое для AH, так как это тоже 8-битный регистр.
Чтобы получить полное значение, необходимо использовать регистр AX, который является 16-битным.
AX состоит из AH (старший разряд) и AL (младший разряд), поэтому вы можете получить доступ к старшей и младшей части по отдельности.

----------------EAX ----------------
                 ------- AX --------
|----------------|--------|--------|
|                |   AH   |   AL   |
|----------------|--------|--------|
     16 bits       8 bits   8 bits
5
ответ дан 17 December 2019 в 02:25
поделиться

Я бы также рекомендовал использовать D86 (который поставляется с A86) , поскольку он позволяет вводить 8086 инструкции в интерактивном режиме, чтобы вы могли видеть, что происходит со всеми регистрами и флагами после каждой инструкции.

Этот код (как указывали другие):

MOV AL, F2h
ADD AL, 20h

влияет только на флаги и регистр AL. Никакой другой восьмиразрядный регистр не будет затронут (даже AH). Однако AX изменится, поскольку он состоит из AH и AL, поэтому, если AH был 42h:

Code         AL   AH     AX
MOV AL,F2h   F2   42    42f2
ADD AL,20h   12   42    4212

Результат этой конкретной операции установит флаг переноса и флаг четности и очистит флаги переполнения, нуля, знака и вспомогательного переноса. .

Вы можете подумать, что флаг переполнения должен быть установлен, но флаг переполнения обрабатывает значения как значения со знаком (в данном случае -14 и 32), и добавление не превышает максимального значения со знаком (127). Флаг переноса обрабатывает значения как значения без знака (242 и 32), а сложение превышает максимальное значение без знака: 242 + 32 = 274, что больше 255, поэтому перенос устанавливается.

1
ответ дан 17 December 2019 в 02:25
поделиться

Когда я изучал ASM в школе, я использовал эту программу. Она очень помогла мне отлаживать простые программы ASM. Вы просто помещаете исходный код в редактор, нажимаете отладку и смотрите, что происходит с регистрами шаг за шагом

0
ответ дан 17 December 2019 в 02:25
поделиться

Мой asm немного заржавел... но я думаю, что в вашем первом случае AL будет хранить 12h, а перенос увеличит AH на единицу.

Скачайте этот эмулятор, он позволит вам наблюдать за выполнением кода шаг за шагом, проверять значения регистров и т.д. Намного интереснее, чем карандаш и бумага.

0
ответ дан 17 December 2019 в 02:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: