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

نام تاپیک: جمع دو عدد كه از ورودي گرفته مي شود

  1. #1
    کاربر دائمی آواتار ali682344
    تاریخ عضویت
    بهمن 1384
    محل زندگی
    تهرلن
    سن
    35
    پست
    296

    جمع دو عدد كه از ورودي گرفته مي شود

    سلام

    به خدا دارم كلافه ميشم هر كاري مي كنم نمي تونم دو عدد را كه از وردي گرفتم با هم جمع كنم و چاپ كنم

    نمونه كدي كه استفاده مي كنم به اين صورته :
    ; multi-segment executable file template.
    ;== NUMBER TO DECIMAL ================================================== ====;
    ; This Macro Chenge HEX Or Binary To Decimal .........................
    ; NUMBER Is (WORD) .................................................. ..
    ; RETURN : This Macro Return In bp Address Of Decimal Number That It
    ; Has In His End '$'
    DECIMAL MACRO NUMBER
    LOCAL BUFFER,COUNTER, LOOP_, E1, E2, E0, RESUM, WHILE ,WHILE_,E2_, E3, E4,LOOP__, JMP_1, EXIT_
    JMP JMP_1
    BUFFER DB 15 DUP('$')
    COUNTER DB 0
    JMP_1:
    MOV CX, 11
    MOV BUFFER[11], '$'
    MOV BX, 10
    LOOP__:;----------------------------------;
    MOV BYTE PTR BUFFER[BX], 0 ; clear the buffer
    DEC BX ;
    LOOP LOOP__;------------------------;
    CMP NUMBER, 0
    JL E0
    CMP NUMBER, 9
    JG E0
    MOV DX, NUMBER
    MOV BYTE PTR BUFFER[10], DL
    ADD BYTE PTR BUFFER[10], 30H
    MOV BP, OFFSET BUFFER[10]
    JMP EXIT_
    E0:
    MOV CX, NUMBER
    MOV COUNTER, 0
    LOOP_:
    ADD COUNTER, 1
    CMP COUNTER, 9
    JNE E1
    MOV BX, 10
    MOV DL, COUNTER
    ADD BYTE PTR BUFFER[BX], DL
    WHILE:
    CMP BYTE PTR BUFFER[BX], 9
    JLE E2
    SUB BYTE PTR BUFFER[BX], 10
    DEC BX
    ADD BYTE PTR BUFFER[BX], 1
    JMP WHILE
    E2:
    MOV COUNTER, 0
    E1:
    LOOP LOOP_
    RESUM:
    MOV BX, 10
    MOV DL, COUNTER
    ADD BYTE PTR BUFFER[BX], DL
    WHILE_:
    CMP BYTE PTR BUFFER[BX], 9
    JLE E2_
    SUB BYTE PTR BUFFER[BX], 10
    DEC BX
    ADD BYTE PTR BUFFER[BX], 1
    JMP WHILE_
    E2_:
    MOV BX, -1
    E3:
    INC BX
    CMP BYTE PTR BUFFER[BX], 0
    JE E3
    LEA BP, BUFFER[BX]
    E4:
    MOV DL, BYTE PTR BUFFER[BX]
    ADD BYTE PTR BUFFER[BX], 30H
    INC BX
    CMP BX, 11
    JL E4
    EXIT_:
    ENDM

    data segment

    ends

    stack segment
    dw 128 dup(0)
    ends

    code segment
    start:
    ; set segment registers:
    mov ax, data
    mov ds, ax
    mov es, ax
    ;;;;;;;;;;;;;;;;;;adad aval
    mov ah,01h
    int 21h
    mov cx,ax

    ;;;;;;;;;;;;;;;;;;;;adad dovom
    mov ah,01h
    int 21h



    add ax,cx ;;;;;;jam
    DECIMAL ax
    ;;;;;;;;;;;;;;print
    mov ah,02
    mov dx,ax
    int 21h

    mov ax, 4c00h ; exit to operating system.
    int 21h
    ends

    end start ; set entry point and stop the assembler.
    كجاي اين كد مورد داره من خيلي مبتديم
    ممنون

  2. #2
    کاربر دائمی
    تاریخ عضویت
    فروردین 1388
    محل زندگی
    ایران سرای من است
    پست
    2,655

    نقل قول: جمع دو عدد كه از ورودي گرفته مي شود

    برای اینکه عملیات جمع را امتحان کنید دستی اعداد را باهم جمع بزنید برای دریافت از ورودی باید کد بنویسید.

    ; multi-segment executable file template
    ; This Macro Chenge HEX Or Binary To Decimal .........................
    ; NUMBER Is (WORD) .................................................. ..
    ; BUFFER is address of buffer
    ; digit is len of buffer or digit numbers
    ; RETURN : This Macro Return In bp Decimal Number That It
    ; Has In His End 0
    DECIMAL MACRO NUMBER, BUFFER, DIGIT
    LOCAL E0, E1, LOOP__, EXIT_
    MOV BX, DIGIT
    MOV BYTE PTR BUFFER[BX], '$' ;0
    MOV CX, BX
    LOOP__:;----------------------------------;
    DEC BX ;
    MOV BYTE PTR BUFFER[BX], 32 ; clear the buffer
    LOOP LOOP__;------------------------;
    MOV BX, DIGIT
    MOV AX, NUMBER
    E0:
    MOV DX, 0
    MOV CX, 10
    DIV CX
    DEC BX
    MOV BYTE PTR BUFFER[BX], DL ; BAGIMANDEH IN DX
    ADD BYTE PTR BUFFER[BX], 30H
    CMP BX, 0
    JE EXIT_
    CMP AX, 10
    JNL E0
    E1:
    DEC BX
    MOV BYTE PTR BUFFER[BX], AL
    ADD BYTE PTR BUFFER[BX], 30H
    EXIT_:
    ENDM
    ;---------------------------------------------
    data segment
    res dw ?
    buf db 32 dup(?)
    ends
    stack segment
    dw 128 dup(0)
    ends
    code segment
    start:
    assume cs:code, ds:data, ss:stack
    ; set segment registers:
    mov ax, data
    mov ds, ax
    mov es, ax
    ;;;;;;;;;;;;;;;;;;adad aval
    mov ah,01h
    int 21h
    mov cx,ax
    ;;;;;;;;;;;;;;;;;;;;adad dovom
    mov ah,01h
    int 21h
    add ax,cx ;;;;;;jam
    mov res, ax
    DECIMAL res, buf, 5
    ;;;;;;;;;;;;;;print
    mov ah, 9
    lea dx, buf
    int 21h
    mov ax, 4c00h ; exit to operating system.
    int 21h
    ends
    end start ; set entry point and stop the assembler


  3. #3
    کاربر دائمی آواتار ali682344
    تاریخ عضویت
    بهمن 1384
    محل زندگی
    تهرلن
    سن
    35
    پست
    296

    نقل قول: جمع دو عدد كه از ورودي گرفته مي شود

    نقل قول نوشته شده توسط tdkhakpur مشاهده تاپیک
    برای اینکه عملیات جمع را امتحان کنید دستی اعداد را باهم جمع بزنید برای دریافت از ورودی باید کد بنویسید.

    ; multi-segment executable file template
    ; This Macro Chenge HEX Or Binary To Decimal .........................
    ; NUMBER Is (WORD) .................................................. ..
    ; BUFFER is address of buffer
    ; digit is len of buffer or digit numbers
    ; RETURN : This Macro Return In bp Decimal Number That It
    ; Has In His End 0
    DECIMAL MACRO NUMBER, BUFFER, DIGIT
    LOCAL E0, E1, LOOP__, EXIT_
    MOV BX, DIGIT
    MOV BYTE PTR BUFFER[BX], '$' ;0
    MOV CX, BX
    LOOP__:;----------------------------------;
    DEC BX ;
    MOV BYTE PTR BUFFER[BX], 32 ; clear the buffer
    LOOP LOOP__;------------------------;
    MOV BX, DIGIT
    MOV AX, NUMBER
    E0:
    MOV DX, 0
    MOV CX, 10
    DIV CX
    DEC BX
    MOV BYTE PTR BUFFER[BX], DL ; BAGIMANDEH IN DX
    ADD BYTE PTR BUFFER[BX], 30H
    CMP BX, 0
    JE EXIT_
    CMP AX, 10
    JNL E0
    E1:
    DEC BX
    MOV BYTE PTR BUFFER[BX], AL
    ADD BYTE PTR BUFFER[BX], 30H
    EXIT_:
    ENDM
    ;---------------------------------------------
    data segment
    res dw ?
    buf db 32 dup(?)
    ends
    stack segment
    dw 128 dup(0)
    ends
    code segment
    start:
    assume cs:code, ds:data, ss:stack
    ; set segment registers:
    mov ax, data
    mov ds, ax
    mov es, ax
    ;;;;;;;;;;;;;;;;;;adad aval
    mov ah,01h
    int 21h
    mov cx,ax
    ;;;;;;;;;;;;;;;;;;;;adad dovom
    mov ah,01h
    int 21h
    add ax,cx ;;;;;;jam
    mov res, ax
    DECIMAL res, buf, 5
    ;;;;;;;;;;;;;;print
    mov ah, 9
    lea dx, buf
    int 21h
    mov ax, 4c00h ; exit to operating system.
    int 21h
    ends
    end start ; set entry point and stop the assembler

    بازم ممنون از كمكتون
    ولي خوب من براي دو عدد از وفقه استفاده كردم
    خروجي برنامه براي عدد4+5=617 دليلش چيه ؟

  4. #4
    کاربر دائمی
    تاریخ عضویت
    فروردین 1388
    محل زندگی
    ایران سرای من است
    پست
    2,655

    نقل قول: جمع دو عدد كه از ورودي گرفته مي شود

    ببینید خود برنامه ایراد نداره شما میتوانید صحت کد رو با دادن ارقام بطور دستی تست کنید.
    ولی وقتی شما از ورودی عدد میگیرید کد اسکی عدد داخل رجیستر قرار میگیره نه خود عدد مثلا اگر عدد کلید یک را بزنید عدد 31 داخل رجیستر قرار میگیره.

  5. #5
    کاربر دائمی آواتار ali682344
    تاریخ عضویت
    بهمن 1384
    محل زندگی
    تهرلن
    سن
    35
    پست
    296

    نقل قول: جمع دو عدد كه از ورودي گرفته مي شود

    نقل قول نوشته شده توسط tdkhakpur مشاهده تاپیک
    ببینید خود برنامه ایراد نداره شما میتوانید صحت کد رو با دادن ارقام بطور دستی تست کنید.
    ولی وقتی شما از ورودی عدد میگیرید کد اسکی عدد داخل رجیستر قرار میگیره نه خود عدد مثلا اگر عدد کلید یک را بزنید عدد 31 داخل رجیستر قرار میگیره.
    ممنون دوست خوبم ولي منظورم تبديلش بود يعني خود عددو نشون بده

  6. #6
    کاربر دائمی
    تاریخ عضویت
    فروردین 1388
    محل زندگی
    ایران سرای من است
    پست
    2,655

    نقل قول: جمع دو عدد كه از ورودي گرفته مي شود

    کد زیر رو جایگزین کد بالا فرار بده ببین چی نشون میده

    ;;;;;;;;;;;;;;;;;;;;adad dovom
    mov ah,01h
    int 21h
    add ax,cx ;;;;;;jam
    mov res, 1992 ;اینجا
    DECIMAL res, buf, 5
    ;;;;;;;;;;;;;;print


  7. #7
    کاربر دائمی آواتار ali682344
    تاریخ عضویت
    بهمن 1384
    محل زندگی
    تهرلن
    سن
    35
    پست
    296

    نقل قول: جمع دو عدد كه از ورودي گرفته مي شود

    نقل قول نوشته شده توسط tdkhakpur مشاهده تاپیک
    کد زیر رو جایگزین کد بالا فرار بده ببین چی نشون میده

    ;;;;;;;;;;;;;;;;;;;;adad dovom
    mov ah,01h
    int 21h
    add ax,cx ;;;;;;jam
    mov res, 1992 ;اینجا
    DECIMAL res, buf, 5
    ;;;;;;;;;;;;;;print

    همون عدد رو نشون مي ده 1992

  8. #8
    کاربر دائمی
    تاریخ عضویت
    فروردین 1388
    محل زندگی
    ایران سرای من است
    پست
    2,655

    نقل قول: جمع دو عدد كه از ورودي گرفته مي شود

    همون عدد رو نشون مي ده 1992
    پس کد شما تونسته اعداد رو در خروجی چاپ کنه حالا میتونید محاسبات خودتان را به این روش در خروجی ظاهر کنید.
    موفق باشید.

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

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