Ещё раз помогите новичку :)

Низкоуровневое программирование портов, микроконтроллеров и т.д.

Модератор: Andy

Ответить
Corba
Сообщения: 3
Зарегистрирован: 19 фев 2005, 00:46

;Начало программы

masm
.model small
.stack 100h

.data
dosver dw 0

.code
start:

mov ax,@data ;
mov ds,ax ;инициализация данных

;---------------------------------------------------------------------
;Определение версии ДОС с помощью функции 30h прерывания 21h.
;Если версия ДОС 3.10, то в регистр AH помещается значение 10,
;а в AL помещается 3.
;---------------------------------------------------------------------

mov ah,30h
int 21h
xchg al,ah
mov dosver,ax

mov ah,09h ;вывод значение dosver на экран.
lea dx,dosver
int 21h

;----------------------------------------------------------------------
;Стандартный выход в ДОС.
;----------------------------------------------------------------------


mov ah,4ch
int 21h

end start


Заместо выдачи версии ДОС мне прога выкидывает кучу всякого "мусора": 4_е строки разнобразных символов. Я недавно сел за ассемблер может чего не доганяю. Помогите.
Andy
Сообщения: 238
Зарегистрирован: 17 фев 2004, 08:15
Откуда: Минск

Потому, что dosver это не строка. Преобразовывай в строку и выводи.
ЗЫ. Книги для начинающих по идее рулят ;)
*provided AS IS
Corba
Сообщения: 3
Зарегистрирован: 19 фев 2005, 00:46

а какими командами это можно сделать (в каком направлении "копать")????
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Специальной команды нет, придётся придумать самому алгоритм для преобразования числа в строку. Самый простой способ в цикле делить исходное число на 10 и запоминать разницу между исходным числом и результатом деления умноженным на 10, т.е., фактически, каждый раз запоминать остаток от деления. Затем полученную строку придётся инвертировать. Школьная математика рулит :)
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Corba
Сообщения: 3
Зарегистрирован: 19 фев 2005, 00:46

Понятно. Я было начал думать про команду STOSW, но видно она не подходит, tasm выдаёт сообщение об ошибке.
Ответить