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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.02.2011, 22:47   #1
Nura
 
Регистрация: 08.02.2010
Сообщений: 7
Печаль Замена умножения сложением со сдвигом - ошибка при компиляции...

Есть код. Смысл примера замена умножения сложением со сдвигом для того что бы совсем всё было хорошо усложняется применением макроопределений
При компилировании орёт на последнюю строку
**Fatal** add_mul.asm(153) Unexpected end of file encountered
Код:
;----------------------------------------------------------
;add_mul
;----------------------------------------------------------
Model tiny
.stack 256h

.data
Number dw 0
Product dw 0

Message1 db "Множитель: $"
Message2 db "Произведение: $"

Error db "Ошибка, неверное число! $"

crlf db 0DH,0AH,'$'

buff db 6,7 Dup(?)

.code

add_mul_input macro Message1,crlf,buff
local	er,ii1,ii2,ii3

mov dx, offset Message1
mov ah,9
int 21h	                                           ; выводим приглашение на ввод множителей, считывем их

;mov ah,0Ah
;int 21h
;mov dx,offset crlf
;mov ah,9
;int 21h

mov ah,0Ah
xor di,di
mov dx,offset buff
int 21h
mov dl,0AH
mov ah,02
int 21h

mov si,offset buff+2
cmp bytr ptr [si],"-"
jnz ii 1
mov di,1
inc si

ii1:
xor ax,ax
mov bx,10
ii2:
mov cl,[si]
cmp cl,0DH
jz endin

cmp cl,'0'
jl er

cmp cl,'9'
ja er

sub cl,'0'
mul bx
add ax,cx
inc si
jmp ii2


er:
mov dx,offset error
mov ah,09
int 21h
int 20h

endin
cmp di,1
jnz ii3
neg ax

ii3:
ret
endm add_mul_input

;-------------------------------

add_mul_output macro Message2,crlf,buff
local @oi1,@oi2,@oi3

;mov dx,offset Message2
;mov ah,9
;int 21h

push cx
push dx
push bx
push ax
test ax,ax
jns short @oi1
mov ah,02h
mov dl,'-'
int 21h
pop ax
push ax
neg ax

@oi1:
xor cx,cx
mov bx,10

@oi2:
xor dx,dx
div dx
push dx
inc cx
test ax,ax
jnz short @oi2
mov ah,02h

@oi3:
pop dx
add dl,30h
int 21h
loop @oio3
pop ax
pop bx
pop dx
pop cx
ret
endm add_mul_output
;-----------------------------------

strat:
mov ax,@data
mov ds,ax

add_mul_input macro
mov Number,ax
add_mul_output macro
mov cx,ax
xor ax,ax;

ProductLoop:
add ax,Number
dec cx
jnz ProductLoop
;loop ProductLoop

call add_mul_output
mov ah,04Ch
 int 21h
end start


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

Последний раз редактировалось Serge_Bliznykov; 16.02.2011 в 07:23.
Nura вне форума Ответить с цитированием
Старый 15.02.2011, 23:25   #2
Ant1971on
Пользователь
 
Регистрация: 20.07.2010
Сообщений: 52
По умолчанию

Вместо start написано strat, прога не видит начала.
Ant1971on вне форума Ответить с цитированием
Старый 16.02.2011, 03:29   #3
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

Nura
.model tiny используется при создании COM-файлов для этой модели памяти только один сегмент в который входят и код и стек и данные. COM- файл начинается с org 100h и заканчивается int 20h или retn. Для EXE-файлов нужно использовать .model small, или .model large, или .model huge, или .model flat и т.п. зависти от задачи и количества используемых сегментов

Последний раз редактировалось Mikl___; 16.02.2011 в 03:32.
Mikl___ вне форума Ответить с цитированием
Старый 16.02.2011, 08:57   #4
Nura
 
Регистрация: 08.02.2010
Сообщений: 7
По умолчанию

увы исправленная опечатка start, не помогла
Nura вне форума Ответить с цитированием
Старый 16.02.2011, 09:05   #5
Nura
 
Регистрация: 08.02.2010
Сообщений: 7
По умолчанию

Увы, увы изменённая модель памяти то же ни при чем
Код:
Model large


.data
Number dw 0
Product dw 0

Message1 db "Множитель: $"
Message2 db "Произведение: $"

Error db "Ошибка, неверное число! $"

crlf db 0DH,0AH,'$'

buff db 6,7 Dup(?)

.code

add_mul_input macro Message1,crlf,buff
mov dx, offset Message1
mov ah,9
int 21h	                                           ; выводим приглашение на ввод множителей, считывем их

mov ah,0Ah
xor di,di
mov dx,offset buff
int 21h
mov dl,0AH
mov ah,02
int 21h

mov si,offset buff+2
cmp bytr ptr [si],"-"
jnz ii 1
mov di,1
inc si

ii1:
xor ax,ax
mov bx,10
ii2:
mov cl,[si]
cmp cl,0DH
jz endin

cmp cl,'0'
jl er

cmp cl,'9'
ja er

sub cl,'0'
mul bx
add ax,cx
inc si
jmp ii2


er:
mov dx,offset error
mov ah,09
int 21h
int 20h

endin
cmp di,1
jnz ii3
neg ax

ii3:
ret
endm add_mul_input

;-------------------------------

add_mul_output macro Message2,crlf,buff

push cx
push dx
push bx
push ax
test ax,ax
jns short @oi1
mov ah,02h
mov dl,'-'
int 21h
pop ax
push ax
neg ax

@oi1:
xor cx,cx
mov bx,10

@oi2:
xor dx,dx
div dx
push dx
inc cx
test ax,ax
jnz short @oi2
mov ah,02h

@oi3:
pop dx
add dl,30h
int 21h
loop @oio3
pop ax
pop bx
pop dx
pop cx
ret
endm add_mul_output

start:
mov ax,@data
mov ds,ax

add_mul_input macro
mov Number,ax
add_mul_output macro
mov cx,ax
xor ax,ax

ProductLoop:
add ax,Number
dec cx
jnz ProductLoop
;loop ProductLoop
add_mul_output macro
mov ah,4Ch
int 21h
end start
Все равно даёт **Fatal** add_mul.asm(135) Unexpected end of file encountered
Nura вне форума Ответить с цитированием
Старый 16.02.2011, 09:18   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

после енда старта должен быть еще енд
p51x вне форума Ответить с цитированием
Старый 16.02.2011, 10:48   #7
Ant1971on
Пользователь
 
Регистрация: 20.07.2010
Сообщений: 52
По умолчанию

При вызове макросов не надо ставить в конце macro, иначе программа сочтет такую строку началом описания нового макроса и будет безуспешно искать endm. И параметры при вызове почему-то отсутствуют, хотя в описании макросов они есть.
Ant1971on вне форума Ответить с цитированием
Старый 16.02.2011, 10:50   #8
Nura
 
Регистрация: 08.02.2010
Сообщений: 7
По умолчанию end after end start not revised my source как говоритсся ни полегчало

Код:
;----------------------------------------------------------
;add_mul
;----------------------------------------------------------
Model small
.stack 256h ;можно 100h=256байтам

.data
Digital dw 0
Result dw 0

Mes1 db "input digital: $"
Mes3 db "multplication: $"
Error db "Error,digital! $"
crlf db 0Dh,0Ah,'$'
buff db 6,7 Dup(?)

.code
Input macro mes1,crlf,buff
mov dx,offset mes1
mov ah,9
int 21h	         

;mov ah,0Ah
;int 21h
;mov dx,offset crlf
;mov ah,9
;int 21h

mov ah,0ah
xor di,di
mov dx,offset buff
int 21h
mov dl,0ah
mov ah,02
int 21h

mov si,offset buff+2
cmp byte ptr [si],"-"
jnz ii1
mov di,1
inc si

ii1:
xor ax,ax
mov bx,10

ii2:
mov cl,[si]
cmp cl,0dh
jz endin

cmp cl,'0'
jl er

cmp cl,'9'
ja er

sub cl,'0'
mul bx
add ax,cx
inc si
jmp ii2

er:
mov dx,offset error
mov ah,09
int 21h
int 20h

endin:
cmp di,1
jnz ii3
neg ax

ii3:
ret
endm Input

;-------------------------------

Output macro Message2,crlf,buff

;mov dx,offset mes3
;mov ah,9
;int 21h


push cx
push dx
push bx
push ax
test ax,ax

jns short @oi1
mov ah,02h
mov dl,'-'
int 21h
pop ax
push ax
neg ax

@oi1: xor cx,cx
mov bx,10

@oi2: xor dx,dx
div dx
push dx
inc cx
test ax,ax

jnz short @oi2

mov ah,02h

@oi3: pop dx
add dl,30h
int 21h

loop @oi3
pop ax
pop bx
pop dx
pop cx
ret
endm Output

start:
mov ax,@data
mov ds,ax

Input macro
mov Digital,ax
Output macro
mov cx,ax
xor ax,ax

ResultLoop:
add ax,Digital
dec cx
jnz ResultLoop
;loop ResultLoop

Output macro

mov ah,04Ch
int 21h
end start
end
**Fatal** add_mul5.asm(300) Unexpected end of file encountered
Nura вне форума Ответить с цитированием
Старый 16.02.2011, 11:12   #9
Nura
 
Регистрация: 08.02.2010
Сообщений: 7
По умолчанию ругаться на последнюю строчку перестал, но появилась ошибка по offset'у

Цитата:
Сообщение от Ant1971on Посмотреть сообщение
При вызове макросов не надо ставить в конце macro, иначе программа сочтет такую строку началом описания нового макроса и будет безуспешно искать endm. И параметры при вызове почему-то отсутствуют, хотя в описании макросов они есть.
Код:
;----------------------------------------------------------
;add_mul
;----------------------------------------------------------
Model small
.stack 256h 

.data
Digital dw 0
Result dw 0

mes1 db "input digital: $"
mes3 db "multplication: $"
Error db "Error,digital! $"
crlf db 0Dh,0Ah,'$'
buff db 6,7 Dup(?)

.code

Input macro mes1,crlf,buff
mov dx,offset mes1
mov ah,9
int 21h	         

mov ah,0ah
xor di,di
mov dx,offset buff
int 21h
mov dl,0ah
mov ah,02
int 21h

mov si,offset buff+2
cmp byte ptr [si],"-"
jnz ii1
mov di,1
inc si

ii1:
xor ax,ax
mov bx,10

ii2:
mov cl,[si]
cmp cl,0dh
jz endin

cmp cl,'0'
jl er

cmp cl,'9'
ja er

sub cl,'0'
mul bx
add ax,cx
inc si
jmp ii2

er:
mov dx,offset error
mov ah,09
int 21h
int 20h

endin:
cmp di,1
jnz ii3
neg ax

ii3:
ret
endm Input

;-------------------------------

Output macro mes2,crlf,buff
local @oi1,@oi2,@oi3

push cx
push dx
push bx
push ax
test ax,ax

jns short @oi1
mov ah,02h
mov dl,'-'
int 21h
pop ax
push ax
neg ax

@oi1: xor cx,cx
mov bx,10

@oi2: xor dx,dx
div dx
push dx
inc cx
test ax,ax

jnz short @oi2

mov ah,02h

@oi3: pop dx
add dl,30h
int 21h

loop @oi3
pop ax
pop bx
pop dx
pop cx
ret
endm Output

start:
mov ax,@data
mov ds,ax

Input
mov Digital,ax
Output
mov cx,ax
xor ax,ax

ResultLoop:
add ax,Digital
dec cx
jnz ResultLoop

Output
mov ah,04Ch
int 21h
end start
**Error** add_mul5.asm(122) INPUT(1) Undefined symbol: OFFSET
**Error** add_mul5.asm(122) INPUT(7) Undefined symbol: OFFSET
Nura вне форума Ответить с цитированием
Старый 17.02.2011, 06:18   #10
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

Nura
перед model должна стоять точка .Model small в макросе input есть метки, которые не помечены как локальные. Для начала напиши программу без макросов, добейся ее работоспособности, а потом уже используй макросы
Mikl___ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка при компиляции vovchok777 Общие вопросы C/C++ 1 26.12.2010 16:07
Ошибка при компиляции pasha1993 Помощь студентам 1 21.09.2010 19:48
Ошибка при компиляции DKENT Общие вопросы Delphi 4 10.09.2010 15:31
Ошибка при компиляции haste39 Общие вопросы C/C++ 4 13.11.2009 00:24
Ошибка при компиляции MasterofCDM Общие вопросы Delphi 2 11.11.2008 09:35