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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.06.2014, 21:37   #1
S4estliv4ik
 
Регистрация: 10.06.2014
Сообщений: 4
Сообщение asm помогите доработать прогу (вычислить выражение 2*(6a+b)^3/c + c*(2d^2-c)/3a)

необходимо реализовать данную программу не используя СТЕК.


Код:
;2*(6a+b)^3/c + c*(2d^2-c)/3a

;******************

init_ds	macro
	mov	ax,@data
	mov	ds,ax
	mov	es,ax
	endm

	exit	macro
	mov	ax,4c00h
	int	21h
	endm

.model small

.STACK

.DATA
_a	db	-1
_b	db	1
_c	db	1
_d	db	1
_f	dw	0

str_beg db	'Begin...', 13, 10, '$'
str_ok  db	'Ok!', 13, 10, '$'
str_err db	'Error- dividing by zero!', 13, 10, '$'
str_ovr db	'Error- overflow!', 13, 10, '$'
sign	db	'+ '
decf	db	'    0', 13, 10, '$'

.CODE
.386p

START:

	;==============================================================
	; *	;==============================================================

	init_ds

	mov	ah, 09h
	mov	dx, offset str_beg
	int	21h

	;==============================================================
	; 
	;==============================================================
	cmp	byte ptr _a,0
	jne	@m01
	jmp	@m1
@m01:
	cmp	byte ptr _c,0
	jne	@m02
	jmp	@m1
@m02:
	;==============================================================
	; 
	;==============================================================

	mov	al,byte ptr _a
	cbw	
	imul	ax,ax,6 
	jo	@mo
	
	push	ax
	mov	al,byte ptr _b
	cbw	
	mov	dx,ax
	pop	ax
	add	ax,dx
	shl	ax,1
	push	ax
	mov	al,byte ptr _a
	cbw	
	imul	ax,ax,6
	jo	@mo

	push	ax
	mov	al,byte ptr _b
	cbw	
	pop	dx
	add	dx,ax
	pop	ax
	imul	dx
	jo	@mo

	push	ax
	mov	al,byte ptr _a
	cbw	
	imul	ax,ax,6
	jo	@mo

	push	ax
	mov	al,byte ptr _b
	cbw	
	pop	dx
	add	dx,ax
	pop	ax
	imul	dx
	jo	@mo

	push	ax
	mov	al,byte ptr _c
	cbw	
	mov	bx,ax
	pop	ax
	cwd	
	idiv	bx
	push	ax
	mov	al,byte ptr _d
	cbw	
	shl	ax,1
	push	ax
	mov	al,byte ptr _d
	cbw	
	mov	dx,ax
	pop	ax
	imul	dx
	jo	@mo

	push	ax
	mov	al,byte ptr _c
	cbw	
	pop	dx
	sub	dx,ax
	mov	al,byte ptr _c
	cbw	
	imul	dx
	jo	@mo

	mov	bx,3
	cwd	
	idiv	bx
	push	ax
	mov	al,byte ptr _a
	cbw	
	mov	bx,ax
	pop	ax
	cwd	
	idiv	bx
	pop	dx
	add	dx,ax
	mov	word ptr _f,dx

	;==============================================================

	mov	ah, 09h
	mov	dx, offset str_ok
	int	21h

	jmp	short @m2

	;==============================================================
	; 
	;==============================================================
@mo:
	xor	ax, ax
	mov	word ptr _f,ax

	mov	ah, 09h
	mov	dx, offset str_ovr
	int	21h

	jmp	short @m2

	;==============================================================
	; 
	;==============================================================
@m1:
	xor	ax, ax
	mov	word ptr _f,ax

	mov	ah, 09h
	mov	dx, offset str_err
	int	21h
@m2:
	;==============================================================
	; 
	;==============================================================

	mov	ax, _f            
	mov	bx, ax
	and	bx, 8000h	 
	cmp	bx, 0		 
	je	@m3          

	mov	bx, ax        
	xor	ax, ax
	sub	ax, bx	 
	mov	sign, '-'         
@m3:

	mov	cx, 5            
	
	mov	bx, 10		
	mov	di, offset decf   
	add	di, 4            
@do:	
	cwd			  	
	idiv	bx                
	add	dx, 48		 
	mov	[di], dl           
	dec	di                 
	cmp	ax, 0              
	loopne	@do	          
	
	mov	al, sign          
	cmp	al, '-'
	jne	@m4               	 
	mov	[di], byte ptr '-'       

@m4:
	mov	ah,09h              
	mov	dx, di
	int	21h

	exit

end start
S4estliv4ik вне форума Ответить с цитированием
Старый 22.06.2014, 21:53   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Я могу ошибаться, но кажется выглядеть это может так:
Код:
format MZ
;2*(6a+b)^3/c + c*(2d^2-c)/3a
push    cs
pop     ds

 mov al,[a]
 mov bl,6
 mul bl
 add al,[b]
 mov bl,3
 mul bl
 mul bl
 mul bl
 mov bl,2
 mul bl
 mov bl,[c]
 div bx
 mov [b],al

 mov al,[d]
 mov bl,d
 mul bl
 mov bl,1
 mul bl
 sub al,[c]
 mov bl,3
 div bl
 mov bl,[a]
 mul bl
 add al,[b]

; Выводим результат из ax
 ret


;section '.data' data readable writable
a db 1
b db 1
c db 1
d db 1
Только не копипасти, это как идея.
I'm learning to live...

Последний раз редактировалось Stilet; 22.06.2014 в 22:00.
Stilet вне форума Ответить с цитированием
Старый 23.06.2014, 03:52   #3
S4estliv4ik
 
Регистрация: 10.06.2014
Сообщений: 4
По умолчанию

спс, ща попробую.
S4estliv4ik вне форума Ответить с цитированием
Старый 23.06.2014, 09:57   #4
S4estliv4ik
 
Регистрация: 10.06.2014
Сообщений: 4
По умолчанию

Не, данную модель использовать нельзя (только обратил внимание), я наверно еще и не корректно сформулировал, мне нельзя использовать команды push и pop, а реализовать необходимо в model small, где операнды-байты, вычисления знаковые.
S4estliv4ik вне форума Ответить с цитированием
Старый 23.06.2014, 10:56   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
мне нельзя использовать команды push и pop, а реализовать необходимо в model small, где операнды-байты, вычисления знаковые.
А я че написал? Операнды байтовые. mul только поменяй на imul и т.д.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.06.2014, 12:45   #6
S4estliv4ik
 
Регистрация: 10.06.2014
Сообщений: 4
По умолчанию

Прошу прощения за недопонимание(меня немного смутил format MZ), вот что у меня вышло:
Код:
;2*(6a+b)^3/c + c*(2d^2-c)/3a

;******************
;¬*Єа®бл
;******************

	;Њ*Єа®б **бва®©ЄЁ ds ** ᥣ¬Ґ*в ¤***ле
init_ds	macro
	mov	ax,@data
	mov	ds,ax
	mov	es,ax
	endm

	;¬*Єа®б Є®*ж* Їа®Ја*¬¬л
exit	macro
	mov	ax,4c00h
	int	21h
	endm

.model small

.STACK

.DATA
_a	db	-1
_b	db	1
_c	db	1
_d	db	1
_f	dw	0

str_beg db	'Begin...', 13, 10, '$'
str_ok  db	'Ok!', 13, 10, '$'
str_err db	'Error- dividing by zero!', 13, 10, '$'
str_ovr db	'Error- overflow!', 13, 10, '$'
sign	db	'+ '
decf	db	'    0', 13, 10, '$'

x1	dw 	0
x2	dw	0

.CODE
.386p

START:

	;==============================================================
	; **з*«®
	;==============================================================

	init_ds

	mov	ah, 09h
	mov	dx, offset str_beg
	int	21h

	;==============================================================
	; Їа®ўҐаЄ* бЁвг*жЁЁ ¤Ґ«Ґ*Ёп ** *®«м
	;==============================================================
	cmp	byte ptr _a,0
	jne	@m01
	jmp	@m1
@m01:
	cmp	byte ptr _c,0
	jne	@m02
	jmp	@m1
@m02:
	;==============================================================
	; ўлзЁб«Ґ*Ёп
	;==============================================================

	mov	al,byte ptr _a
	cbw	
	imul	ax,ax,6 
	jo	@mo
	
	mov	x1,ax
	mov	al,byte ptr _b
	cbw	
	mov	dx,ax
	mov	ax,x1
	add	ax,dx
	shl	ax,1
	mov	x1,ax
	mov	al,byte ptr _a
	cbw	
	imul	ax,ax,6
	jo	@mo

	mov	x2,ax
	mov	al,byte ptr _b
	cbw	
	mov	dx,x2
	add	dx,ax
	mov	ax,x1
	imul	dx
	jo	@mo

	mov	x1,ax
	mov	al,byte ptr _a
	cbw	
	imul	ax,ax,6
	jo	@mo

	mov	x2,ax
	mov	al,byte ptr _b
	cbw	
	mov	dx,x2
	add	dx,ax
	mov	ax,x1
	imul	dx
	jo	@mo

	mov	x1,ax
	mov	al,byte ptr _c
	cbw	
	mov	bx,ax
	mov	ax,x1
	cwd	
	idiv	bx
	mov	x1,ax
	mov	al,byte ptr _d
	cbw	
	shl	ax,1
	mov    	x2,ax
	mov	al,byte ptr _d
	cbw	
	mov	dx,ax
	mov	ax,x2
	imul	dx
	jo	@mo

	mov	x2,ax
	mov	al,byte ptr _c
	cbw	
	mov	dx,x2
	sub	dx,ax
	mov	al,byte ptr _c
	cbw	
	imul	dx
	jo	@mo

	mov	bx,3
	cwd	
	idiv	bx
	mov	x2,ax
	mov	al,byte ptr _a
	cbw	
	mov	bx,ax
	mov	ax,x2
	cwd	
	idiv	bx
	mov	dx,x1
	add	dx,ax
	mov	word ptr _f,dx

	;==============================================================

	mov	ah, 09h
	mov	dx, offset str_ok
	int	21h

	jmp	short @m2

	;==============================================================
	; ЋиЁЎЄ*: ЇҐаҐЇ®«*Ґ*ЁҐ
	;==============================================================
@mo:
	xor	ax, ax
	mov	word ptr _f,ax

	mov	ah, 09h
	mov	dx, offset str_ovr
	int	21h

	jmp	short @m2

	;==============================================================
	; ЋиЁЎЄ*: ¤Ґ«Ґ*ЁҐ ** *®«м
	;==============================================================
@m1:
	xor	ax, ax
	mov	word ptr _f,ax

	mov	ah, 09h
	mov	dx, offset str_err
	int	21h
@m2:
	;==============================================================
	; ўлў®¤ зЁб«*
	;==============================================================

	mov	ax, _f            ; ЎҐаҐ¬ зЁб«®
	mov	bx, ax
	and	bx, 8000h	  ; Їа®ўҐа塞, ®ваЁж*⥫м*® ®*® Ё«Ё *Ґв
	cmp	bx, 0		  ; 
	je	@m3               ; Ґб«Ё *Ґв, Ё¤Ґ¬ ¤*«миҐ
	
	mov	bx, ax            ; Ґб«Ё ¤*, ўлзЁв*Ґ¬ ҐЈ® Ё§ *г«п
	xor	ax, ax
	sub	ax, bx		  ; 
	mov	sign, '-'         ; §*ЇЁблў*Ґ¬ §**Є -
@m3:

	mov	cx, 5             ; *г¦*® ᤥ«*вм ¬*ЄбЁ¬г¬ 5 жЁЄ«®ў
	
	mov	bx, 10		  ; б**з*«* ЎҐаҐ¬ ®бв*в®Є ®в ¤Ґ«Ґ*Ёп ** 10
	mov	di, offset decf   ; §*Јаг¦*Ґ¬ ў di *¤аҐб бва®ЄЁ 
	add	di, 4             ; бв**®ўЁ¬бп ў Є®*Ґж
@do:	
	cwd			  ; а*биЁа塞 ax ** dx	
	idiv	bx                ; ¤Ґ«Ё¬ ** bx - ®бв*в®Є ў dx, * в®з*ҐҐ - ў dl
	add	dx, 48		  ; Ї®«гз*Ґ¬ ®зҐаҐ¤*го жЁдаг		
	mov	[di], dl          ; §*ЇЁблў*Ґ¬ Ґс ў бва®Єг
	dec	di                ; б¤ўЁЈ*Ґ¬бп Ї® бва®ЄҐ Є **з*«г
	cmp	ax, 0             ; Ґбвм «Ё ҐйҐ, зв® ¤Ґ«Ёвм
	loopne	@do	          ; Ґб«Ё *Ґв, ўл室Ё¬
	
	mov	al, sign          ; бв®Ёв «Ё 㦥 §**Є "-"
	cmp	al, '-'
	jne	@m4               	; Ґб«Ё *Ґв, Ё¤Ґ¬ ¤*«миҐ
	mov	[di], byte ptr '-'      ; Ґб«Ё ¤*, ЇЁиҐ¬ ҐЈ® в®з*® ЇҐаҐ¤ зЁб«®¬

@m4:
	mov	ah,09h            ; ўлў®¤Ё¬ §**зҐ*ЁҐ 
	mov	dx, di
	int	21h

	exit

end start
спасибо вам за помощь
S4estliv4ik вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вычислить выражение r3lax Паскаль, Turbo Pascal, PascalABC.NET 0 17.12.2012 21:48
Доработать маленькое регулярное выражение PHP. Bengl Фриланс 3 29.11.2012 12:59
доработать прогу ronny137 Фриланс 1 21.04.2011 19:08
вычислить выражение Jereme Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 08.01.2010 16:21
Вычислить выражение ai\ekcah^p Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 6 04.12.2009 17:06