Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вывод числа из регистра ax, Вывод содержимого регистра на экран 
:(
    Опции темы
ROKI
Дата 29.7.2008, 16:03 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Привет всем!. Только начал изучать асм, читаю книгу Калашникова, но никак не  могу вывести число на екран. Вот например в этом коде:
Код

CSEG segment 
org 100h 
begin: 

 mov ax,10
 add ax,5
 mov ah,02h
 int 21h

 int 20h

CSEG ends
end begin 


Незнаю почему, но на екран выводитса буква "g", а не число 15. Подскажыте пожалуйста, как сделать так, чтоб всётаки на екран выводилось число "15". Зарание спасибо.
PM MAIL   Вверх
Akina
Дата 29.7.2008, 18:40 (ссылка) |    (голосов:4) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

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



Начни читать книгу с самого начала еще раз - ты походу ничего не усвоил.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
ROKI
Дата 29.7.2008, 22:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Но я что-то не могу найти в книге Калашникова, где он пишет об выводе числа, так может всётаки подскажэте...
P.S. или етот код вообще никуда не годитса ?? ((
 

Это сообщение отредактировал(а) ROKI - 30.7.2008, 00:20
PM MAIL   Вверх
THandle
Дата 30.7.2008, 01:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

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



Цитата(http://www.codenet.ru/progr/dos/dos_0010.php)

Вход

    * AH = 02H
    * DL = символ, выводимый на стандартный вывод

Выход

    * нет =

Описание:

Посылает символ из DL на стандартный вывод. обрабатывает символ Backspace (ASCII 8), перемещая курсор влево на одну позицию и оставляя его в новой позиции. при обнаружении Ctrl-Break выполняется INT 23H. 



Так, для справки...
PM   Вверх
Данкинг
Дата 30.7.2008, 02:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

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



Я в ассемблере ничего не понимаю, но всё равно стало интересно. smile Вот что у меня получилось: не знаю, как вывести число, но символ с кодом, который содержится в AL, у меня выводится. В моём примере, разумеется, раздаётся "пиииип". smile 

Код

CSEG segment 
org 100h 
begin: 
 mov al,2
 add al,5

 mov dl,al
 mov ah,02h

 int 21h

mov ah, 10h
int 16h

 int 20h
CSEG ends
end begin



--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Akina
Дата 30.7.2008, 09:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

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



Цитата(ROKI @  29.7.2008,  23:05 Найти цитируемый пост)
или етот код вообще никуда не годитса ?? 

Не годится.
Во-первых, выводимый символ должен быть не в AL, а в DL.
Во-вторых, символы "15", которые вы хотели бы получить на экране, это два байта "1" и "5" с ASCII-кодами 31h и 35h соответственно, т.е. должно быть 2 вызова функции 02h прерывания 21h, а выводимый байт надо поделить на части и преобразовать в ASCII///

Вот процедуры, которые я писАл черт знает когда, на заре моего изучения АСМа, для вывода на экран:
Код

; This 3 procedures types the content of AX (SAY_16), AL (SAY_8)
; or lower 4-bit part of AL (SAY_B) on screen in HEX digits.



SAY_16         PROC    NEAR
                PUSH    AX
                PUSH    CX
                PUSH    DX
                XOR     DX,DX
                XCHG    AH,DL
                PUSH    AX
                MOV     AX,DX
                CALL    SAY_8
                POP     AX
                CALL    SAY_8
                POP     DX
                POP     CX
                POP     AX
                RETN
SAY_16         ENDP

SAY_8          PROC    NEAR
                PUSH    AX
                PUSH    CX
                PUSH    DX
                XOR     AH,AH
                MOV     CL,4
                SHL     AX,CL
                SHR     AL,CL
                XOR     DX,DX
                XCHG    AH,DL
                PUSH    AX
                CALL    SAY_B
                POP    DX
                CALL    SAY_B
                POP     DX
                POP     CX
                POP     AX
                RETN
SAY_8          ENDP

SAY_B          PROC    NEAR
                MOV     AH,2
                ADD     DL,30H
                CMP     DL,3AH
                JB      SAY_B_
                ADD     DL,7
SAY_B_:        INT     21H
                RETN
SAY_B          ENDP
Сейчас я бы писАл иначе, но зато тут идет выполнение "в лоб", т.е. проще разбираться что к чему. Посмотри.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
ROKI
Дата 30.7.2008, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата

Во-первых, выводимый символ должен быть не в AL, а в DL.

У меня он находитса в АХ 
Выше указаный код, используетса для вывода чисел ??  smile , я думал всьо как-то проще будет ((
PM MAIL   Вверх
Akina
Дата 30.7.2008, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

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



Цитата(ROKI @  30.7.2008,  16:19 Найти цитируемый пост)
я думал всьо как-то проще будет 

Так это и упрощает дело. Подключаем это как инклюд или дописываем сегменты-экспорты и компилим в объектник или либу, а в своей программе тупо пишем
Код

mov al,15
call say_8

и всё...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
ROKI
Дата 30.7.2008, 22:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата

я думал всьо как-то проще будет ((

Просто мне сказали, что для вывода числа, надо только вызвать конкретное прерывание и все(ну типа так как я делал в своем коде). За ответы большое спасибо! 

Это сообщение отредактировал(а) ROKI - 30.7.2008, 22:18
PM MAIL   Вверх
THandle
Дата 31.7.2008, 01:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

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



Цитата(Akina @  30.7.2008,  10:11 Найти цитируемый пост)
Сейчас я бы писАл иначе

А можно полюбопытствовать как? Сам просто сейчас ассемблер осваиваю, интересно было бы посмотреть как профессионалы делали бы решение данной задачи smile 
PM   Вверх
Akina
Дата 31.7.2008, 08:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

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



Цитата(THandle @  31.7.2008,  02:26 Найти цитируемый пост)
интересно было бы посмотреть как профессионалы делали бы решение данной задачи 

Я в программировании любитель. Спроси профессионалов. 


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
airyashov
Дата 31.7.2008, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

;ax параметр, di-адрес строки с результатом 5-байт
Draw_B10b Proc
    push ax bx cx dx 
    add di,5
    mov cx,10
next_c:
    xor dx,dx
    div cx
    dec di
    or dx,30h
    mov [di],dl    
    test ax,ax
    jz end_c
    jmp next_c        
end_c:    
    pop dx cx bx ax
    ret
Draw_B10b endp


Это сообщение отредактировал(а) airyashov - 31.7.2008, 10:16


--------------------
icq:3(один)7748666
mail:airyashov( а )inbox.ru
PM MAIL   Вверх
THandle
Дата 1.8.2008, 00:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

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



Цитата(Akina @  31.7.2008,  09:02 Найти цитируемый пост)

Я в программировании любитель. Спроси профессионалов.  


Прошу прощения. Всегда считал Вас профессионалом. Тогда немного перефразирую: интересно было бы посмотреть как Вы бы сейчас написали решение данной задачи. Просто любопытно.

Извиняюсь за оффтопик.
PM   Вверх
DrWeb
Дата 2.12.2008, 19:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



возможно так тебе надо:
Код

mov ah,02h
mov dx,ax
add dx,30h
 int 21h 




Это сообщение отредактировал(а) DrWeb - 2.12.2008, 19:31
PM MAIL WWW   Вверх
Mikl_
Дата 3.12.2008, 05:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



DrWeb, допустим AL=0FFh=255d после mov dx,ax DX=02FFh, после add dx,30h DX=032Fh 
для вывода символа используется значение DL=2Fh -- это ASCII символ "/" а не строка "255"
для вывода нескольких сиволов либо используется функция 2 в цикле либо ищите функции, которые работают со строками символов
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для начинающих"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

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

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


 




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


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

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