Четвърта задача

  1. Публикувана е четвъртата задача. Срокът е до 17:30 следващата сряда.

    Успех!

    P.S. От вас се иска само да имплементирате Asm.asm и инструкциите. Всички останали детайли по реализацията са по ваше усмотрение, стига да влизат в ограниченията.

  2. Какво е очакваното поведение, ако има условен jmp без преди това да е имало cmp в програмата?

    От една страна семантично има логика никога да не скача: примерно резултатът от последния cmp не е отрицателен, понеже не е имало последен такъв.

    От друга - ако искаме да сме близо до asm логиката, където ZF и SF винаги имат някакви стойности трябва и мястото, където пазим резултата от последния cmp да има някаква първоначална стойност.

  3. @Никола: Няма да тестваме такава ситуация. Очаквайте коректни програми – няма да има невалидни инструкции, пропуснати аргументи (например няма да има mov ax, или само inc) и т.н.

    Иначе на мен ми се струва нормално флаговете да имат начална стойност, например 0. Но както казах, няма да има такива примери.

  4. Ако под Ruby така или иначе стои C, който може да изпълнява на място Assembler, то каква е нуждата да минаваме през DSL?

    Из условието:

    Тъй като Ruby е език от много високо ниво самата идея да добавим подобна функционалност е в разрез с идеите, стоящи зад него. Затова пък ще можем да упражним създаване на DSL-и.

    Няма „нужда“. Идеята на задачата не е да пускате истински Assembler, а да проиграте на Ruby нещо, което прилича на него.

  5. Може ли малко подсказка. Няма да навлизам в подробности как точно съм тръгнал да я решавам, но срещам трудност с това, че когато имам примерно mov ax, 0, не знам как да използвам ax като указател към регистъра ax, ами на негово място получавам стойността на ax, т.е. ax е нещо, за което компилаторът търси стойност (гледа дали е метод или променлива). Как мога да направя така, че да не опитва да го оцени, ами просто да го вземе както е, а аз да мога да си го ползвам вече в тялото на mov?

  6. Предварително се извинявам за тъпия въпрос.

    Предполагам, че след като jump инструкция ни върне на по-горна такава и програмата продължи изпълнението си, не трябва да минаваме втори път през същия този jump? Тоест, трябва да се премахне от инструкциите, които предсои да бъдат изпълнени, иначе ми се струва, че ще зацикли.

  7. @Мария, няма да има примери със зацикляне. Няма нужда да проверявате за такива неща. Окей е да оставите "интерпретатора" си или да зацикли, или да хвърли някаква Ruby грешка, която би се появила при зацикляне. Накратко – не се грижете за това.

  8. @Цани:

    Възможно ли е да имаме label mov (или която и да е от другите инструкции)?

    Няма да има такива тестове. Изглежда гадно и некоректно, а некоректни програми няма да ви се подават за тестове.

  9. @Ангел и @Пламен, всъщност, проблем може да има, тъй като име на локална променлива или метод не може да започва с число (синтактична грешка е) и това не може да го има:

    5bar
    

    Но, да, такива тестове и примери няма да има, както Пламен каза.

Трябва да сте влезли в системата, за да може да отговаряте на теми.