درخواست یک برنامه اسمبلی ساده
با سلام و وقت بخیر
دوستان عزیز من تا حالا اسمبلی کار نکردم . برای همین خواهش میکنم که به این پرسش بنده در صورت امکان پاسخ بفرمائید.
دوستان اگر بخواهیم ورودی کاربر را با رشته خاصی مثلاً کلمه Reza که خودمان مقداردهی اولیه کردیم ، مقایسه کنیم که آیا ورودی کاربر دقیقا همان کلمه Reza است اگر بود پیام صحیح در غیر انصورت پیام بده که ورودی نامعتبر است چه جوری میشه با اسمبلی نوشت ممنون میشم پاسخ بفرمائید
نقل قول: درخواست یک برنامه اسمبلی ساده
خوب ظاهرا یک تمرین دانشگاهی هست. اما اینجا صحبت از ورودی کاربر شده باید مشخص بشه محیطی که برنامه در اون کار میکنه چیه. آیا اسمبلی تحت ویندوز مد نظر هست؟ یا تحت DOS که معمولا با emu8086 تدریس میکنند. اگر تحت ویندوز هست که باید با API ها این رشته گرفته بشه در غیر این صورت با وقفه 21h تابع احتمالا شماره 10 یا 0ah اگر اشتباه نکنم.
نقل قول: درخواست یک برنامه اسمبلی ساده
نقل قول:
نوشته شده توسط
ada_a899a
با سلام و وقت بخیر
دوستان عزیز من تا حالا اسمبلی کار نکردم . برای همین خواهش میکنم که به این پرسش بنده در صورت امکان پاسخ بفرمائید.
دوستان اگر بخواهیم ورودی کاربر را با رشته خاصی مثلاً کلمه Reza که خودمان مقداردهی اولیه کردیم ، مقایسه کنیم که آیا ورودی کاربر دقیقا همان کلمه Reza است اگر بود پیام صحیح در غیر انصورت پیام بده که ورودی نامعتبر است چه جوری میشه با اسمبلی نوشت ممنون میشم پاسخ بفرمائید
برای شروع از این برنامه را استفاده کنید!
Assembler: Tasm
Ms-DOS/Windows xp
.Model Small
.Stack 100H
.Data
CR Equ 0DH
LF Equ 0AH
NL Equ 00H
MsgX db 32H Dup (NL)
.Code
Run:
MOV AX, @Data
MOV DS, AX
MOV AX, Offset MsgX
CALL GetStr
CALL Exit
GetChr:
PUSH BX
PUSH CX
PUSH DX
MOV AH, 01H
INT 21H
POP DX
POP CX
POP BX
RET
GetStr:
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV BX, AX
GetStrLoop:
CALL GetChr
MOV Byte Ptr [BX], AL
CMP Byte Ptr [BX], CR
JE GetStrFree
INC BX
JMP GetStrLoop
GetStrFree:
MOV Byte Ptr [BX], NL
POP DX
POP CX
POP BX
POP AX
RET
Exit:
MOV AH, 4CH
INT 21H
End Run
نقل قول: درخواست یک برنامه اسمبلی ساده
ممنون از عزیزان، برنامه بله تحت Dos با emu8086 است. من خودم با سی شارپ کار میکنم و اصلاسراغ اسمبلی هم نرفتم تا حالا. اول از کاربر خواسته میشه که کلمه وارد کنه بعد اگر کلمه Reza بود بگه صحیح است همین خواهش کدهاش را در صورت امکان محبت کنید ممنون از بزرگواری شما
نقل قول: درخواست یک برنامه اسمبلی ساده
این برنامه دو رشته st2 و st1 را از کاربر دریافت می نمایدو برسی میکند که آیا رشته st1 در رشته st2 وجود دارد یا نه حالا اینو میشه تغییر داد که به پاسخ سوال من برسیم؟
.MODEL SMALL
.DATA
msg1 DB 13, 10, "str1 :", 13, 10, "$"
msg2 DB 13, 10, "str2 :", 13, 10, "$"
str1Max DB 50
DB ?
str1 DB 50 DUP(?)
str2Max DB 50
DB ?
str2 DB 50 DUP(?)
msg3 DB 13, 10, "str1 found!", 13, 10, "$"
msg4 DB 13, 10, "str1 not found!", 13, 10, "$"
.CODE
.STARTUP
MOV AH, 9
LEA DX, msg1
INT 21h
MOV AH, 0Ah
LEA DX, str1Max
INT 21h
MOV AH, 9
LEA DX, msg2
INT 21h
MOV AH, 0Ah
LEA DX, str2Max
INT 21h
MOV BX, 0
MOV SI, 0
loop1:
MOV DL, str1[BX]
CMP DL, 13
JE found
MOV DH, str2[SI + BX]
CMP DL, DH
JNE next1
INC BX
JMP loop1
next1:
INC SI
CMP BX, 0
JNE next2
CMP DH, 13
JE notfound
next2:
MOV BX, 0
JMP loop1
found:
MOV AH, 9
LEA DX, msg3
INT 21h
JMP finish
notfound:
MOV AH, 9
LEA DX, msg4
INT 21h
finish:
MOV AH, 8
INT 21h
.EXIT
.STACK
END
نقل قول: درخواست یک برنامه اسمبلی ساده
assembler: emu8086
os: ms-dos shell in windows 7 32bit
توجه کنید که برنامه ای که نوشتم فقط با همین اسمبلر 8086 کامپایل میشه و در پوسته داس ویندوز 32 بیتی اجرا میشه!
; multi-segment executable file template.
data segment
; add your data here!
cr equ 0dh
lf equ 0ah
pmsg db " input is correct!!...$"
pl db cr , lf
pkey db "press any key to exit of program...$"
cbyte1 db 0x72 ; r
cbyte2 db 0x65 ; e
cbyte3 db 0x7a ; z
cbyte4 db 0x61 ; a
nl equ 00h
msgx db 32h dup (nl)
ends
stack segment
dw 128 dup(0)
ends
code segment
start:
mov ax, @data ; set segment registers:
mov ds, ax
mov ax, offset msgx
call Getstr
Getstr:
push ax
push bx
push cx
push dx
mov bx, ax
call Section0
ret
Getchr:
push bx
push cx
push dx
mov ah, 01h
int 21h
pop dx
pop cx
pop bx
ret
Section0:
call Getchr
mov byte ptr [bx], al
mov al,cbyte1
cmp byte ptr [bx], al
je Section1
ret
Section1:
call Getchr
mov byte ptr [bx], al
mov al,cbyte2
cmp byte ptr [bx], al
je Section2
ret
Section2:
call Getchr
mov byte ptr [bx], al
mov al,cbyte3
cmp byte ptr [bx], al
je Section3
ret
Section3:
call Getchr
mov byte ptr [bx], al
mov al,cbyte4
cmp byte ptr [bx], al
je Getstrfree
inc bx
jmp Section0
ret
Getstrfree:
lea dx, pmsg
mov ah, 9
int 21h ; output string at ds:dx
lea dx, pl
mov ah, 9
int 21h ; output string at ds:dx
mov byte ptr [bx], nl
pop dx
pop cx
pop bx
pop ax
call Exit
ret
Exit:
mov ah, 1 ; wait for any key....
int 21h
mov ax, 4c00h ; exit to operating system.
int 21h
ends
end start ; set entry point and stop the assembler.
خروجی باینری را هم تست کردمضمیمه 149650
نقل قول: درخواست یک برنامه اسمبلی ساده
بزرگواری کردید عزیز خیلی ممنونم
نقل قول: درخواست یک برنامه اسمبلی ساده
نقل قول:
نوشته شده توسط
ada_a899a
بزرگواری کردید عزیز خیلی ممنونم
خواهش میکنم
نقل قول: درخواست یک برنامه اسمبلی ساده
برای مقایسه رشته ها در زبان اسمبلی 8086 یک دستور ساده ترکیبی بصورت repe cmpsb وجود دارد که طول رشته به بایت در رجیستر cx قرار می گیرد. منطبق بودن یا نبودن دو رشته با چک کردن عدد موجود در رجیستر cx قابل تشخیص است. نیاز به نوشتن روتین های طولانی بشکل برنامه دوست عزیزمون نیست.