Модераторы: Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Assembler] Перевод числа в строку, а затем вывод строки на экран 
:(
    Опции темы
Trishi
  Дата 5.5.2007, 19:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 5.5.2007

Репутация: нет
Всего: нет



Тут такое дело. Семестр уже к концу подходит, а ассемблер как был не понятен в начале, так и сейчас смутно с ним.  smile 
Вот задачка: "Задать целое число в регистре. Написать программу на ассемблере, которая преобразует данное число в текстовую строку (в десятичной системе) и выведет его на терминал. Число должно быть: целое 1 байт без знака." 
Если можно, напишите ее плиз, и с пояснениями, потому что разобраться все-таки хочется.   smile 
P.S. Теперь я тему правильно создала - надеюсь, кто-то поможет.

PM MAIL   Вверх
anwe
Дата 5.5.2007, 20:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 748
Регистрация: 2.9.2006

Репутация: 9
Всего: 23



Код

    .model  tiny
    .186
    .code
    org    100h
start:
    mov    dl,5    ;произвольное число
    add    dl,30h    ;код чисел начинается с 30h, то есть 30h - 0, значит 35h - 5, то есть надо добавить 30h
    mov    ah,02h    ;ДОСовская функция вывода, что находится в регистре dl символа на экран
    int    21h
    ret
end    start


Это сообщение отредактировал(а) anwe - 5.5.2007, 20:51
PM MAIL   Вверх
Trishi
Дата 5.5.2007, 21:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 5.5.2007

Репутация: нет
Всего: нет



У меня при команде линк выдается ворнинг: no stack segment    и при запуске просто мигает и все.
PM MAIL   Вверх
anwe
Дата 5.5.2007, 21:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 748
Регистрация: 2.9.2006

Репутация: 9
Всего: 23



А как компилируешь. Это com-файл, не exe.
PM MAIL   Вверх
Trishi
Дата 5.5.2007, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 5.5.2007

Репутация: нет
Всего: нет



Ну я сначала пишув мс-досе: "masm name.asm"
потом: "link name.obj"

А потом надо чтобы я его открыла и мне напечатало.
PM MAIL   Вверх
anwe
Дата 5.5.2007, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 748
Регистрация: 2.9.2006

Репутация: 9
Всего: 23



Тогда так:
Код

    .model  small
    .stack    10h
    .186
    .code
start:
    mov    dl,5    ;произвольное число
    add    dl,30h    ;код чисел начинается с 30h, то есть 30h - 0, 

значит 35h - 5, то есть надо добавить 30h
    mov    ah,02h    ;ДОСовская функция вывода, что находится в 

регистре dl символа на экран
    int    21h
    mov    ax,4C00h
    int    21h
end    start

Это ехе-файл.
PM MAIL   Вверх
JAPH
Дата 5.5.2007, 21:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 8.1.2007
Где: Ленобласть

Репутация: 12
Всего: 23



anwe
Код

mov  dl, 25

??

Код

cseg    segment
        assume  cs: cseg, ds: nothing, ss: sseg
@:      mov     al, 125
        aam
        mov     bh, al
        mov     al, ah
        aam
        mov     bl, al
        mov     dl, ah
        mov     ah, 02h
        add     dl, 30h
        add     bx, 3030h
        cmp     dl, 30h
        je      @1
        int     21h
        jmp     @2
@1:     cmp     bl, 30h
        je      @3
@2:     mov     dl, bl
        int     21h
@3:     mov     dl, bh
        int     21h
        mov     ax, 4C00h
        int     21h
cseg    ends
sseg    segment stack
        db      0400h dup (?)
sseg    ends
        end     @


Это сообщение отредактировал(а) JAPH - 5.5.2007, 21:46


--------------------
Что непонятно - спрашиваем smile
PM MAIL ICQ   Вверх
Trishi
Дата 5.5.2007, 21:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 5.5.2007

Репутация: нет
Всего: нет



И первый, и второй вариант просто мигают и все(((
PM MAIL   Вверх
anwe
Дата 5.5.2007, 22:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 748
Регистрация: 2.9.2006

Репутация: 9
Всего: 23



Это для ДОСа не для винды.
PM MAIL   Вверх
Trishi
Дата 5.5.2007, 22:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 5.5.2007

Репутация: нет
Всего: нет



А как для виндовса сделать?
PM MAIL   Вверх
anwe
Дата 5.5.2007, 22:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 748
Регистрация: 2.9.2006

Репутация: 9
Всего: 23



Ты определись для чего тебе надо. Если это только начало, то обычно для ДОСа, чтобы понять суть. Но ты определись.
PM MAIL   Вверх
Trishi
Дата 5.5.2007, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 5.5.2007

Репутация: нет
Всего: нет



Вообще-то у нас это начало. Но для виндовс надо. Чтобы запустить на виндовсе и нормально открылось окно и там число напечатанное было.
PM MAIL   Вверх
anwe
Дата 5.5.2007, 22:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 748
Регистрация: 2.9.2006

Репутация: 9
Всего: 23



Для винды - консоль или полноценное окно?
PM MAIL   Вверх
Trishi
Дата 5.5.2007, 22:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 5.5.2007

Репутация: нет
Всего: нет



Самое простое - вот как типа в БорландС открывается. Это консоль, наверное, называется. Программу запускаешь - окно открывается, а потом энтер - и все.
PM MAIL   Вверх
anwe
Дата 5.5.2007, 22:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 748
Регистрация: 2.9.2006

Репутация: 9
Всего: 23



Не, давай так.
Это подойдет. См. прилашаемый файлик.
Запускаешь сенс ДОС и комстроке прописываешь -> получаешь  результат smile 

Присоединённый файл ( Кол-во скачиваний: 37 )
Присоединённый файл  PP.EXE 0,57 Kb
PM MAIL   Вверх
Trishi
Дата 5.5.2007, 23:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 5.5.2007

Репутация: нет
Всего: нет



Спасибо! А именно код еще у тебя есть? Можешь и его еще прикрепить?
PM MAIL   Вверх
anwe
Дата 5.5.2007, 23:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 748
Регистрация: 2.9.2006

Репутация: 9
Всего: 23



Так это JAPH спасибо. Его код. Смотри его сообщение. Для работы необходимо лишь добавить
Код

    .model  small
    .stack    10h
    .186
    .code
выше его строк.
PM MAIL   Вверх
Trishi
Дата 5.5.2007, 23:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 5.5.2007

Репутация: нет
Всего: нет



Добавляю - а экзешник не создается. Тоже ошибка там: "invalid object module"

Это сообщение отредактировал(а) Trishi - 5.5.2007, 23:13
PM MAIL   Вверх
JAPH
Дата 6.5.2007, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 8.1.2007
Где: Ленобласть

Репутация: 12
Всего: 23



anwe, не согласен! Я использую полное определение сегментов, и мешать его с моделями не следует. Тем более .stack 10h и sseg segment stack ; db 0400h dup (?) немного противоречат друг другу.

Попробуйте:
Код

        .model  small
        .stack  400h
        .code
@:      mov     al, 125    
        aam    
        mov     bh, al    
        mov     al, ah    
        aam    
        mov     bl, al    
        mov     dl, ah    
        mov     ah, 02h    
        add     dl, 30h    
        add     bx, 3030h    
        cmp     dl, 30h    
        je      @1    
        int     21h    
        jmp     @2    
@1:     cmp     bl, 30h    
        je      @3    
@2:     mov     dl, bl    
        int     21h    
@3:     mov     dl, bh    
        int     21h    
        mov     ah, 08h
        int     21h
        mov     ax, 4C00h    
        int     21h    
        end     @

Окно закроется только после press any key.


--------------------
Что непонятно - спрашиваем smile
PM MAIL ICQ   Вверх
Trishi
Дата 6.5.2007, 19:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 5.5.2007

Репутация: нет
Всего: нет



Спасибо! Я запустила - все работает. Только по ходу разбирание в программе возникло пару вопросов:

Код

mov     al, 125         1. Почему мы изначально записываем число именно в al, а не в dl

aam                         2. Для чего нужна эта команда

        mov     bh, al
        mov     al, ah   
        aam               
        mov     bl, al    
        mov     dl, ah    

        add     dl, 30h      

        add     bx, 3030h    3. Зачем мы это делаеми что такое 3030х

        cmp     dl, 30h          
        int     21h       
        jmp     @2    
@1:     cmp     bl, 30h    
        je      @3    
@2:     mov     dl, bl    
        int     21h    
@3:     mov     dl, bh    
        int     21h    

        mov     ah, 08h             4. Что означает эта команда?
        int     21h
        mov     ax, 4C00h            5. Что означает эта команда?
        int     21h    


6. В каком месте программы мы ставим задержку экрана до нажатия любой клавиши

7 - самый главный: Это и есть перевод числа в строку или это  только распечатка числа?

Это сообщение отредактировал(а) Alexeis - 7.5.2007, 15:38
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.1276 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.