چاپ مقادیر عددی توسط ماکرو در زبان اسمبلی

the_king

مدیرکل انجمن
چاپ اعداد در زبان اسمبلی مشکل است، ماکروی زیر کمک می کند تا کار چاپ اعداد مثبت 16 بیتی ساده شوند :

کد:
print MACRO number
    PUSH    AX
    PUSH    BX
    PUSH    CX
    PUSH    DX
    MOV     AX, number
    MOV     CX, 0
    MOV     BX, 10
loop_1:
    MOV     DX, 0
    DIV     BX
    PUSH    DX
    INC     CX
    CMP     AX, 0
    JNE     loop_1
    MOV     AH, 2
loop_2:
    POP     DX
    ADD     DL, "0"
    INT     21H
    LOOP    loop_2
    POP     DX
    POP     CX
    POP     BX
    POP     AX
ENDM

مثلا کد زیر عدد 12345 را چاپ می کند :
کد:
    print 12345

چون در داخل کد ماکرو از PUSH و POP برای نگهداری مقادیر رجیستر ها استفاده شده، مقادیر قبلی آنها بصورت
تضمین شده حفظ می شوند.
 

the_king

مدیرکل انجمن
کد قبلی اعداد را بدون علامت و همواره مثبت در نظر می گیرد، به همین دلیل برای چاپ اعداد علامت دار منفی
همانند 123- قابل استفاده نیست و آنرا بصورت یک عدد مثبت 65413 نمایش می دهد.

اما ماکروی زیر اعداد منفی را پیش از چاپ آنها شناسایی کرده و بعد از نمایش کاراکتر - آنها را به معادل مثبت شان
تبدیل کرده و سپس نمایش می دهد، به همین جهت اعداد منفی هم به درستی چاپ می شوند :

کد:
print MACRO number
    PUSH    AX
    PUSH    BX
    PUSH    CX
    PUSH    DX
    MOV     AX, number
    OR      AX, AX
    JGE     next_1
    MOV     AH, 2
    MOV     DL, "-"
    INT     21H
    MOV     AX, number
    NEG     AX
next_1:
    MOV     CX, 0
    MOV     BX, 10
loop_1:
    MOV     DX, 0
    DIV     BX
    PUSH    DX
    INC     CX
    CMP     AX, 0
    JNE     loop_1
    MOV     AH, 2
loop_2:
    POP     DX
    ADD     DL, "0"
    INT     21H
    LOOP    loop_2
    POP     DX
    POP     CX
    POP     BX
    POP     AX
ENDM

مثلا کد زیر عدد 123- را نمایش می دهد :
کد:
    print -123

محدوده اعداد علامت دار 16 بیتی از 32768- الی 32767 است.
 

جدیدترین ارسال ها

بالا