2010-05-05 6 views
6

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

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

MOV AL, F2h 
ADD AL, 20h 

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

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

MOV AH,F2h 
ADD AH,20h 

Спасибо !!

ответ

5
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 
+0

Поскольку это 8-битный регистр, будет ли флаг переноса установлен? – xtofl

+1

Да, он будет установлен, так как происходит переполнение регистра AL. – Macmade

+0

Большое спасибо Macmade, я сейчас понимаю основы ASM намного лучше. :-) – Tal

0

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

+0

WOW! Я искал что-то подобное в течение нескольких месяцев! Большое спасибо !!! – Tal

0

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

Загрузить this эмулятор, он позволит вам следить за выполнением кода шаг за шагом, проверять значения регистров и т. Д. Гораздо веселее, чем карандаш-бумага.

1

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

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

MOV AL, F2h 
ADD AL, 20h 

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

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, поэтому перенос установлен.