Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.01.2013, 17:42   #11
vadimych
Форумчанин
 
Регистрация: 16.01.2011
Сообщений: 325
По умолчанию

Код:
.model tiny
.code
org 100h
start:

mov ax,1
mov di,offset buffer
lea si,[di+4]
mov cx,1000

@3:
stosw
inc ax
loop @3

mov bx,10
mov cx,1000/3

@4:
lodsw
add si,4
call print
loop @4

xor ax,ax
int 16h

ret

print proc
push cx

xor cx,cx

@1:
xor dx,dx
div bx
push dx
inc cx
test ax,ax
jnz @1

@2:
pop ax
or al,30h
int 29h
loop @2

mov al,20h
int 29h
pop cx
ret
print endp

buffer dw ?
end start
На весы жать не обязательно.
vadimych вне форума Ответить с цитированием
Старый 26.01.2013, 19:49   #12
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

простите конечно за вопрос, на а возможно код написать используя только те команды, которые есть у меня? тут много команд, которых мы не проходили, напишите коментарии если можно))
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 26.01.2013, 19:55   #13
vadimych
Форумчанин
 
Регистрация: 16.01.2011
Сообщений: 325
По умолчанию

Цитата:
Сообщение от Алексей_2012 Посмотреть сообщение
тут много команд, которых мы не проходили
Загляните в справочник. А комментарии даром не пишу.
vadimych вне форума Ответить с цитированием
Старый 27.08.2015, 06:09   #14
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Ребят, а подскажите , пожалуйста, возможно ли написать программу на асме, аналог которой -

For (float i(0.1);i<1000;i+=0.1) std::cout<<i<<std::endl;

Т.е. вывод

0.1
0.2
0.3
...
999.9

Хотя бы алгоритм)
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 28.08.2015, 23:24   #15
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

Как я понял, тебе нужно вывести без сопроцессора?
В таком случае, двоичные числа не имеют возможности установки запятой. Мы-сами должны определить формат чисел с подобной/плавающей запятой. Десятичная запятая в двоичном числе только подразумевается..

В твоём случае, задачку удобно решить, работая прямо с ASCII-символами: код(30h) = символу "0", код(39h) = символу "9". Точку/разделитель просто выводи по-ходу, где нужно.

Вот тебе код на FASM'е. Думаю алгоритм понятен, поэтому остальное допиши сам:

Код:
use16
org 100h
jmp start

hello   db  13,10,'Press any key to start...'
        db  13,10,'================================================================',13,10,10,'$'

z01     db  '000'             ; строка с целым числом
z02     db  '0  '             ; десятые, с двумя пробелами/разделителями
nStr    db  13,10,'$'         ; переход на новую строку

start:
   mov   dx,hello             ; выводим на экран шапку/приветствие
   mov   ah,9
   int   21h
   xor   ax,ax                ; начинаем по-любой клавише ------------------|
   int   16h

prints:
   call  message              ; зовём функцию вывода на экран
   cmp   byte[z02+0],'9'      ; десятая доля достигла 9-ти?
   jb    prints               ; если меньше, то мотаем цикл

   mov   dx,nStr              ; десятые прокрутились один круг!
   mov   ah,9                 ;      ..переходим на другую строку
   int   21h

   mov   byte[z02+0],'0'      ; сбрасываем десятую долю,
   inc   byte[z01+2]          ;     увеличиваем целое на 1
   cmp   byte[z01+2],'9'      ;        и проверяем его на 9-тку
   jb    prints               ; меньше? мотаем цикл...

exit:                         ; по-любой клавише - на выход!
   xor  ax,ax
   int  16h
   mov  ah,4ch
   int  21h

;=============================; основная процедура ===========================|
message:
   inc   byte[z02+0]          ; увеличиваем долю на 1
   mov   cx,3                 ; тройной цикл для целого
   mov   si,z01               ; SI указывает на область данных
xLoop:                        ; начало цикла..
   lodsb                      ; берём первый символ целого числа
   int   29h                  ; выводим его на экран
   loop  xLoop                ; мотаем цикл CX-раз
   mov   al,'.'               ; вставляем точку/разделетиль
   int   29h                  ;    и тоже на экран её.
   mov   cx,3                 ; CX = счётчик цикла для остатка
   mov   si,z02               ; SI = область данных
cLoop:
   lodsb                      ; берём от-туда символ,
   int   29h                  ;    и выводим его экран.
   loop  cLoop                ; промотаем цикл CX-раз
ret                           ; отправляемся туда, от-куда прибыли.
Изображения
Тип файла: jpg 999.jpg (36.7 Кб, 139 просмотров)
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Старый 29.08.2015, 21:54   #16
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Спасибо и глупый вопрос: на TASMe тоже все операторы допустимы?

В данный момент подтягиваю знания в С, С++, умные люди говорят то, что изучив ассемблер - в СИ получится быстрее разобраться. Дабы отвыкнуть от Делфи-мышления)
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создать типизированный файл n действительных чисел. technomaster Помощь студентам 13 10.03.2012 13:05
преобразовать массив действительных чисел Olka_a Помощь студентам 7 29.12.2011 14:55
преобразовать массив действительных чисел Olka_a Помощь студентам 2 29.12.2011 02:40
Матрицы действительных чисел. Паскаль. zmey1 Паскаль, Turbo Pascal, PascalABC.NET 10 17.11.2011 14:20