نمایش نتایج 1 تا 9 از 9

نام تاپیک: درخواست یک برنامه اسمبلی ساده

  1. #1

    درخواست یک برنامه اسمبلی ساده

    با سلام و وقت بخیر
    دوستان عزیز من تا حالا اسمبلی کار نکردم . برای همین خواهش میکنم که به این پرسش بنده در صورت امکان پاسخ بفرمائید.
    دوستان اگر بخواهیم ورودی کاربر را با رشته خاصی مثلاً کلمه Reza که خودمان مقداردهی اولیه کردیم ، مقایسه کنیم که آیا ورودی کاربر دقیقا همان کلمه Reza است اگر بود پیام صحیح در غیر انصورت پیام بده که ورودی نامعتبر است چه جوری میشه با اسمبلی نوشت ممنون میشم پاسخ بفرمائید

  2. #2
    کاربر دائمی آواتار Delphi Coder
    تاریخ عضویت
    آذر 1386
    محل زندگی
    c:\windows\system32
    پست
    579

    نقل قول: درخواست یک برنامه اسمبلی ساده

    خوب ظاهرا یک تمرین دانشگاهی هست. اما اینجا صحبت از ورودی کاربر شده باید مشخص بشه محیطی که برنامه در اون کار میکنه چیه. آیا اسمبلی تحت ویندوز مد نظر هست؟ یا تحت DOS که معمولا با emu8086 تدریس میکنند. اگر تحت ویندوز هست که باید با API ها این رشته گرفته بشه در غیر این صورت با وقفه 21h تابع احتمالا شماره 10 یا 0ah اگر اشتباه نکنم.

  3. #3

    نقل قول: درخواست یک برنامه اسمبلی ساده

    نقل قول نوشته شده توسط 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

  4. #4

    نقل قول: درخواست یک برنامه اسمبلی ساده

    ممنون از عزیزان، برنامه بله تحت Dos با
    emu8086 است. من خودم با سی شارپ کار میکنم و اصلاسراغ اسمبلی هم نرفتم تا حالا. اول از کاربر خواسته میشه که کلمه وارد کنه بعد اگر کلمه Reza بود بگه صحیح است همین خواهش کدهاش را در صورت امکان محبت کنید ممنون از بزرگواری شما

  5. #5

    نقل قول: درخواست یک برنامه اسمبلی ساده

    این برنامه
    دو رشته 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

  6. #6

    نقل قول: درخواست یک برنامه اسمبلی ساده

    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

  7. #7

    نقل قول: درخواست یک برنامه اسمبلی ساده

    بزرگواری کردید عزیز خیلی ممنونم

  8. #8

    نقل قول: درخواست یک برنامه اسمبلی ساده

    نقل قول نوشته شده توسط ada_a899a مشاهده تاپیک
    بزرگواری کردید عزیز خیلی ممنونم
    خواهش میکنم

  9. #9

    نقل قول: درخواست یک برنامه اسمبلی ساده

    برای مقایسه رشته ها در زبان اسمبلی 8086 یک دستور ساده ترکیبی بصورت repe cmpsb وجود دارد که طول رشته به بایت در رجیستر cx قرار می گیرد. منطبق بودن یا نبودن دو رشته با چک کردن عدد موجود در رجیستر cx قابل تشخیص است. نیاز به نوشتن روتین های طولانی بشکل برنامه دوست عزیزمون نیست.

تاپیک های مشابه

  1. پاسخ: 1
    آخرین پست: یک شنبه 06 فروردین 1396, 09:01 صبح
  2. پاسخ: 7
    آخرین پست: سه شنبه 28 آذر 1391, 13:48 عصر

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •