Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ASM,DOS,четверичная система счисления 
:(
    Опции темы
crazysun
Дата 5.10.2005, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



блин препод садист дал задание перевести из 4 системы в 16 + число в четверичной системе должно быть не более 4 разрядным...
Как всегда здавать завтра надеялся на свои силы, но они подвели ...

P.S. потом только заметил название темы не asm, а Tasm...

Это сообщение отредактировал(а) crazysun - 5.10.2005, 16:46
PM MAIL   Вверх
Mayk
Дата 5.10.2005, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


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

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



сча опишу алгоритм как прочитать n-ичную систему счисления.

пусть у нас есть число - строка из цифр 4-ой сс

инициализация
ПУСТЬ результат = 0

основной цикл
ДЛЯ каждой цифры числа (слева направо)
результат = (результат * база) + цифра

Теперь в результате у нас есть число. Вот его и выводим.

(пример.
пусть у нас есть 21 (2*4+1=9) в четверичной системе.

0) результат = 0 //инициализация
1) результат = 0 * 4 + 2 = 2 // основной цикл
2) результат = 2*4 + 1 = 9 // основной цикл

9 = 9
Добавлено @ 16:55
сча поищу как этот алгоритм называется.

Добавлено @ 17:00
Чйорт. Непонятно написано.


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
crazysun
Дата 5.10.2005, 17:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



ничего не понемаю ... smile и кстати забыл добавить у меня XP ...
я еще asm плохо знаю, есть две книги Абеля и Зубкова ... читаю учу ...


PM MAIL   Вверх
Mayk
Дата 5.10.2005, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


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

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



Это алгоритм такой занятный (не знаю как называется - неясно написал) по переводу строки в число.
На пасе выглядит примерно так
Код

for i:= 1 to length(str) do
 res := res * 4 + str[i]-'0';


Цитата(crazysun @ 5.10.2005, 21:10)
я еще asm плохо знаю, есть две книги Абеля и Зубкова ... читаю учу ...

Зубков рулит.
В описании команды DAS (стр. 39, если у нас одинаковые книг - "Асм для DOS, WIN, UNX", изд. "Питер", 2005 год)
даётся код по распечатке 16-ых цифр.

Это сообщение отредактировал(а) Mayk - 5.10.2005, 17:26


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
crazysun
Дата 5.10.2005, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата
описании команды DAS (стр. 39, если у нас одинаковые книг - "Асм для DOS, WIN, UNX", изд. "Питер", 2005 год)
даётся код по распечатке 16-ых цифр.

видел, там вообще пример dosin1 идеальный для перевода из 10 системы в 16 ...
Там можно и зделать что бы число было четырех разрядным вот тока система 10 ...
Кто еще не видел вот код ...
Мне бы его умный человек поправил бы smile
Код

; dosin1.asm
; Переводит десятичное число в шестнадцатеричное
;
; Компиляция:
; TASM:
; tasm /m dosin1.asm
; tlink /t /x dosin1.obj
; MASM:
; ml /c dosin1.asm
; link dosin1.obj,,NUL,,,
; exe2bin dosin1.exe dosin1.com
; WASM
; wasm dosin1.asm
; wlink file dosin1.obj form DOS COM
;

    .model    tiny
    .code
    .286        ; для команды shr al,4
    org    100h    ; начало COM-файла
start:
    mov    dx,offset message1
    mov    ah,9
    int    21h        ; вывести приглашение к вводу message1
    mov    dx,offset buffer
    mov    ah,0Ah
    int    21h        ; считать строку символов в буфер
    mov    dx,offset crlf
    mov    ah,9
    int    21h        ; перевод строки

; перевод числа в ASCII-формате из буфера в бинарное число в AX
    xor    di,di        ; DI = 0 - номер байта в буфере
    xor    ax,ax        ; AX = 0 - текущее значение результата
    mov    cl,blength
    xor    ch,ch
    xor    bx,bx
    mov    si,cx        ; SI - длина буфера
    mov    cl,10        ; CL = 10, множитель для MUL
asc2hex:
    mov    bl,byte ptr bcontents[di]
    sub    bl,'0'    ; цифра = код цифры - код символа "0"
    jb    asc_error    ; если код символа был меньше, чем код "0",
    cmp    bl,9        ; или больше, чем "9",
    ja    asc_error    ; выйти из программы с сообщением об ошибке,
    mul    cx        ; иначе: умножить текущий результат на 10,
    add    ax,bx        ; добавить к нему новую цифру,
    inc    di        ; увеличить счетчик
    cmp    di,si        ; если счетчик+1 меньше числа символов -
    jb    asc2hex    ; продолжить
; (счетчик считается от 0)

; вывод на экран строки message2
    push    ax        ; сохранить результат преобразования
    mov    ah,9
    mov    dx,offset message2
    int    21h
    pop    ax

; вывод на экран числа из регистра AX
    push    ax
    xchg    ah,al        ; поместить в AL старший байт
    call    print_al    ; вывести его на экран
    pop    ax        ; восстановить в AL младший байт
    call    print_al    ; вывести его на экран

    ret        ; завершение COM-файла

asc_error:
    mov    dx,offset err_msg
    mov    ah,9
    int    21h        ; вывести сообщение об ошибке
    ret            ; и завершить программу


; Процедура print_al.
; выводит на экран число в регистре AL в шестнадцатеричном формате
; модифицирует значения регистров AX и DX


print_al:
    mov    dh,al
    and    dh,0Fh        ; DH - младшие 4 бита
    shr    al,4        ; AL - старшие
    call    print_nibble    ; вывести старшую цифру
    mov    al,dh        ; теперь AL содержит младшие 4 бита
print_nibble:        ; процедура вывода 4 бит (шестнадцатеричной цифры)
    cmp    al,10        ; три команды, переводящие цифру в AL
    sbb    al,69h        ; в соответствующий ASCII-код
    das            ; (см. описание команды DAS)

    mov    dl,al        ; код символа в DL
    mov    ah,02h        ; номер функции DOS в AH
    int    21h        ; вывод символа
    ret        ; этот RET работает два раза - один раз для возврата из
; процедуры print_nibble, вызванной для старшей цифры,
; и второй раз - для возврата из print_al

message1 db    'Enter decimal number: $'
message2 db    'Hex number is: $'
err_msg    db    'Bad number entered'
crlf    db    0Dh,0Ah,'$'
buffer    db    10        ; максимальный размер буфера ввода
blength    db    ?        ; размер буфера после считывания
bcontents:            ; содержимое буфера располагается за
                ; концом COM-файла
end    start



Это сообщение отредактировал(а) crazysun - 5.10.2005, 18:39
PM MAIL   Вверх
Akina
Дата 5.10.2005, 23:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Мама моя! как все запущено...

Код

; DS:SI - источник, строка 4-значного числа в 4-ричной системе счисления
; ES:DI - приемник, строка для размещения 2-значного того же числа в 16-ричной системе

Convert proc
 cld
 mov cx,2
repeat:
 lodsw
 sub ax,'00'
 shl al,4
 add al,ah
 add al,'0'
 cmp al,'9'
 jna store
 add al,'A'-'9'-1
store:
 stosb
 rep repeat
 ret
Convert endp

PS. Написано на лету - требует проверки.


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

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


ЖгуПоПонедельникам
**


Профиль
Группа: Участник
Сообщений: 298
Регистрация: 24.8.2006
Где: ws2.lib

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



Akina
Сообщений: 5555

Ну не мог я не написать ! smile

Добавлено @ 22:22 
только что заметил дату  smile 


--------------------
Я Будущий сотрудник Google Inc. Юзаем Google Code Search для поиска исходников. Юзаем GMail как почту.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для начинающих"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

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

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


 




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


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

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