2013-12-06 1 views
2

Я читал, что язык ассемблера зависит от процессора, и для каждого процессора существует специальный набор инструкций. Я использую процессор архитектуры Intel i5 x86_64. Когда я пишу код, я не использовал другой набор инструкций. Я использую ассемблер NASM. Он собирает мой код и преобразует его в двоичный. Итак, в чем дело с процессором. Даже мой друг с другой архитектурой работает с одним и тем же кодом (не скомпилированным, но с исходным кодом) и получает тот же результат ... Итак, где процессор языка ассемблера зависит?Я пытался узнать язык Ассамблеи, у меня есть некоторые сомнения, о которых я упоминал ниже

И код ... Это просто пример, каждый кусок кода работает на обоих архитектур x86_64 и 8088 микропроцессор

[ORG 0x7c00] 

    xor ax, ax ;make it zero 
    mov ds, ax 

    mov si, msg 
    call bios_print 

hang: 

    jmp hang 

msg db 'Welcome to Macintosh', 13, 10, 0 


bios_print: 

    lodsb 
    or al, al ;zero=end of str 
    jz done ;get out 
    mov ah, 0x0E 
    int 0x10 
    jmp bios_print 

done: 
    ret 

    times 510-($-$$) db 0 
    db 0x55 
    db 0xAA 
+2

«Процессор, зависящий от процессора», не обязательно относится к различным моделям процессоров (например, Intel Core i5 vs Core i3). – Michael

ответ

0

Есть diffent слои процессора dependcy. Intel приложила много усилий, чтобы сделать последующие процессоры совместимыми с предыдущими процессорами своего семейства, поэтому вполне возможно написать код, который работает на нескольких «разных» процессорах.

Однако, когда вы пытаетесь написать код сборки, который использует преимущества определенных функций, это уже не так. И если вы пытаетесь написать высокопроизводительный код, правила также меняются на разных ЦП даже из одного семейства.

Если вы посмотрите на набор инструкций от Intel и сопоставьте их с более старыми, вы легко увидите, что новые процессоры также имеют новые инструкции, которые ранее не были доступны.

А также ОС играет определенную роль в этом, оказывая поддержку старым программам. Например, вы можете запускать 16-разрядные приложения изначально до Windows XP. В Windows 7 64bit поддержка была удалена. Поэтому при запуске такого кода вы даже не заметили, что есть уровень поддержки, который заставляет ваш prorgam работать.

+0

Afaik Windows XP 64-бит не поддерживает 16-разрядные приложения. Это особенность 64-битного режима, а не определенной версии Windows. –

+0

Я забыл, что XP также доступен в 64 бит. :) В 64-битной системе ей пришлось бы эмулировать реальный режим 16 бит. – Devolus

+0

Да, но потом начинает становиться неуместным, что вы на x86 вообще, и есть более совершенные виртуальные наборы команд, чем x86. –

0

Даже когда 8088 и Intel Core i5 являются двумя разными животными, с огромными различиями между ними, есть одна вещь, которая делает их «подключенными»: Core i5 двоичный, совместимый с 8088. На самом деле все Процессоры x86 совместимы с старыми 8088, по крайней мере, когда они используются в так называемом «реальном режиме». Двоичная совместимость означает, что программа, написанная для 8088, будет работать в процессоре Core i5 при условии, что оба процессора будут установлены в системах с одинаковыми или совместимыми устройствами ввода/вывода (если ваша программа не нуждается в общении с реальным миром) ,

Также есть процессоры от разных производителей, совместимых с исходным кодом. Это означает, что исходный код ассемблера, написанный для одного процессора, может быть собран с использованием прямого преобразования в двоичный код для другого процессора. Примерами являются: исходный код для процессора Z80 может быть собран для вывода двоичного кода для процессора 8088 (и, следовательно, для процессора Core i5!)

И есть процессор из совершенно разных семейств, полностью несовместимых между ними, для Например, архитектура PowerPC и архитектура Intel x86. Для них, чтобы программа, написанная для того, чтобы одна из них могла работать в другой, должна присутствовать какой-то переводчик, интерпретатор или JIT-компилятор. Так обстоит дело с OS X, работающим на процессорах Intel, которая использует часть программного обеспечения Rosseta для чтения и перевода на лету инструкций для архитектуры PowerPC для архитектуры x86.

+1

Core i5 не ** полностью ** двоичный, совместимый с 8088. 'pop cs' (код 0x0f) отлично работает в 8088 и 8086, но в более поздних процессорах нет' pop cs', а 0x0f используется как префикс команды для некоторые многобайтовые инструкции. 'push sp' также работает по-разному. – nrz

+0

И что еще более важно, он несовместим, если включен длинный режим, как это имеет место в 64-разрядных операционных системах. IOW i5 поддерживает только (примерно) 16-разрядный бит в 32-битном режиме. Это действительно хорошая причина не начинать с 16-разрядного ассемблера –

+0

Согласно _section 20.1.3 Инструкции, поддерживаемые в режиме Real-Address Mode_, из руководства по разработке программного обеспечения IA32 ... ** Инструкции по стеклу PUSH и POP (в общем случае, целевые регистры и регистры сегментов). **, инструкция 'pop cs' должна поддерживаться. –

2

Пойдите к автодилеру и возьмите совершенно новую игрушку для тест-драйва. Затем перейдите к другим партиям подержанных автомобилей и найдите более старых игрушек той же модели, но в другом году. Они не идентичны каждый год, но они часто очень похожи на другие модели в течение многих лет за раз, размещение и внешний вид, если некоторые предметы, дверные замки, окна управления и т. Д.Затем перейдите к дилеру ford и повторите с некоторой моделью ford. Мгновенно брод сильно отличается от тойоты, хотя они оба - автомобили с четырьмя колесами и двигатель, которые выполняют ту же работу. Среди фордов они часто похожи на своих братьев и сестер, а также на модели предыдущих и последующих лет для конкретных деталей, разделяя их несколько лет подряд.

Здесь нет ничего нового, процессоры x86 имеют в них элементы, которые вы можете увидеть сходство вплоть до первого 8088/86. но сравните это с мощным ПК или рукой или мипами, и вы увидите, что, хотя все они являются процессорами, которые могут работать с современными операционными системами, их индивидуальные детали и внешний вид гораздо более различны для разных брендов, чем для брендов.