Assembler

Просмотр 7 сообщений - с 16 по 22 (из 22 всего)
  • Автор
    Сообщения
  • #2043880
    -sc-
    Участник

    Насколько я понял, под присвоить здесь имеется ввиду скопировать var2 в var1 (побайтно). Это может сделать следующий код (простой, так как учебный 🙂 ):;mov ax, offset var1; в ax указатель на переменную var1mov bx, offset var2; в bx указатель на переменную var2label1:mov cl, byte ptr [bx]; в cl загружаем значение (байт) из адреса в bx (var2)mov byte ptr [ax], cl; значение в cl записываем (байт) в адрес в ax (var1); (таким образом скопировали 1 байт)add ax, 1; увеличиваем указатель на 1, так чтобы он указывал на следующий байт переменной var1add bx, 1; увеличиваем указатель на 1, так чтобы он указывал на следующий байт переменной var2cmp cl, ‘$’; сравниваем с $ (концом последовательности)jne label1; делаем еще один цикл, если не достигли конца;После выполнения данного кода переменная var1 будет такой:var1 db ‘0987654321$’

    #2043939
    Мастер
    Участник

    mov byte ptr [ax], cl – вот на эту строчку ругается, Illegal indexing mode UPDИз описаний ошибок tasm[quote]Illegal indexing mode(Недопустимый режим индексации)Команда содержит операнд, использующий недопустимую комбинацию регистров. Напримерmov al,[si+ax]Для всех процессоров, за исключением 80386, допустимыми комбинациями индексных регистров являются следующие: BX, BP, SI, DI, BX+SI, BX+DI, BP+SI, BP+DI.[/quote]Как бы изменить код так, чтобы работал?

    #2044203
    -sc-
    Участник

    ну вроде компилятор подсказывает, что вместо ax, bx нужно использовать si, di. Поэтому пробуем такой код:mov di, offset var1mov si, offset var2label1:mov al, byte ptr [si]mov byte ptr [di], aladd di, 1add si, 1cmp al, ‘$’jne label1

    #2044334
    Мастер
    Участник

    Спасибо, помогло!

    #2046308
    SD
    Участник

    Извините, что влез… так поздно. Вот и ответ на вопрос [link url='http://www.komcity.ru/forum/tech/?id=19607'] “Чему учат программистов в Комсе?” [/link] 🙁 Тема последнего задания, как я понимаю, что-то вроде “изучение строковых команд”. Я бы её не принял, показывает незнание набора инструкций (не отностися к -sc- который давно забыл). Есть однобайтные команды загрузки с автоинкрементом источника (si) и приёмника (di)cld ; сбрасывем флаг направленияlabel1:lodsbstosbcmp al, ‘$’jne label1

    #2054999
    Мастер
    Участник

    Нет, там было не про строковые команды, приведенный вопрос был лишь эпизодом в курсовой 🙂 Сейчас подучил, спрашивать такое не стал бы, да.

    #1796223
     VaIerik
    Участник

     

Просмотр 7 сообщений - с 16 по 22 (из 22 всего)
  • Для ответа в этой теме необходимо авторизоваться.