View Full Version : سوال: چاپ برعکس عبارت در اسمبلی
محمد255
دوشنبه 22 مهر 1392, 13:32 عصر
سلام. با چه کدی میشه عبارت رو برعکس کرد؟ مثلا HELLO بشه OLLEH.
و اون کد خاص رو کجای برنامه باید قرار داد؟ متشکرم.
mghanar2
سه شنبه 23 مهر 1392, 00:02 صبح
سلام!
کل برنامه اینه که البته با برنامه emu8086 نوشتم و اجرا هم کردم:
sseg segment 'stack'
db 100 dup ('?')
sseg ends
dseg segment 'data'
char db ?
nbuf label byte
p1 db 20
len db ?
buf db 20 dup (?),'$'
dseg ends
cseg segment 'code'
assume ss:sseg , ds:dseg , cs:cseg
start:
push ds
mov ax,0
push ax
mov ax,dseg
mov ds,ax
mov ah,0ah
lea dx,nbuf
int 21h
mov ah,02h
mov bh,0
mov dh,10
mov dl,30
int 10h
lea bx,buf
mov ch,0
mov cl,len
sub cl,1
add bx,cx
mov cl,0
l1:mov dl,[bx]
mov ah,02h
int 21h
inc cl
dec bx
cmp cl,len
jnz l1
mov ah,02h
mov bh,0
mov dh,12
mov dl,30
int 10h
mov ax,4ch
int 21h
cseg ends
end start
محمد255
سه شنبه 23 مهر 1392, 13:34 عصر
خیلی از پاسختون ممنونم. اگر در دل یک برنامه دیگه بخوایم عبارتی رو برعکس کنیم هم از همین کدها باید استفاده کنیم؟ برنامه ای هست به این شکل:
title a06move (exe) repetitive move operations
.model small
.stack 64
.data
HEADING1 DB 'HelloGuys'
HEADING2 DB 9 DUP ('*'). '$'
.code
A10MAIN PROC FAR
MOV AX,@data
MOV DS,AX
MOV ES,AX
MOV CX,09
LEA SI,HEADING1
LEA DI,HEADING2
A20:
MOV AL,[SI]
MOV [DI],AL
INC SI
INC DI
DEC CX
JNZ A20
MOV AH,09H
LEA DX,heading2
INT 21h
MOV AX,4C00H
INT 21H
A10MAIN ENDP
END A10MAIN
حالا داخل این اگر بخوام HelloGuys بشه syuGolleH از همین کدی که لطف کردین گذاشتین باید استفاده کنیم؟
محمد255
پنج شنبه 25 مهر 1392, 06:40 صبح
ممنون میشم کمکم کنید.
Delphi Coder
یک شنبه 28 مهر 1392, 13:56 عصر
برنامه ای هست به این شکل:
title a06move (exe) repetitive move operations
.model small
.stack 64
.data
HEADING1 DB 'HelloGuys'
HEADING2 DB 9 DUP ('*'). '$'
.code
A10MAIN PROC FAR
MOV AX,@data
MOV DS,AX
MOV ES,AX
MOV CX,09
LEA SI,HEADING1
LEA DI,HEADING2
A20:
MOV AL,[SI]
MOV [DI],AL
INC SI
INC DI
DEC CX
JNZ A20
MOV AH,09H
LEA DX,heading2
INT 21h
MOV AX,4C00H
INT 21H
A10MAIN ENDP
END A10MAIN
حالا داخل این اگر بخوام HelloGuys بشه syuGolleH از همین کدی که لطف کردین گذاشتین باید استفاده کنیم؟
توی تعریف HEADING2 به جای .(نقطه) از , (ویرگول) باید استفاده کنید. به این شکل:
HEADING2 DB 9 DUP ('*'), '$'
شما در حلقه ای که دارین عین همون HEADING1 رو دارید در HEADING2 کپی میکنید و نمایش میدین یا باید موقع خوندن برعکس بخونید و یا موقع نوشتن برعکس بنویسید تا رشته برعکس دربیاد. درسته؟
حالا کافیه قبل از شروع حلقه یه 8 واحد به SI اضافه کنید و در داخل حلقه هر بار به جای INC ازش DEC کنید. یعنی برنامه درست به این شکل میتونه باشه.
title a06move (exe) repetitive move operations
.model small
.stack 64
.data
HEADING1 DB 'HelloGuys'
HEADING2 DB 9 DUP ('*'), '$'
.code
A10MAIN PROC FAR
MOV AX,@data
MOV DS,AX
MOV ES,AX
MOV CX,09
LEA SI,HEADING1
LEA DI,HEADING2
ADD SI,8
A20:
MOV AL,[SI]
MOV [DI],AL
DEC SI
INC DI
DEC CX
JNZ A20
MOV AH,09H
LEA DX,heading2
INT 21h
MOV AX,4C00H
INT 21H
A10MAIN ENDP
END A10MAIN
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.