Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: программирование на языке Assembler


Информационный Канал Subscribe.Ru

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Assembler

Выпуск № 218
от 23.08.2005, 16:36

Администратор:Калашников О.А.
В рассылке:Подписчиков: 251, Экспертов: 19
В номере:Вопросов: 2, Ответов: 8


Вопрос № 24998: Здраствуйте ув эксперты. У меня ну мальнькая просьба можете исправить ошибки в след коде? Код: Cseg segment assume cs:cseg,ss:cseg,ds:cseg,es:cseg org 100h begin: push 0B800h pop es mov ah,31 mov al,1 ...
Вопрос № 25001: Вопрос: 1. Если вам не сложно, то прошу дать мне не сложный исходный код COM программы на ассемблере с использованием макроска: <имя макроса> MACROS <формальные параметры> <тело макроса> ENDM 2. Можно ли...

Вопрос № 24.998
Здраствуйте ув эксперты.
У меня ну мальнькая просьба можете исправить ошибки в след коде?
Код:
Cseg segment
assume cs:cseg,ss:cseg,ds:cseg,es:cseg
org 100h
begin:
push 0B800h
pop es

mov ah,31
mov al,1
mov di,0
MOV DX,DI
stosw
l:mov ah,10h
int 16h
cmp al,0
jz l
cmp al,'w'
je w
cmp al,'a'
je a
cmp al,'s'
je s
cmp al,'d'
je d
cmp al,'q'
je q
jne l
w:
cmp dx,159
jbe l
XOR AX,AX
mov di,dx
STOSW
MOV AH,31
mov al,1
sub di,162
mov dx,di
mov es:[di],ax
jmp l
s:cmp dx,3840
jnl l
XOR AX,AX
mov di,dx
STOSW
MOV AH,31
mov al,1
add di,158
mov dx,di
mov es:[di],ax
jmp l

a:
cmp dx,0
je l
mov cx,24
xor bx,bx
asd1:
add bx,160
cmp dx,bx
je l
loop asd1

XOR AX,AX
mov di,dx
STOSW
MOV AH,31
mov al,1
sub di,4
mov dx,di
mov es:[di],ax
jmp l

d:
mov bx,dx;11111111
cmp bx,159;1111
je l;111111111
mov cx,24;11111111
day:;111111111
add bx,160;11111
cmp dx,bx;111111
je l;111111111
loop day;11111111-там где вы видете 111111 то из -за этих строк у
;меня происходят ошибки какие ошибки именно я приведу в
;приложении
XOR AX,AX
mov di,dx
STOSW
MOV AH,31
mov al,1
mov dx,di
stosw
jmp l
q:
int 20h
cseg ends
end begin

Приложение:

Отправлен: 17.08.2005, 17:34
Вопрос задал: newinfo2005 (статус: 3-ий класс)
Всего ответов: 5
Мини-форум вопроса >>> (сообщений: 17)

Отвечает: Sager
Здравствуйте, newinfo2005!
Не знаю насчет Тасма(не люблю я его да и под рукой сейчас нету), но добавив директиву .286 масм нормально скомпилил ее, не выдав никаких ошибок.
Ответ отправил: Sager (статус: 4-ый класс)
Отправлен: 17.08.2005, 17:53
Оценка за ответ: 3
Комментарий оценки:
Те же яйца пробовал но у меня тогда вылетает прога

Отвечает: Евгений Иванов
Здравствуйте, newinfo2005!
Добавь /m9 ключ.
Также поможет директива P586 (.586)
---------
Что имеем - не храним, потерявши - плачем
Ответ отправил: Евгений Иванов (статус: Профессор)
Отправлен: 17.08.2005, 17:56
Оценка за ответ: 3
Комментарий оценки:
За новые познание спасибо,но у меня компилиться так без ошибок но когда я захотел поробовать рогу то она у меня вылетает что я только не пробовал

Отвечает: Ayl
Здравствуйте, newinfo2005!

Ошибка происходит из-за того, что точка перехода находится слишком далеко от команды условного перехода. Условный переход может быть выполнен только на расстояние -128 - +127 байт от адреса следующей команды.

Исправить эту ошибку можно несколькими способами.

1. Передавать управление не на метку l, а на команду jmp l в конце цикла.
2. Изменить условный переход на противоположный:
Было:
je l <-- так ошибка

Делаем:
jne @@cont
jmp l
@cont:

Ошибки в этом случае не будет, но код будет ужасным

3. Изменить программу так, чтобы все переходы были в пределах 127 байт.
---------
Трудное - то, что можно сделать немедленно. Невозможное - то, для выполнения чего требуется немного больше времени
Ответ отправил: Ayl (статус: Профессор)
Отправлен: 17.08.2005, 18:19
Оценка за ответ: 5
Комментарий оценки:
Вот это дельный ответ я уже даже надумал как это сделать!

Отвечает: Котиев Зураб
Здравствуйте, newinfo2005!
je и прочие джампы с условиями могут прыгать на -128 или +127 байт у тя размер кода превышает эти пределы
Ответ отправил: Котиев Зураб (статус: 6-ой класс)
Отправлен: 17.08.2005, 18:59
Оценка за ответ: 5
Комментарий оценки:
Спасибо но мне дали подробный ответ.

Отвечает: Вiктор
Здравствуйте, newinfo2005!
команда je не может совершить переход дальше 128 байт. (и ТАСМ вам на это намекал). Это короткий переход.
чтобы всё работало сделайте длинный переход (командой jmp), который перепрыгивается коротким, например так:
было:
je lab1
...
lab1:

а будет:

jne lab2
jmp lab1
lab 2:
...
lab1:
---------
Хочу себе более быстрый компьютер ! ! !
Ответ отправил: Вiктор (статус: 4-ый класс)
Отправлен: 18.08.2005, 00:14


Вопрос № 25.001
Вопрос:
1. Если вам не сложно, то прошу дать мне не сложный исходный код
COM программы на ассемблере с использованием макроска:
<имя макроса> MACROS <формальные параметры>
<тело макроса>
ENDM

2. Можно ли использовать макросы в TASM(BORLAND), или только в макро ассемблере?

3. Пожалуйста скажите чем отличается флаг переноса от флага переполнения?, а то я вроде бы знал, но новая книга меня запутала.
Over Flow и Cary Flag?
Отправлен: 17.08.2005, 18:31
Вопрос задал: Терсков Алексей Николаевич (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Евгений Иванов
Здравствуйте, Терсков Алексей Николаевич!
3. флаг переноса - C.
флаг переполнения - O.

2. можно и НУЖНО


---------
Что имеем - не храним, потерявши - плачем
Ответ отправил: Евгений Иванов (статус: Профессор)
Отправлен: 17.08.2005, 18:39
Оценка за ответ: 5
Комментарий оценки:
А на первый вопрос?
Лень? ;-)

Отвечает: Ayl
Здравствуйте, Терсков Алексей Николаевич!

1.
PUSHREGS MACRO reg_list
IRP r,
push r
ENDM
ENDM

Здесь PUSHREGS - имя макроса, reg_list - список регистров для сохранения в стеке
IRP - макрос-команда для организзации цикла по всем значениям из reg_list

Использование:
PUSHREGS
PUSHREGS

2. В TASM тоже можно использовать

3. Ну, вообще-то это совсем разные флаги. Флаг переноса выставляется в том случае, если результат сложения или вычитания выходит за рамки разрядности регистра. А флаг переполнения устанавливается при выполнении операции умножения в случае, если результат превышает разрядность приемника.
---------
Трудное - то, что можно сделать немедленно. Невозможное - то, для выполнения чего требуется немного больше времени
Ответ отправил: Ayl (статус: Профессор)
Отправлен: 17.08.2005, 18:59
Оценка за ответ: 5
Комментарий оценки:
Вроде понятно

Отвечает: Котиев Зураб
Здравствуйте, Терсков Алексей Николаевич!
на первые два те ответ дали насчет 3-го загляни сюда
http://www.wasm.ru/article.php?article=carry_overflow
Ответ отправил: Котиев Зураб (статус: 6-ой класс)
Отправлен: 17.08.2005, 19:20
Оценка за ответ: 5
Комментарий оценки:
Полажу


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2005, RusFAQ.ru, Россия, Москва. Все права защищены.
Идея, дизайн, программирование, авторское право: Калашников О.А.

Яндекс


Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.faq
Отписаться
Вспомнить пароль

В избранное