Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Assembler] Умножение чисел, и вывод в шестнадцатеричном виде 
:(
    Опции темы
DarkcKatana
Дата 1.11.2006, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 1.11.2006
Где: Кремень(Украина)

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



Народ нухна помощь в Асме. Так как я недавнишний человек в ассемблере. Можно сказать что я еще нахожусь в зародыше.
Есть задача такого типа:
    
    1. Запрашивает 2 числа в 2 - му виде в диапазоне от 0 до 255, множит их и выводит на экран результат в 16 - му виде

Есть код:

Код

title Lb1

model small

stack 100h

.data
    
    DigitMax db 6
    StrLen db ?
    DigitStr db 5 dup (?)
    InputMessage db "Vvedite chislo $"
    Power dw 1
    ten dw 10    
.code

    start:
    mov ax, @data
    mov ds, ax
    
    mov ax, 3
    int 10h
    
    mov ah, 9
    lea dx, InputMessage
    int 21h
    
    lea dx, DigitMax
    mov ah, 0Ah
    int 21h
    
    xor ax, ax
    
    mov bx, dx
    
    xor cx, cx
    
    mov cl, [bx+1]
    
    add bx,cx
    inc bx
    
    xor si, si
    
m:    mov al, [bx]
    cbw
    and ax, 0Fh
    mul word ptr Power
    
    add si, ax
    
    
    mov ax, Power
    mul ten
    mov Power, ax
    dec bx
    loop m
        
    mov Ah, 04Ch
    int 21h
    end start


Что в этом коде надо изменить для того чтобы он работал коректно?
PM MAIL   Вверх
anwe
Дата 1.11.2006, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата
1. Запрашивает 2 числа в 2 - му виде в диапазоне от 0 до 255, множит их и выводит на экран результат в 16 - му виде

Как этот понимать? Ты, хотьт сам понял что написал?
Может так: запрашивает 2 числа в двоичном виде в диапазоне от 0 до 255, множит их и выводит на экран результат в 16-ричном виде?
PM MAIL   Вверх
DarkcKatana
Дата 1.11.2006, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 1.11.2006
Где: Кремень(Украина)

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



Да. Просто с переводом проблемка. Книжка на Укр.
Что можно зделать или изменить чтобы выполнялось это условие?
PM MAIL   Вверх
anwe
Дата 2.11.2006, 01:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



О-о, так тут еще корректировать и корректировать (вернее добавлять).
1. Надо ввести второе число.
2. Надо проверить правильность их ввода.
3. Перемножить.
4. Перевести в 16-ричное.
5. Вывести.  smile 
Самое сложно здесь для тебя - это пункт 4.
Для примера я сделал десятичное в 16-ричное. Для двоичного додумаешь сам и проверку додумаешь сам.
Пример:
Код

.model tiny
.code
org 100h
start:    
mov    dx,offset message1
mov    ah,9
int    21h
mov    dx,offset buffer
mov    ah,0Ah
int    21h
mov    dx,offset crlf
mov    ah,9
int    21h
xor    di,di
xor    ax,ax
mov    cl,blength
xor    ch,ch
xor    bx,bx
mov    si,cx
mov    cl,10
asc:
mov    bl,byte ptr bcontents[di]
sub    bl,'0'
jb    asc_error
cmp    bl,9
ja    asc_error
mul    cx
add    ax,bx
inc    di
cmp    di,si
jb    asc
push    ax
mov    ah,9
mov    dx,offset message2
int    21h
pop    ax
push    ax
xchg    ah,al
call    print_all
pop    ax
call    print_all
mov    dx,offset crlf
mov    ah,9
int    21h
mov    dx,offset message3
mov    ah,9
int    21h
key:
mov    ah,8h
int    21h
cmp    al,'y'
je    y
cmp    al,'n'
je    n
jmp    key
y:
mov    dx,offset message4
mov    ah,9
int    21h
jmp    start
n:
mov    dx,' '
mov    ah,2
int    21h
mov    dx,'N'
int    21h
ret
asc_error:
mov    dx,offset err_msg
mov    ah,9
int    21h
ret
print_all:
mov    dh,al
and    dh,0Fh
shr    al,4
call    print_n
mov    al,dh
print_n:
cmp    al,10
sbb    al,69h
das
mov    dl,al
mov    ah,2
int    21h
ret

message1    db    "Dec count:",'$'
message2    db    "Hex count:$"
message3    db    "Continue? [Y,N]$"
message4    db    " Y"
crlf    db    0Dh,0Ah,'$'
err_msg    db    "Error input$"
buffer    db    6
blength    db    ?
bcontents:
    end start


P.S. Это com-файл! Имей ввиду при компиляции.
PM MAIL   Вверх
DarkcKatana
Дата 2.11.2006, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 1.11.2006
Где: Кремень(Украина)

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



Вот спасибо за помощь
PM MAIL   Вверх
sergejzr
Дата 19.11.2006, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

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



Для домашних заданий, курсовых, существует "Центр Помощи".

Тема перенесена! 


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

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

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


 




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


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

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