Форум программистов, компьютерный форум, киберфорум
Наши страницы

Assembler, MASM, TASM

Войти
Регистрация
Восстановить пароль
 
Andi3z
0 / 0 / 0
Регистрация: 26.06.2011
Сообщений: 3
#1

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

26.06.2011, 15:57. Просмотров 608. Ответов 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):

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

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

не могу запустить TSR программу через tasm - Assembler
.model tiny ; модель памяти для COM ;F1 KeyCode=59 hF=3 ;параметры фигуры wF=4 xmin=0 ;координаты пределов перемещения ...

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

посмотрите не могу довести до ума - C++ Builder БД
посмотрите не могу довести до ума....как сделать чтобы заработала?

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

5
Андрей_75
42 / 41 / 3
Регистрация: 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
3202 / 1426 / 75
Регистрация: 06.10.2010
Сообщений: 3,145
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
759 / 303 / 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 на интервале от Xнач до Хкон с шагом dX. Формула -ax-c при...

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

WCF. действительно удобная вещь? не могу довести до ума примитивный пример - C# WCF
создал в 2008 студии WCF Service Application, добавил к контракту единственный метод: string test (string str); ...

Довести до ума - Turbo Pascal
В общем, изначально надо было посчитать такую загогулину: S=\sum_{i:=1}^{n}\sum_{k:=1}^{m}{\left({b}_{ik}+{c}_{ki}...


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

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

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