Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
 
Andi3z
0 / 0 / 0
Регистрация: 26.06.2011
Сообщений: 3
#1

Tasm, не могу довести до ума - Assembler

26.06.2011, 15:57. Просмотров 633. Ответов 5
Метки нет (Все метки)

Добрый день, уважаемые. Хотел бы попросить помочь мне дописать программу. С ассемблером пока не очень, привык к языкам типа С и Pascal. Проблема в том что вроде все сделано логически верно, но не были использованы регистры(все действия проводил с переменными). Ну и конечный блок, где нужно найти произведение не доведен до ума.

Код
;массив из 10 эл-тов

.model small
.stack 100h
.data
   mas db 15,1,3,0,2,4,0,2,4,1
   pro dw 0,"$" ;произведение
   max db 0,"$"
   frs db 0
   sec db 0
   mes db "Error",13,10"$"
.code

start:
	mov ax,@data
	mov ds,ax

	xor cx,cx
	xor ax,ax
	mov si,0
;-----------------------поиск максимального эл-та--------
pmax:	cmp mas[si],max
	js maxel
;-----------------------поиск нулей, контроль индекса----
a:	cmp mas[si],0
	jz nul
	cmp si,9
	inc si
	jnz pmax
	jz vmax
;------------------------запись максимального эл-та------
maxel:  mov max,mas[si]
	jmp a
;-------------------------установка нулей----------------
nul:    cmp frs,sec
	jz  1n
	jnz 2n
1n:	mov frs,si
2n:	mov sec,si
	inc si
	jmp pmax
;------------------------вывод макс знач-----------------	
vmax:	mov dx,offset max
	mov ah,09h
	int 21h
;------------------------проверка нулей------------------
	cmp frs,sec
	jz err
	inc frs
	cmp frs,sec
	dec frs
	jz err
	jnz end

err: 	mov dx,offset mes
	mov ah,09h
	int21
	end start

|end:	mov si,frs
|	inc si
|	mov al,mas[si]
|	mov cl,
|	mul cl
|
|end start
Буду рад любым советам и любой помощи.

Добавлено через 2 часа 18 минут
блиин самое главное забыл! Задание: найти произведение чисел, находящихся между крайними нулями, а также найти самое большое число.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.06.2011, 15:57
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Tasm, не могу довести до ума (Assembler):

необходимо исправить ошибку и довести до ума!
R DB ? ; 0<R<150 Записать в регистр DX количество целочисленных точек на...

Не могу понять как делать. TASM.
Ребята нужна ваша помощь. Сам сделать не могу т.к. вообще не понимаю ассемблер....

Не могу запустить TASM (незнакомый издатель)
Скачал TASM32.EXE. Запускаю. Говорит: издатель незнакомый-запустить? ОК! На...

Не могу вывести значение в консоль (tasm)
Привет, коллеги. У меня есть код на tasm: .8086 .model small .stack 100h ...

Не могу довести до ума
Всем привет! У меня такой вопрос пишу простенькую игру для брата о таблице...

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

5
Андрей_75
42 / 41 / 5
Регистрация: 22.06.2011
Сообщений: 71
27.06.2011, 09:10 #2
Лучше всего тебе почитать книги по ассемблеру для начинающих типа Юрова или Зубкова. Например, в следующем фрагменте твоего кода возникает ошибка потому что микропроцессор не поддерживает команды типа память-память (исключение цепочечные команды):
pmax:
cmp mas[si],max; здесь ошибка
js maxel
Поэтом правильней переписать этот фрагмент можно было бы, например, следующим образом:
pmax:
mov al,mas[si]; переслали содержимое ячейки памяти в РОН
cmp al,max; сравнили содержимое РОН с содержимым ячейки памяти
jg maxel; и лучше пользоваться мнемониками команд условных переходов, которые отражают результат сравнения двух операндов, а не проверяют непосредственно состояние флагов (хотя, конечно, это дело вкуса)

Добавлено через 7 минут
Да и имя идентификатора не может начинаться с символа цифры, т.е. метки типа 1n и 2n в твоем коде в соответствии с правилами языка также названа не верно
0
murderer
3314 / 1461 / 133
Регистрация: 06.10.2010
Сообщений: 3,215
27.06.2011, 17:17 #3
Assembler
1
2
3
mov dx,offset max
mov ah,09h
int 21h
Функция 9 прерывания 21h выводит на экран строку, заканчивающуюся символом '$'. Перед выводом на экран число нужно преобразовать в такую строку.
0
Andi3z
0 / 0 / 0
Регистрация: 26.06.2011
Сообщений: 3
30.06.2011, 14:22  [ТС] #4
Вообщем есть следующий код:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.model small
.stack 100h
.data
   mas dw 15,1,3,0,2,4,0,2,4,1
   pr dw 0,"$" ;произведение
   max db 0,"$"
.code
 
start:
;Доползаем до первого нуля
 mov di,mas
 xor ax,ax
aga:
 scasb
 jne aga
 
 ;Доползаем до следующего нуля
 mov ax,1
ugu:
 mul [pr] ;произведение чисел
 mov dl,[edi]  ;Находка максимального
 cmp dl,[max]
 jle nono
 mov [max],dl
nono:
 xor ax,ax
 scasb
 mov al,[di]
 jne ugu
end start
Задание все тоже: найти произведение между двумя крайними нулевыми эл-тами массива и максимальный эл-т.

Но вот чтото не так идет =\
Кому не лень, пожалуйста расскажите чуть подробней про программу, и как следует добавить вывод нужных значений на экран
0
zzzyyyxxx
763 / 307 / 11
Регистрация: 27.05.2011
Сообщений: 704
30.06.2011, 15:53 #5
[Andi3z], советом [Андрей_75] ты повидимому не воспользовался (в смысле: для начала почитать).
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
;здесь - произведение между двумя крайними нулевыми эл-тами массива
data segment
   mas  dw 15,1,3,0,2,4,0,2,4,1
   l_m  dw $ -mas
   pr   dw 1,"$"
data ends 
code segment
assume cs:code,ds:data
start:
    mov ax,data
    mov ds,ax
    mov es,ax   
    cld
    lea di,mas
    xor ax,ax
    mov cx,l_m
    repne scasw 
beg:
    mov ax,[di]
    cmp ax,0
    je zero
        mul pr
        mov pr,ax
        inc di
        inc di
        jmp beg
zero:   
    mov ah,4ch
    int 21h
code ends
end start
0
Andi3z
0 / 0 / 0
Регистрация: 26.06.2011
Сообщений: 3
30.06.2011, 18:49  [ТС] #6
Просто тяга к программированию уже не та...если раньше было желание изучить всего и много(я про языки программирования), то сейчас я для себя уяснил, что собираюсь заниматься другим видом деятельности. Собираюсь переводиться внутри факультета на немного другую специальность. В связи с этим я и прошу добить, как мне кажется, не тяжелые работки.
0
30.06.2011, 18:49
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.06.2011, 18:49
Привет! Вот еще темы с решениями:

Не могу довести до ума, не хватает функции
/* c помощью текстового редактора блокнот создать файл, содержащий текст,...

Не могу довести до ума..а хотя все эллиментарно...(
Вычислить и вывести на экран в виде таблицы значения функции F на интервале от...

не могу довести до ума решение системы нелинейных ур-ий методом Ньтона
помогите довести до ума))

WCF. действительно удобная вещь? не могу довести до ума примитивный пример
создал в 2008 студии WCF Service Application, добавил к контракту единственный...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru