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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.03.2014, 22:47   #1
natali121212
Новичок
Джуниор
 
Аватар для natali121212
 
Регистрация: 21.03.2014
Сообщений: 1
По умолчанию ассемблер. исправить чтобы число выводящие на экран возводилось не в квадрат, а в куб

подскажите что нужно исправить чтобы число выводящие на экран возводилось не в квадрат а в куб

Код:
str1 DB 13,10,"Vvedite chislo: ","$"
str3 DB 13,10,"Kvadrat chisla: ","$"
num1 DB ?
.code ; начало сегмента кода программы
start:
 mov ax,@data ; инициализация сегмента данных
 mov ds,ax
Вывод заставки
lea dx,str0 ; в DX - адрес строки
mov ah,9
int 21h ; вывод строки
input_1:
; Ввод множимого
lea dx,str1 ; в DX - адрес строки
mov ah,9
int 21h ; вывод строки

mov ah,1
int 21h ; ввод символа
cmp al,'0' ; проверка введенного символа
jl input_1
cmp al,'9'
jg input_1
sub al,30h ; преобразование кода символа в число
mov num1,al ; запомнить множимое
mov al,num1
mul al ; операция умножения
aam ; коррекция результата в ax
mov dl,ah ; в DL старшая цифра
mov dh,al ; в DH младшая цифра
or dh,30h ; получение ASCII-кода младшей цифры
or dl,30h ; получение ASCII-кода старшей цифры
push dx ; сохранить регистр DX в стеке
lea dx,str3 ; в DX - адрес строки
mov ah,9
int 21h ; вывод строки
pop dx ; восстановить регистр DX из стека
mov ah,2 ; вывод на экран старшей цифры
int 21h
xchg dh,dl ; обмен значений в регистрах DH и DL
mov ah,2 ; вывод на экран младшей цифры
int 21h
mov ax,4C00h
int 21h ; завершение программы с кодом 0
END start


________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE]
(это кнопочка на панели форматирования с решёточкой #)
Не забывайте об этом!

Модератор.

Последний раз редактировалось Serge_Bliznykov; 22.03.2014 в 10:25.
natali121212 вне форума Ответить с цитированием
Старый 22.03.2014, 10:56   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Натали, а Вы эту программу сами писали?
Ибо, если нет, то Вам очень затруднительно будет разобраться в коде...

впрочем, извольте.
Разбирайтесь:
Код:
.MODEL    TINY 
.386 
.data
str0 DB 13,10,"Program written at programmersforum.ru","$"
str1 DB 13,10,"Vvedite chislo: ","$"
str3 DB 13,10,"Kub chisla: ","$"
num1 DB ?
String	db	5 dup (?),' $'  ; Резервируем 5 байт для строки + пробел
StringEnd	=	$-1            ; Указывает на символ '$'
.code ; начало сегмента кода программы
start:
  mov ax,@data ; инициализация сегмента данных
  mov ds,ax
  mov es, ax      ; настройка ES на DS
  ; Вывод заставки
  lea dx,str0 ; в DX - адрес строки
  mov ah,9
  int 21h ; вывод строки
  input_1:
  ; Ввод множимого
  lea dx,str1 ; в DX - адрес строки
  mov ah,9
  int 21h ; вывод строки

  mov ah,1
  int 21h ; ввод символа
  cmp al,'0' ; проверка введенного символа
  jl input_1
  cmp al,'9'
  jg input_1
  sub al,30h ; преобразование кода символа в число
  mov num1,al ; запомнить множимое
  mov al,num1
  mul Num1 ; операция умножения
;  aam ; коррекция результата в ax
  mul Num1 ; операция умножения
;  aam ; коррекция результата в ax
  push ax

  lea dx,str3 ; в DX - адрес строки
  mov ah,9
  int 21h ; вывод строки

  pop ax
  call PrintAx


  mov ax,4C00h
  int 21h ; завершение программы с кодом 0

; ПОДПРОГРАММЫ
;------------------------------------------------------------------------------------
; Напечатать значение регистра AX в его десятичное представление (в виде строки)
;   на входе AX, 
;------------------------------------------------------------------------------------
PrintAx:        push    bx
                push    cx
		std                    ; Устанавливаем ОБРАТНЫЙ порядок записи
		lea	di,StringEnd-2 ; ES:DI = последний символ строки String (не учитывая $ и пробел)

; Начинаем перевод числа AX в строку
		mov	cx,10          ; Задаемся делителем CX = 10
Repeat:
		xor	dx,dx          ; Обнуляем DX (для деления)
		div	cx             ; Делим DX:AX на CX (10),
                                       ; Получаем в AX частное, в DX остаток
		xchg	ax,dx          ; Меняем их местами (нас интересует остаток)
		add	al,'0'         ; Получаем в AL символ десятичной цифры
		stosb                  ; И записываем ее в строку
		xchg	ax,dx          ; Восстанавливаем AX (частное)
		or	ax,ax          ; Сравниваем AX с 0
		jne	Repeat         ; Если не ноль, то повторяем

; Теперь осталось вывести строку на экран
		mov	ah,9
		lea	dx,[di+1]      ; Заносим в DX адрес начала строки
		int	21h            ; Выводим ее на экран
		pop     cx
		pop     bx
		ret

END start
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
проверьте прогу пожайлуста!не заменяется на куб, только на квадрат aanaaa Общие вопросы C/C++ 1 03.06.2011 00:26
выводит на экран квадрат из * volery Общие вопросы C/C++ 16 26.04.2010 00:31
Как возвести число в квадрат prikolist Общие вопросы C/C++ 9 04.04.2009 18:48
как написать в excel квадрат или куб числа? BEYLERBEYİ2009 Microsoft Office Excel 16 17.02.2009 16:18
Число N, заменить одну из его цифр, чтобы получилось число, max близкое к некоторой степени двойки urgu_st Помощь студентам 13 23.10.2007 09:14