2015-10-12 5 views
0

У меня есть следующее назначение: Напишите программу сборки HLA, которая запрашивает значение int8 для проверки, а затем печатает его в двоичном формате. Например, здесь будет вывод программы для различных введенных значенийДесятичное значение для двоичного кода в сборке высокого уровня (HLA)

Дай мне десятичное значение для печати: 15 15 0000_1111 Дай мне десятичное значение для печати: 7 7 является 0000_0111

(Подсказка: Там не является стандартным выходом, который печатает на двоичном выходе, поэтому вам нужно сделать это самостоятельно. Для этого вам нужно немного переместить бит в флаг переноса и напечатать 0 или 1, в зависимости от того, что вы найдете в Carry бит и повторите эту процедуру 8 раз, и все будет готово! В конце концов, мы научимся делать петлю, делая эту задачу намного менее страшной.)

(Второй совет: LAHF выталкивает бит Carry и все остальные флаги из регистра EFLAGS и в AH. Как программист Ассамблеи, у вас есть возможность замаскировать все биты, но тот, который вас интересует, с помощью И или ИЛИ.) Вот что я сейчас изучил в классе: http://homepage.smc.edu/stahl_howard/cs17/FileManager/referenceguides/referenceguideii.htm Мой код - это до сих пор, и я считаю, что это логическая ошибка, потому что независимо от того, какое число я ставлю, я просто получаю строку из 16 0.

begin program BinaryOutput; 
#include("stdlib.hhf"); 
static 
    iDataValue : int8; // the value to inspect 
begin BinaryOutput; 

    stdout.put("Gimme a decimal value to print: ", nl); 
    stdin.get(iDataValue); 
    mov(0, BH); 
    mov(iDataValue, BH); 

    stdout.put("Number in binary is: ", nl); 


    shl(1, BH); //1st 
    lahf(); 
    and(%0000_0001, AH); 
    mov(AH, BH); 
    stdout.putb(BH); 

    shl(1, BH); //2nd 
    lahf(); 
    and(%0000_0001, AH); 
    mov(AH, BH); 
    stdout.putb(BH); 

    shl(1, BH); //3rd 
    lahf(); 
    and(%0000_0001, AH); 
    mov(AH, BH); 
    stdout.putb(BH); 

    shl(1, BH); //4th 
    lahf(); 
    and(%0000_0001, AH); 
    mov(AH, BH); 
    stdout.putb(BH); 

    shl(1, BH); //5th 
    lahf(); 
    and(%0000_0001, AH); 
    mov(AH, BH); 
    stdout.putb(BH); 

    shl(1, BH); //6th 
    lahf(); 
    and(%0000_0001, AH); 
    mov(AH, BH); 
    stdout.putb(BH); 

    shl(1, BH); //7th 
    lahf(); 
    and(%0000_0001, AH); 
    mov(AH, BH); 
    stdout.putb(BH); 

    shl(1, BH); //8th 
    lahf(); 
    and(%0000_0001, AH); 
    mov(AH, BH); 
    stdout.putb(BH); 





end BinaryOutput; 

ответ

0

Одна очевидная ошибка в том, что вы переписываете BH. Нечто подобное должно работать лучше:

shl(1, BH); //1st 
lahf(); 
and(%0000_0001, AH); 
stdout.putb(AH); 

Повторите для других, или использовать цикл;) Не уверен, что формат putb использования, так как вы упомянули получение 16 нулей, я предполагаю, что это может быть написание 2 шестнадцатеричных цифр. В этом случае проверьте, есть ли у вас другая функция вывода (возможно, puti8?). Если ни один не печатает одну цифру, а затем печатать символы (вам придется преобразовать в ascii, затем добавив '0' или '1').

+0

Большое спасибо, это то, что мне нужно. – ecain

Смежные вопросы