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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.12.2010, 18:39   #1
agressenok
Пользователь
 
Регистрация: 29.11.2010
Сообщений: 19
По умолчанию две задачки

Всем привет. Мне нужно решить две задачи на ассемблере. Я расскажу как мы это делаем ( должны делать), а то мб знатоки по другому делают, я не знаю Вообщем открываем в Far Manager какой то файл .asm , редактируем и потом сохраняем. Далее в Far manager прописываем tasm lab1.asm появляется lab1.obj и потом вроде link lab1. Вообщем мне нужно чтобы эти две задачи в эксе потом открывались. Вот сами задания

1.Ввести с клавиатуры строку. Преобразовать все малые буквы в боль¬шие. Вывести результаты на экран.

2.Разработать две подпрограммы, одна из которых преобразует любую заданную букву в заглавную (в том числе для русских букв), а другая пре-образует букву в строчную. Разработать программу, которая вводит с кла-виатуры строку и замещает первые буквы всех слов заглавными, а осталь-ные строчными буквами
agressenok вне форума Ответить с цитированием
Старый 03.12.2010, 19:16   #2
nZil
 
Регистрация: 21.11.2010
Сообщений: 5
По умолчанию

Два варианта:
ты даешь наработки
ты даешь 3WMZ за одно задание
nZil вне форума Ответить с цитированием
Старый 04.12.2010, 09:46   #3
agressenok
Пользователь
 
Регистрация: 29.11.2010
Сообщений: 19
По умолчанию

По второй есть наработки.
data segment
max db 100
kolvo db ?
stroka db 100 dup(?)
MA db 'a','b','c','d','e','f','g','h','i' ,'j','k','l','m','n','o','p','q','r ','s','t','u','v','w','x','y','z'
BA db 'A','B','C','D','E','F','G','H','I' ,'J','K','L','M','N','O','P','Q','R ','S','T','U','V','W','X','Y','Z'
MR db 'а','б','в','г','д','е','ё','ж','з' ,'и','й','к','л','м','н','о','п','р ','с','т','у','ф','х','ц','ч','ш',' щ','ъ','ы','ь','э','ю','я'
BR db 'А','Б','В','Г','Д','Е','Ё','Ж','З' ,'И','Й','К','Л','М','Н','О','П','Р ','С','Т','У','Ф','Х','Ц','Ч','Ш',' Щ','Ъ','Ы','Ь','Э','Ю','Я'
kolvo2 db ?
data ends
code segment
assume cs:code,dsata
start: mov ax,data
mov ds,ax

lea dx,max
mov ah,0ah
int 21h


xor ax,ax
lea bx,kolvo
mov cl,[bx]
mov kolvo2,cl
mov kolvo,' '
lea bx,kolvo
beg: mov al,[bx]
cmp al,' '
jz rav
call downs
jmp m21
rav: inc bx
call ups
dec cx
m21:
inc bx
loop beg

lea bx,kolvo2
mov al,[bx]
mov bl,al
mov [bx+2],'$'

mov dl,0ah
mov ah,02h
int 21h

lea dx,stroka
mov ah,09h
int 21h

mov ah,01h
int 21h

QUIT: mov ax,4c00h
int 21h












ups proc
push cx
push dx
push ax
mov dl,[bx]
push bx
xor cx,cx
cmp dl,'z'
jng smen
jmp m1

smen:
mov cl,26
lea bx,ma
povtor1:
mov al,[bx]
cmp dl,al
jz uv
jmp m2
uv:
mov dl,[bx+26]
mov cx,0001h
jmp m101
m2: inc bx
loop povtor1
m1:


cmp dx,'я'
jng smru
jmp m5

smru:
mov cl,31
lea bx,MR
povtor3:
mov al,[bx]
cmp dl,al
je uvr
jmp m6
uvr:
mov dl,[bx+31]
mov cx,0001h
m6: inc bx
loop povtor3
m5:
m101:
mov dh,00h
xor bx,bx
pop bx
mov [bx],dl
xor dx,dx
xor ax,ax
xor cx,cx
pop ax
pop dx
pop cx
ret
ups endp








downs proc
push cx
push dx
push ax
mov dl,[bx]
push bx
xor cx,cx
cmp dl,'Z'
jng ben
jmp m3

ben:
mov cx,26
lea bx,ba
povtor2: mov al,[bx]
cmp dl,al
je me
jmp m4
me: mov al,[bx-26]
mov dl,al
mov cx,0001h
jmp m102
m4: inc bx
loop povtor2
m3:

cmp dl,'Я'
jng bur
jmp m7

bur:
mov cl,31
lea bx,br
povtor4:
mov al,[bx]
cmp dx,ax
je mu
jmp m8
mu: mov al,[bx-31]
mov dl,al
mov cx,0001h
m8: inc bx
loop povtor4
m7:
m102:
mov dh,00h
xor bx,bx
pop bx
mov [bx],dl
xor dx,dx
xor ax,ax
xor cx,cx
pop ax
pop dx
pop cx

ret
downs endp
code ends
end START
agressenok вне форума Ответить с цитированием
Старый 04.12.2010, 12:14   #4
Ant1971on
Пользователь
 
Регистрация: 20.07.2010
Сообщений: 52
По умолчанию

Ну, первая задачка несложная, вот:

Код:
;Программа меняет введенные строчные буквы на заглавные (только для латиницы).

CODE_SEG SEGMENT

ASSUME CS:CODE_SEG,DS:DATA_SEG

START:

;настроить DS

	MOV AX,DATA_SEG
	MOV DS,AX

;ввести строку

	MOV DX,OFFSET STRING
	MOV AH,0Ah
	INT 21h

;преобразование строки:

	MOV BX,DX
	INC BX			;BX указывает на число введенных символов
	MOV CL,[BX]                 ;отправим это число в счетчик
	XOR CH,CH                   ;сбросим старший байт счетчика
	PUSH CX		;сохраним число символов в стеке

TO_UPPER:

	INC BX			;BX указывает на проверяемый символ
	MOV AL,[BX]		;отправим этот символ в AL

;Попадает ли проверяемый символ в диапазон строчных букв ? Если да, изменим
;букву на заглавную, нет - на проверку следующего символа.

	CMP AL,'a'		
	JB DO_NOT_CHANGE
	CMP AL,'z'
	JA DO_NOT_CHANGE
	
	ADD AL,'A'-'a'	
	MOV [BX],AL 		;заменить строчную букву на загланую

DO_NOT_CHANGE:

	LOOP TO_UPPER 	;на проверку следующего символа

;Вывод измененной строки на экран

	POP CX			;вернем из стека число введенных символов
	MOV BX,OFFSET STRING
	MOV SI,2		;SI указывает на первый символ
		
PRINT_LOOP:

	MOV AH,02h
	MOV DX,[BX][SI]
	INT 21h
	INC SI			;SI указывает на следующий символ
	LOOP PRINT_LOOP		;на печать следующего символа

	MOV AX,4C00h
	INT 21h

CODE_SEG ENDS

DATA_SEG SEGMENT

STRING DB 80,?,80 DUP(?)

DATA_SEG ENDS

STACK_SEG SEGMENT STACK

DB 256 DUP(0)

STACK_SEG ENDS

END START
Ant1971on вне форума Ответить с цитированием
Старый 04.12.2010, 13:12   #5
agressenok
Пользователь
 
Регистрация: 29.11.2010
Сообщений: 19
По умолчанию

о ) спасибо большое. а вот вторая там ошибка выдает мне в 42 что ли строчке.
agressenok вне форума Ответить с цитированием
Старый 04.12.2010, 13:18   #6
agressenok
Пользователь
 
Регистрация: 29.11.2010
Сообщений: 19
По умолчанию

А что до Code segment? и еще вопрос, Вот подчеркивание снизу в code segment и т.д нужно убирать?
agressenok вне форума Ответить с цитированием
Старый 04.12.2010, 14:31   #7
Ant1971on
Пользователь
 
Регистрация: 20.07.2010
Сообщений: 52
По умолчанию

Цитата:
подчеркивание снизу в code segment и т.д нужно убирать?
Это просто я так пишу, можете писать и без подчеркивания, напр., Code,Data,Stk, это только имена.

Цитата:
А что до Code segment?
У меня программа начинается с кода, данные и стек идут после, поэтому до сегмента кода только название программы
Хотя правильнее, наверное, сначала описать данные.
Ant1971on вне форума Ответить с цитированием
Старый 04.12.2010, 14:59   #8
agressenok
Пользователь
 
Регистрация: 29.11.2010
Сообщений: 19
По умолчанию

а вот я заполнил да , потом прописал в fare tasm ... link ... возник .exe и как его правильно открыть? через что? и как?))
agressenok вне форума Ответить с цитированием
Старый 04.12.2010, 15:08   #9
Ant1971on
Пользователь
 
Регистрация: 20.07.2010
Сообщений: 52
По умолчанию

Можете запустить в командной строке, или в том же FARе.
Ant1971on вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
две задачки. kardinal94 Помощь студентам 1 01.12.2010 11:52
две задачки на С# Bobrik Помощь студентам 0 01.06.2009 23:50
Две задачки с масивами. С++ Alex1991 Помощь студентам 3 16.03.2009 22:32
Две задачки в Делфи Lerika Помощь студентам 3 25.01.2009 17:04
помогите решить две задачки Виталька Помощь студентам 13 13.06.2008 11:56