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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.05.2009, 11:56   #11
depocomp
Пользователь
 
Аватар для depocomp
 
Регистрация: 12.05.2009
Сообщений: 14
По умолчанию

Цитата:
Сообщение от airyashov Посмотреть сообщение
нафига такой макрос
SaveReg <ds,es,dx,cx>
когда можно просто писать
push ds es dx cx
аналогочно для pop
Может я плохо разбираюсь в ассемблере, но как можно использовать push и pop, если они используются в этом куске?


Цитата:
SaveReg <ds,es,dx,cx>
xor cx,cx
mov cs:TmpBuf,MaxLen+1
mov ah,0ah
push ds
pop es
push cs
pop ds
lea dx,cs:TmpBuf
int 21h
mov al,cs:TmpBuf+1 ;пересылка TmpBuf в Buf со сдвигом влево (для удаления служебного символа)
mov cl,al
xor ah,ah
inc cl ;длина введенной строки
inc al ;длина введенной строки
lea si,cs:TmpBuf+2 ;откуда - ds:si
lea di,buf ;куда - esi
rep movsb
LoadReg <cx,dx,es,ds>
Использовать SaveReg и OutReg самое оно.
Вот кстати их описание:
Цитата:
; SaveReg <RegList>########################## ###################################
; Сохранение указанных в списке RegList регистров в стеке.
; Список регистров должен быть заключен в угловые скобки,
; например - SaveReg <ax,bx,cx>

SaveReg macro RegList
irp reg,<RegList>
push reg
endm
endm

; LoadReg <RegList>########################## ###################################
; Восстановление указанных в списке RegList регистров из стека.
; Список регистров должен быть заключен в угловые скобки,
; например - LoadReg <ax,bx,cx>

LoadReg macro RegList
irp reg,<RegList>
pop reg
endm
endm
depocomp вне форума Ответить с цитированием
Старый 21.05.2009, 01:07   #12
depocomp
Пользователь
 
Аватар для depocomp
 
Регистрация: 12.05.2009
Сообщений: 14
По умолчанию

Составил вот такой код, но почему-то не работает:
Цитата:
; Прототип программы с использованием модели small
include macros.inc ; подключение библиотеки макросов
.model small ; тип модели
.stack 100h ; размер
.data ; сегмент данных
string1 db 256 dup ('$') ;введем одну переменную string1
string2 db 256 dup ('$') ;введем вторую переменную string2
.code ; программный сегмент
start: ; точка входа в программу

GetStr string1, 100

MOV SI,AX
DEC SI
MOV DI,0
MOV CX,AX

M1:
MOV BL,string1[SI]
MOV string2[DI],BL
DEC SI
INC DI
LOOP M1

NextLine
OutStr string2


mov ah,4ch ; выход из
int 21h ; программы
end start
depocomp вне форума Ответить с цитированием
Старый 21.05.2009, 01:15   #13
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

Код:
M1:
MOV BL,string1[SI]
MOV string2[DI],BL
Это не С какой-нибудь.
Хотя бы так:
Код:
GetStr string1, 100


lea si,string1
lea di,string2
add si,ax
DEC SI
MOV CX,AX

M1:
MOV BL,[SI]
MOV [DI],BL
DEC SI
INC DI
LOOP M1

NextLine
OutStr string2
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4

Последний раз редактировалось Goodwin98; 21.05.2009 в 01:25.
Goodwin98 вне форума Ответить с цитированием
Старый 21.05.2009, 11:22   #14
depocomp
Пользователь
 
Аватар для depocomp
 
Регистрация: 12.05.2009
Сообщений: 14
По умолчанию

Goodwin98

Работают оба варианта, и мой и ваш.
Просто забыл добавить следующие строки:
Цитата:
mov ax,@data
mov ds,aх ; загрузка сегментного регистра DS
Спасибо

Последний раз редактировалось depocomp; 21.05.2009 в 12:01.
depocomp вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
заданную строку записать в обратном порядке Defa4ka Помощь студентам 1 13.05.2009 11:50
печать страниц в обратном порядке Олекса Microsoft Office Word 4 30.03.2009 09:45
Ввести строку, вывести на экран символы, повторяющиеся в строке более 2 раз. bibl2008 Помощь студентам 4 01.03.2009 13:30
В обратном порядке mari.ha Общие вопросы C/C++ 7 25.12.2008 21:36