اسمبلی

aida-joon

New Member
سلام
برای در یافت یک عدد صحیح که از 0 تا 255 است دستور خاصی وجود داره یا اینکه تنها باید یک مقایسه انجام داد؟:rose:
 

the_king

مدیرکل انجمن
سلام
برای در یافت یک عدد صحیح که از 0 تا 255 است دستور خاصی وجود داره یا اینکه تنها باید یک مقایسه انجام داد؟:rose:

برای دریافت عدد از کاربر که نه، هیچکدوم از دستورات اسمبلی در این حد تکمیلی نیستند. اینجور موارد در وقفه های
DOS انجام میشه که در این مورد خاص اونهم پیشبینی نشده. به همین جهت بایستی یکسری کد بنویسید تا یک رشته
از کاربر دریافت کنه و سپس اون رشته رو به عدد تبدیل کنه. مثلا با استفاده از روتین get_number که قبلا ارائه کرده ام :

کد:
.DATA
    number  DB 5
            DB ?
            DB 5 DUP (?)
.CODE

get_number:
    PUSH    AX
    PUSH    CX
    PUSH    DX
    MOV     AH, 0ah
    LEA     DX, number
    INT     21h
    MOV     BX, -1
    MOV     CL, number[1]
    CMP     CL, 0
    JZ      next_4
    MOV     AH, 2
    MOV     DL, 13
    INT     21h
    MOV     DL, 10
    INT     21h
    MOV     CH, 0
    LEA     SI, number[2]
    MOV     DI, 10
    MOV     BX, 0
loop_2:
    MOV     AL, [SI]
    CMP     AL, "0"
    JB      next_3
    CMP     AL, "9"
    JA      next_3
    SUB     AL, "0"
    MOV     AH, 0
    XCHG    AX, BX
    MUL     DI
    ADD     BX, AX
next_3:
    INC     SI
    LOOP    loop_2
next_4:
    POP     DX
    POP     CX
    POP     AX
    RET

برای مقایسه کردن یک مقدار با محدوده 0 الی 255 کار ساده است، چون 0 الی 255 دقیقا محدوده یک بایت است
و اگر یک مقدار داده ای در این محدوده باشد باید بجز بایت کم ارزش اش بقیه کاملا صفر باشند. کد زیر بررسی می کنه
که آیا بایت با ارزش AX صفر است یا خیر، اگر چنین باشد پس AX بین 0 الی 255 است و به next_1 پرش خواهد کرد :
کد:
TEST    AX, 0ff00h
JZ      next_1

این کد هم همین کار رو می کنه :
کد:
CMP     AH, 0
JZ      next_1
 
آخرین ویرایش:

aida-joon

New Member
تشکر

من میخواهم برنامه ای بنویسم که عددی را بین 0 الی 255 دریافت کنه بعد یکسری کار انجام بده
حالا کدی که شما نوشتیدو باید همینجوری اضافه کنم؟؟:rose:
 

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

بالا