Страница 1 из 1

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

Добавлено: 19 фев 2005, 01:12
Corba
;Начало программы

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_е строки разнобразных символов. Я недавно сел за ассемблер может чего не доганяю. Помогите.

Добавлено: 19 фев 2005, 11:55
Andy
Потому, что dosver это не строка. Преобразовывай в строку и выводи.
ЗЫ. Книги для начинающих по идее рулят ;)

Добавлено: 19 фев 2005, 17:37
Corba
а какими командами это можно сделать (в каком направлении "копать")????

Добавлено: 19 фев 2005, 18:44
Romeo
Специальной команды нет, придётся придумать самому алгоритм для преобразования числа в строку. Самый простой способ в цикле делить исходное число на 10 и запоминать разницу между исходным числом и результатом деления умноженным на 10, т.е., фактически, каждый раз запоминать остаток от деления. Затем полученную строку придётся инвертировать. Школьная математика рулит :)

Добавлено: 20 фев 2005, 16:50
Corba
Понятно. Я было начал думать про команду STOSW, но видно она не подходит, tasm выдаёт сообщение об ошибке.