Важная информация
Показано с 1 по 6 из 6

Тема: Срочно!!! Помощь по Ассемблеру

  1. #1 Срочно!!! Помощь по Ассемблеру 
    Профи
    Регистрация
    31.10.2011
    Адрес
    Планета Земля
    Сообщений
    117
    Сказал(а) спасибо
    7
    Поблагодарили 9 раз(а) в 8 сообщениях
    Конкретнее нужно составить программу которая считываяет с клавиатуры в регистр двузначное шестнадцетричное число. Проблема в том, что сам код программы у меня уже есть и в стандартном виндовском отладчике Debug он успешно работает.

    Но к сожалению у меня не получается его перевести в формат ассемблер - поправил комманды перехода (вместо участков памяти добавил метки), добавил начальные комманды связанные со стеками (скопировал с книжки "Калашников Ассемблер это просто"). Но при этом, когда я ввожу masm input (input.asm - имя файла с программой) -выдает ошибку - missed or unreachable Stask segment (CS).

    Вот скриншот с ошибкой:
    [Ссылки могут видеть только зарегистрированные пользователи. ]

    Помогите плиз - просто сдать нужно до пятницы (иначе будет незачет )

    Содержимое файла input.asm:

    Код :
     CSEG Segment
    org100h
     
    Begin:
     
    MOV ah,01
    int 21
     MOV dl,al
     Sub DL,30
     CMP DL,09
    JL metka1
    sub DL,07
    metka1:
    mov cl,04
    shl dl,cl
    INT 21
    sub al,30
    cmp al,09
    jle metka2
     
    SUB AL,07
    metka2: 
     
     INT 20
     
     
    CSEG Ends
    end Begin

    Код брал отсюда: [Ссылки могут видеть только зарегистрированные пользователи. ]

    Цитата:
    Считывание двузначного шестнадцатеричного числа

    Считывание двух шестнадцатеричных требует гораздо большего количества инструкций. Мы начнем со

    считывания первой цифры, затем поместим ее шестнадцатеричное значение в регистр DL и умножим его

    на 16. Чтобы выполнить это умножение, мы сдвинем регистр DL на четыре бита влево, поместив

    шестнадцатеричный ноль (четыре нулевых бита) справа от цифры, которую мы только что считали.
    Инструкция "SHL DL,CL", используя регистр CL, в который загружено число четыре, выполня-ет это

    действие, вставляя нули справа. Инструкция SHL (от англ. "Shift Left" - логический сдвиг влево)

    еще известна как арифметический сдвиг, так как она имеет такой же эффект, как и умножение на два,

    четыре, восемь и так далее, в зависимости от числа (соответственно единицы, двойки или тройки),

    хра-нящегося в CL.

    Имея первую, сдвинутую влево, цифру, добавляем вторую шестнадцатеричную цифру к числу в DL

    (которое = первая цифра * 16).

    3985:0100 B401 MOV AH,01
    3985:0102 CD21 INT 21
    3985:0104 88C2 MOV DL,AL
    3985:0106 80EA30 SUB DL,30
    3985:0109 80FA09 CMP DL,09
    3985:010С 7E03 JLE 0111
    3985:010E 80EA07 SUB DL,07
    3985:0111 B104 MOV CL,04
    3985:0113 D2E2 SHL DL,CL
    3985:0115 CD21 INT 21
    3985:0117 2C30 SUB AL,30
    3985:0119 3C09 CMP AL,09
    3985:011B 7E02 JLE 011F
    3985:011D 2C07 SUB AL,07
    3985:011F CD20 INT 20

    В данной работающей программе, следует проверить граничные условия и убедиться, что про-грамма

    работает правильно. В качестве этих условий используйте числа 00, 09, 0А, 0F, 90, А0, F0 и

    дру-гие числа, например 3С. Используйте точку останова для запуска программы без выполнения

    инструк-ции "INT 20h" (Для ввода шестнадцатеричных чисел используйте только заглавные буквы).

    P.S Вариант вроде "убейся об стенку "или "делай сам" не предлагать - времени СОВСЕМ нет- завтра контрольная по дискретной математике, в пятницу по матану, в субботу по английскому
    Ответить с цитированием  
     

  2. #2  
    Гуру Аватар для Абадябер
    Регистрация
    09.12.2010
    Адрес
    Беларусь, Минск
    Сообщений
    1,219
    Сказал(а) спасибо
    302
    Поблагодарили 176 раз(а) в 144 сообщениях
    Записей в блоге
    5
    Во первых, если речь идет о MASM и досовских исполняемых файлах COM, которых вполне достаточно, то вам совершенно незачем использовать директивы со стеками, и иметь от этого ошибки. Вот эта же программа, которая ассемблируется в MASM 6.0, c получением на выходе исполняемого файла в формате COM:

    Код asm:
    .model tiny
    .code
    org 100h
     
    Begin:
     
    MOV ah,01h
    int 21h
     MOV dl,al
     Sub DL,30h
     CMP DL,09h
    JL metka1
    sub DL,07h
    metka1:
    mov cl,04h
    shl dl,cl
    INT 21h
    sub al,30h
    cmp al,09h
    jle metka2
     
    SUB AL,07h
    metka2: 
     
     INT 20h
     
    end Begin

    А во вторых, обратите внимание, что в то время как в DEBUG все непосредственные значения трактуются как записанные в шестнадцатеричной системе счисления, в MASM же такого не происходит, и эти числа будут трактованы ассемблером как обычные десятичные. Поэтому, чтобы не допустить такого, требуется после каждого числа записывать символ "h", который будет указывать ассемблеру, что речь идет именно о числе в шестнадцатеричной системе счисления.
    Программа работает, вам остается только проверить ее в DEBUG, чтобы она работала действительно верно
    Дружба-магия-радость!
    Ответить с цитированием  
     

  3. #3  
    Гуру Аватар для Konstantin Shcherba
    Регистрация
    08.11.2010
    Сообщений
    1,336
    Сказал(а) спасибо
    26
    Поблагодарили 139 раз(а) в 107 сообщениях
    Записей в блоге
    1
    На вскидку вижу две ошибки.
    1. Компилировать для создания COM файла в MASM 6.0 надо так - ml /AT input.asm или ml input.asm /AT точно не помню. AT обязательно большими буквами!
    2. У шестнадцатеричных цифр нужно дописать в конце h, правильно int 21h, а не int 21.
    Ответить с цитированием  
     

  4. #4  
    Гуру Аватар для Абадябер
    Регистрация
    09.12.2010
    Адрес
    Беларусь, Минск
    Сообщений
    1,219
    Сказал(а) спасибо
    302
    Поблагодарили 176 раз(а) в 144 сообщениях
    Записей в блоге
    5
    Цитата Сообщение от admin Посмотреть сообщение
    1. Компилировать для создания COM файла в MASM 6.0 надо так - ml /AT input.asm или ml input.asm /AT точно не помню. AT обязательно большими буквами!
    Интересно, я всегда компилировал без параметра AT, и все было хорошо =). Нужно посмотреть, что он дает, и на что влияет..
    Дружба-магия-радость!
    Ответить с цитированием  
     

  5. #5  
    Профи
    Регистрация
    31.10.2011
    Адрес
    Планета Земля
    Сообщений
    117
    Сказал(а) спасибо
    7
    Поблагодарили 9 раз(а) в 8 сообщениях
    Спасибо за информацию - уже лучше, но по прежнему не хочет компилироваться:

    C:\MASM611\BIN>ml input_new.asm
    Microsoft (R) Macro Assembler Version 6.11
    Copyright (C) Microsoft Corp 1981-1993. All rights reserved.

    Assembling: input_new.asm

    Microsoft (R) Segmented Executable Linker Version 5.31.009 Jul 13
    Copyright (C) Microsoft Corp 1984-1992. All rights reserved.

    Object Modules [.obj]: input_new.obj/t
    Run File [input_new.com]: "input_new.com"
    List File [nul.map]: NUL
    Libraries [.lib]:
    Definitions File [nul.def]:
    LINK : fatal error L1093: input_new.obj : object file not found
    Ответить с цитированием  
     

  6. #6  
    Гуру Аватар для Абадябер
    Регистрация
    09.12.2010
    Адрес
    Беларусь, Минск
    Сообщений
    1,219
    Сказал(а) спасибо
    302
    Поблагодарили 176 раз(а) в 144 сообщениях
    Записей в блоге
    5
    Порекомендую ограничить имя файла восемью символами. У вас девять (input_new) и это может являться источником проблемы. Причем, сама программа ассемблируется как раз без проблем, судя по самому сообщению об ошибке, а вот линковаться она не хочет, ибо линкер не может найти объектник input_new.obj, который как раз то должен оставаться после работы ассемблере. Посмотрите, нет ли такого файла в директории с ml.exe?
    Дружба-магия-радость!
    Ответить с цитированием  
     

  7. Пользователь сказал cпасибо:

    Doomer_ (21.12.2011)

Информация о теме
Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Помогите пожалуйста (срочно)
    от Nastik1993 в разделе QBasic
    Ответов: 5
    Последнее сообщение: 14.11.2012, 10:51
  2. Очень срочно требуется специалист по настройке карт API Яндекса
    от smartfield в разделе Изготовление сайтов и дизайн
    Ответов: 0
    Последнее сообщение: 26.04.2012, 18:09
  3. Ответов: 0
    Последнее сообщение: 19.03.2012, 12:13
  4. Ответов: 0
    Последнее сообщение: 07.12.2011, 22:10
  5. Нужна помощь с функцией.
    от Абадябер в разделе C/C++
    Ответов: 23
    Последнее сообщение: 22.01.2011, 13:22
Ваши права
  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •