Я изучаю ASM 8086 теоретически на highschool. (который означает, что я изучаю ASM 8086 на ноутбуке и никогда не добирался для выполнения его по компьютеру).
И я не понимаю - что произойдет, если я сделаю это:
MOV AL, F2h
ADD AL, 20h
Что сделает компьютер? (каково будет значение AL, AX, CF, ZF?)
и что произойдет, если я сделаю это:
MOV AH,F2h
ADD AH,20h
Спасибо!!
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
Я бы также рекомендовал использовать 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, поэтому перенос устанавливается.
Когда я изучал ASM в школе, я использовал эту программу. Она очень помогла мне отлаживать простые программы ASM. Вы просто помещаете исходный код в редактор, нажимаете отладку и смотрите, что происходит с регистрами шаг за шагом
Мой asm немного заржавел... но я думаю, что в вашем первом случае AL будет хранить 12h, а перенос увеличит AH на единицу.
Скачайте этот эмулятор, он позволит вам наблюдать за выполнением кода шаг за шагом, проверять значения регистров и т.д. Намного интереснее, чем карандаш и бумага.