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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.12.2012, 20:35   #1
anna123
Новичок
Джуниор
 
Регистрация: 15.12.2012
Сообщений: 2
Печаль код на ассемблере((( Ввести с клавиатуры строку. Преобразовать все буквы в числа. построить криптограмму

Ввести с клавиатуры строку. Преобразовать все буквы в числа. построить криптограмму(вместо букв вывести на экран соответствующие им числа. помогите плиз


______________
Название темы по правилам форума должно адекватно отражать суть решаемой задачи/проблемы.
На первый раз я исправил.
В последующем, темы с подобным названием будут закрываться или удаляться,
а автор такой темы будет получать штрафные баллы.
Учтите это на будущее.

Модератор.

Последний раз редактировалось Serge_Bliznykov; 15.12.2012 в 22:03.
anna123 вне форума Ответить с цитированием
Старый 15.12.2012, 22:02   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Анечка, во-первых, ассемблеры, они разные бывают. Вам какой?
во-вторых, то, что на Паскале/Delphi/C/C# и прочих языках высокого уровня пишется не напрягаясь за три минуты, на Ассемблере может потребовать НАМНОГО больше усилий (даже в этой простейшей задаче я бы замучился писать код с нуля! Другое дело, что можно взять уже готовый кусочек кода из ранее написанного и скомпоновать рабочую программу, но тут сразу возникает вопрос...
Цитата:
помогите плиз
Я так понимаю, то "помочь" по вашему подразумевает сделать полностью всё за Вас, да?..
Serge_Bliznykov вне форума Ответить с цитированием
Старый 15.12.2012, 22:50   #3
anna123
Новичок
Джуниор
 
Регистрация: 15.12.2012
Сообщений: 2
По умолчанию

Tasm.

Код:
data segment
	cifr db 100, ?, 100 dup(?)
vyvod 1,1,?
data ends
code segment
assume cs:code, ds:data
Start:	mov ax,data
	mov ds, ax
	lea dx, cifr
	mov ax, 0a00h
	int 21h
	mov cx, cifr+1
	lea bx, cifr +2
next:	mov al,[bx]
	sub al,'0'
	mov [bx], al
	inc bx
	loop next
	mov [bx+1], '$'
	lea dx, cifr+2
	mov ax, 0900h
	int 21h
	lea dx, vyvod
	mov ax, 0a00h
	int 21h
quit:	mov 4c00h
	int 21h
code ends
end Start
есть такие соображения, но совсем не коды выводит



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

Модератор.

Последний раз редактировалось Serge_Bliznykov; 16.12.2012 в 01:42.
anna123 вне форума Ответить с цитированием
Старый 16.12.2012, 03:29   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
есть такие соображения, но совсем не коды выводит
да ладно! То, что Вы привели - это не то, чтобы не те коды выведет, это даже не скомпилируется!
чего стоит, например,
Цитата:
Код:
mov 4c00h
Цитата:
вместо букв вывести на экран соответствующие им числа
для латинской буквы s - какое число соответствует?
а для русской ы - какое число?


ладно. вот, для затравки пример кода.
выводит коды символов (таблица ASCII, кодировка DOS) в десятичном представлении.
Код:
data segment
  cifr db 100, ?, 100 dup(?)
  String	db	5 dup (?),' $'  ; Резервируем 5 байт для строки + пробел
  StringEnd	=	$-1            ; Указывает на символ '$'
data ends
code segment
assume cs:code, ds:data
Start:	jmp main

; ПОДПРОГРАММЫ
;------------------------------------------------------------------------------------
; Напечатать значение регистра 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

main:
        mov ax, data
	mov ds, ax
        mov es, ax      ; настройка ES на DS
	lea dx, cifr
	mov ax, 0a00h
	int 21h
	mov cl, cifr+1
	lea bx, cifr +2

next:   mov ah,0	
        mov al,[bx]

        call PrintAx
	inc bx
	loop next

        mov ah,10h  
        int 16h

quit:	mov ax, 4c00h
	int 21h
code ends
end Start
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дана строка. Преобразовать в ней все строчные буквы в прописные. Ginger_93 Помощь студентам 2 22.03.2012 15:17
Преобразовать все буквы нижнего регистра в буквы верхнего регистра druger Помощь студентам 5 18.09.2011 17:27
задача на Си,Ввести строку, в которую могут входить только цифры и буквы. vinternete Помощь студентам 0 11.07.2011 12:35
как ввести числа с клавиатуры и запомнить их в переменные mandarinka27 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 18.05.2009 17:03